最近在接手 Sqoop 的数据导入到处工作较多,其中碰到了一个之前没有遇到过的问题,即Sqoop 在导入postgresql 数据到Hive时,需要添加一个字段 租户id 到Hive 表中,但是这个租户id在来源表中是不存在的。 在Sqoop 脚本中,需要手动处理下,这里记录下处理方式,供今后查看。
我们一般情况下,通过Sqoop 导入数据到Hive 时,采用--table 的方式导入全表、全字段的情况居多。当需要在来源表已有字段的基础上添加字段时,就需要使用到 --query 了。 这里有几个细节需要注意下: 1.--table 和 --query 不能共存,两个属性二选一; 2. --query 中,必须带有特殊条件 WHERE $CONDITIONS ;并且,如果是sq l双引号的话,则多加一个符转义符 WHERE \$CONDITIONS ; 3. 注意新添加的字段类型,例如字符串类型要加单引号等等;新添加的字段要起别名等等;
下面附上完整的Sqoop 命令:
sqoop import --connect 'jdbc:postgresql://xxxx:5432/tenant_sag? \
useUnicode=true&characterEncoding=utf-8' --username 'xxx' \
--password 'xxx' --null-string '\\N' --null-non-string '\\N' \
--hive-import --hive-database test_sqoop --hive-table survey_question \
--hive-drop-import-delims --lines-terminated-by '\n' \
--fields-terminated-by '\001' --map-column-java options=String,name=String \
--query " select 1111 as talent_id, * from survey_question WHERE \$CONDITIONS" \
--map-column-hive options=String,name=String --target-dir \
hdfs:///tmp/sqoop/survey_question_1626071355330 -m 1
如果导入的Sqoop 脚本很多,并且有多张来源表向同一张 Hive 表中导入数据的使用场景,尝试并行化导入的方式。 详见 https://editor.csdn.net/md?not_checkout=1&articleId=118579693
|