sqoop import语句:
要求必须在where条件语句后面加占位符\$CONDITIONS"。
但是我的select语句本身是不需要有where条件语句的,此时可以直接在select语句后面只写一个where 不加条件,再加一个\$CONDITIONS 即 where \$CONDITIONS
sqoop import \
--connect jdbc:mysql://172.XX.X.XXX:3306/数据库名 \
--username 数据库用户名 \
--password 数据库密码 \
--query "select * from users_userprofile where \$CONDITIONS" \
--target-dir /origin_data/test/sqoop/db/ods/ods_users_userprofile/2022-03-10 \
--delete-target-dir \
--fields-terminated-by "\t" \
--num-mappers 1 \
--null-string '\\N' \
--null-non-string '\\N'
如果有where条件,则需要在条件后面 用and 和 \$CONDITIONS 连接,即 where XXX and \$CONDITIONS。
sqoop import \
--connect jdbc:mysql://172.XX.X.XXX:3306/数据库名 \
--username 数据库用户名 \
--password 数据库密码 \
--query "select * from users_userprofile where id < 10 and \$CONDITIONS" \
--target-dir /origin_data/test/sqoop/db/ods/ods_users_userprofile/2022-03-10 \
--delete-target-dir \
--fields-terminated-by "\t" \
--num-mappers 1 \
--null-string '\\N' \
--null-non-string '\\N'
额外小计:
'\\N':单引号' '原样显示里边的内容=>\\N ,sqoop的底层是java代码,java中\\会转义为\,即最后会显示为\N。
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。在导出数据时采用--input-null-string和--input-null-non-string两个参数。导入数据时采用--null-string和--null-non-string。