sqoop版本:1.4.6+cdh5.13.3+132
oracle导入到hdfs(rowid字段)
工作中经常使用sqoop导入数据到hdfs上,由于oracle表中有些字段包括/t/r/n等特殊字符,为了数据不出现错位,解析失败等情况,我们采用parquet压缩格式(其中时间存为 "yyyy-mm-dd hh24:mi:ss.ff"格式)
sqoop import \
--connect jdbc:oracle:thin:@//IP:1521/ASMP2 \
--username <username> \
--password <password> \
--query "SELECT rowidtochar(rowid) as row_id,t.id,t.content_code,t.content_name,t.price_type,t.oli_type,t.content_status,t.creat_by,to_char(t.creat_time,'yyyy-mm-dd hh24:mi:ss.ff') creat_time FROM SBPOPT.TT_PD_SERVICE_SONTENT t where \$CONDITIONS" \
--delete-target-dir \
--target-dir /user/hive/warehouse/tt_pd_service_sontent \
--split-by ID \
--as-parquetfile \
-m 1
oracle导入到hdfs(parquet格式)
如果分区字段是日期类型还需要特殊处理"to_char(creat_time,‘yyyy’)"
sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true"\
--connect jdbc:oracle:thin:@//IP:1521/ASMP2 \
--username <username> \
--password <password> \
--query "SELECT rowidtochar(rowid) as row_id,t.id,t.content_code,t.content_name,t.price_type,t.oli_type,t.content_status,t.creat_by,to_char(t.creat_time,'yyyy-mm-dd hh24:mi:ss.ff') creat_time FROM SBPOPT.TT_PD_SERVICE_SONTENT t where \$CONDITIONS" \
--delete-target-dir \
--target-dir /user/hive/warehouse/tt_pd_service_sontent \
--split-by to_number(to_char(creat_time,'yyyy')) \
--as-parquetfile \
-m 8
HDFS导出到oracle(text格式)
针对特殊字符进行处理,比如NULL
sqoop export
--connect jdbc:oracle:thin:@//IP:1521/SVWOT
--username <username>
--password <password>
--table DACU.TT_TEST
--input-fields-terminated-by '\t'
--export-dir /user/asmp/hive/test
--input-null-string '\\N'
--input-null-non-string '\\N'
--columns=RSSC_CODE,PROVINCE_CODE,CITY_CODE,SST_CODE,DATE_YM,SERIES_CODE,MODEL_CODE,CAR_NUMBER_YEAR,CAR_NUMBER_MONTH,CREATE_DATE
-m 1
HDFS导出到oracle(parquet格式)
parquet存储格式的Hive表,导入到Oracle
sqoop export
--connect jdbc:oracle:thin:@//IP:1521/SVWOT
--username <username>
--password <password>
--table DACU.TT_TEST
hive分区表导出到oracle(text格式)
sqoop export
--connect jdbc:oracle:thin:@//IP:1521/SVWOT
--username <username>
--password <password>
--table DACU.TT_TEST
--input-fields-terminated-by '\t'
--export-dir /user/asmp/hive/test_table/partition_date=2020
--input-null-string '\\N'
--input-null-non-string '\\N'
--columns=RSSC_CODE,PROVINCE_CODE,CITY_CODE,SST_CODE,DATE_YM,SERIES_CODE,MODEL_CODE,CAR_NUMBER_YEAR,CAR_NUMBER_MONTH,CREATE_DATE
-m 1
注意事项:
生产环境中存在,sqoop导入数据识别不了(结果为NULL)的情况,需要专门监控系统,检测文件是否生成,数量是否一致,内容是否为NULL(也可以从应用端检测是否生成结果,如果持续几天结果都是空则可以判断是源端数据表出现问题)