sqoop oracle到hive,动态分区一次操作记录
Posted IT新手村
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqoop oracle到hive,动态分区一次操作记录相关的知识,希望对你有一定的参考价值。
sqoop,将oracle数据传递到hive,可以直接将表数据覆盖传递,也可以按select传递,这里我用的是select查询的
脚本如下:
1、创建分区表,按c1分区
CREATE TABLE `xx.cc`(
`c1` string)
PARTITIONED BY(`c2` string);
2、通过sqoop将数据导入临时表中
sqoop import -D oraoop.jdbc.url.verbatim=true --hive-import --hive-overwrite --connect jdbc:oracle:thin:@ip:port:实例名 --username xx_name --password xx_password --query "select c1,c2 from table_name where c1=1 and $CONDITIONS" --hive-database hive_database_name --hive-table cc_temp --target-dir /user/hive/warehouse/xx.db/cc_temp_target --delete-target-dir --num-mappers 1 --fetch-size 5000 --hive-drop-import-delims --null-string ‘\N‘ --null-non-string ‘\N‘
sqoop说明:
- query里面,必须有where条件,同时必须添加 $CONDITIONS, $CONDITIONS在执行时会自动替换位 (1= 0),但是不影响查询
- target-dir 对应的目录,需要当前用户有操作权限,同时,target-dir对应的目录,不可存在,或者对应即将生成的表文件;原因如下
- target-dir是sqoop将oracle导入数据生成的临时文件(是文件,不是目录),如果已存在,则会报错
- sqoop将oracle导入到hive后,会将target-dir删除,如果target-dir对应的是即将生成的表文件,则数据会删除
3、将临时表,导入分区表
set hive.exec.dynamic.partition.mode=nonstrict
insert overwrite table xx.cc partition(c1) select * from xx.cc_temp;
以上是关于sqoop oracle到hive,动态分区一次操作记录的主要内容,如果未能解决你的问题,请参考以下文章
SQOOP增量抽取时,在HIVE中实现类似Oracle的merge操作
我想使用 sqoop 导入作业将数据 sqoop 到 hive 列分区表中。我们应该怎么做?