【问题标题】:sqoop hive import with partitions带分区的 sqoop hive 导入
【发布时间】:2017-07-12 23:16:18
【问题描述】:

我有一些要分区的 sqoop 作业导入到 hive 中,但我无法使其正常工作。导入实际上会起作用:表是sqooped的,它在配置单元中可见,有数据,但在我描述表时,我期望看到的分区参数不会出现。我已经将该表作为 csv 进行了排序,创建了一个外部 parquet 表,并将数据插入其中(这可行),但如果可能的话,我希望能够避免额外的步骤。这是我当前的代码。我错过了什么还是我试图做不可能的事情?谢谢!

sqoop import -Doraoop.import.hint=" " \
--options-file /home/[user]/pass.txt \
--verbose \
--connect jdbc:oracle:thin:@ldap://oid:389/cn=OracleContext,dc=[employer],dc=com/SQSOP051 \
--username [user]\
--num-mappers 10 \
--hive-import \
--query "select DISC_PROF_SK_ID, CLM_RT_DISC_IND, EASY_PAY_PLN_DISC_IND, TO_CHAR(L40_ATOMIC_TS,'YYYY') as YEAR, TO_CHAR(L40_ATOMIC_TS,'MM') as MONTH from ${DataSource[index]}.$TableName where \$CONDITIONS" \
--hive-database [dru_user] \
--hcatalog-partition-keys YEAR \
--hcatalog-partition-values '2015' \
--target-dir hdfs://nameservice1/data/res/warehouse/finance/[dru_user]/Claims_Data/$TableName \
--hive-table $TableName'testing' \
--split-by ${SplitBy[index]} \
--delete-target-dir \
--direct \
--null-string '\\N' \
--null-non-string '\\N' \
--as-parquetfile \

【问题讨论】:

  • 分区键应该放在查询的最后
  • @leftjoin 您的意思是在 --query "______" 部分中,还是我应该将 --hcatalog 选项移到 --as-parquetfile 下方?
  • 在 --query 中,是的。
  • @leftjoin 在我尝试时不起作用。
  • 看来,当时 --as-parquetfile 选项和带有分区的 sqoop 导入不起作用。基于:community.cloudera.com/t5/Kite-SDK-includes-Morphlines/…

标签: hadoop hive sqoop parquet partition


【解决方案1】:

您可以将options-file 替换为--password-file。但是,这并不能解决分区问题。对于分区问题,您可以尝试在导入前先创建分区表$TableName

sqoop import -Doraoop.import.hint=" "               \
  --password-file /home/[user]/pass.txt             \
  --verbose                                         \
  --connect jdbc:oracle:thin:@ldap://oid:389/cn=OracleContext,dc=[employer],dc=com/SQSOP051                              \
  --username [user]                                 \
  --num-mappers 10                                  \
  --hive-import                                     \
  --query "SELECT disc_prof_sk_id, 
       clm_rt_disc_ind, 
       easy_pay_pln_disc_ind, 
       To_char(l40_atomic_ts,'YYYY') AS year, 
       To_char(l40_atomic_ts,'MM')   AS month 
    FROM   ${DataSource[index]}.$tablename 
    WHERE  \$conditions"                            \
  --hcatalog-database [dru_user]                    \
  --hcatalog-partition-key     YEAR                 \
  --hcatalog-partition-values '2015'                \
  --target-dir hdfs://nameservice1/data/res/warehouse/finance/[dru_user]/Claims_Data/$TableName                                                   \
  --hcatalog-table $TableName                       \
  --split-by ${SplitBy[index]}                      \
  --delete-target-dir                               \
  --direct                                          \
  --null-string '\\N'                               \
  --null-non-string '\\N'                           \
  --as-parquetfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-07
    • 2017-02-03
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多