sqoop命令常用命令

--sqoop创建hive表

sqoop create-hive-table --connect jdbc:oracle:thin:@$hosts:port:sid --table SourceTable--username $用户名--password $密码--hive-table INTERACT.TS_MESSAGE_TIME_BAK

--sqoop导入到hive

sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --table TS_MESSAGE_TIME_BAK --username oggkafka --password oggkafka --hive-import -hive-table INTERACT.TS_MESSAGE_TIME_BAK -m 1

--查看oracle的所有表

sqoop list-tables --connect jdbc:oracle:thin:@11.205.53.101:1521:test --username oggkafka --password oggkafka

--导入数据到hdfs,限制大小

sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --username oggkafka --password oggkafka --table TS_MESSAGE_TIME_BAK -m 1 --target-dir /user/root --direct-split-size 67108864

--全量导数到hdfs,启动1个mapreduce

sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --username oggkafka --password oggkafka --table TS_MESSAGE_TIME_BAK -m 1

 

 

--sqoop导入hive限制时间范围进行导数(首次执行),并且根据oracle数据库的表自动创建hive表

sqoop import --connect jdbc:oracle:thin:@11.205.53.101:1521:test --table TS_MESSAGE_TIME_BAK --where "to_date(MDDT,'yyyy-mm-dd hh24:mi:ss') between to_date('2018/5/8 2:21:04','yyyy-mm-dd hh24:mi:ss') and to_date('2018/5/8 22:05:00','yyyy-mm-dd hh24:mi:ss')" --username oggkafka --password oggkafka --hive-import --create-hive-table -hive-database INTERACT -hive-table  TS_MESSAGE_TIME_BAK -m 1 --delete-target-dir

 

 

#去除oracle原表的换行符,

注意:以下俩个命令不能同时在一个脚本内出现

--hive-delims-replacement \

--hive-drop-import-delims \

#使用hcatalog的方式创建hive表,数据格式为parquet

sqooop import -Dorg.apache.sqoop.splitter.allow_test_splitter=true \

--connect jdbc:oracle:thin:@10.133.103.202:1521:fsdxdb1 \

--username wxzxcx \

--password 'gf#_Gb14' \

--query " select * from (select * from itm.cust_info) cust_info_hive where \$CONDITIONS" \

--hcatalog-database dx_test_db \

--hcatalog-table cust_info_hive \

--create-hcatalog-table \

--fields-terminated-by '\001' \

--null-string '\\N' \

--null-non-string '\0' \

--hcatalog-storage-stanza 'stored as parquet' \

--split-by cust_id \

-m 5

#使用append的方式创建,将所有的数据追加到hdfs指定目录下

#需要单独创建表

sqoop import -Dorg.apache.sqoop.splitter.allow_test_splitter=true \

--connect jdbc:oracle:thin:@$hostname:$port:$sid \

--username $username \

--password $password \

--query "select $columns from $source_user.$source_table where \$CONDITIONS and $pk like '6%'" \

--append \

--target-dir /user/hive/warehouse/$hive_database.db/$hive_table \

--fields-terminated-by '\001' \

--null-string '\\N' \

--null-non-string '\0' \

--num-mappers 5 \

--split-by $pk \

--as-parquetfile

 

Sqoop====》Hive

 

1.抽取txt格式文件。

sqoop import \

--connect jdbc:oracle:thin:@10.133.103.202:1521:fsdxdb1 \

--table TS_MESSAGE_TIME \

--where "messageid='MS0242851258'" \

--username WXZXCX \

--password gf#_Gb14 \

--hive-import \

--create-hive-table \

--hive-database INTERACT \

--hive-table  TS_MESSAGE_TIME -m 1 \

--null-string 'null' \

--null-non-string 'null' \

--fields-terminated-by '\001'

--lines-terminated-by '\n' \

--delete-target-dir

2.抽取parquet格式文件方法一,使用hcatalog。

sqoop import \

--connect jdbc:oracle:thin:@IP地址:1521:实例名\

--query "select * from 库名.表名 where \$CONDITIONS and UPDATEDT between to_date('2019/1/1 00:00:00','yyyy-mm-dd hh24:mi:ss') and to_date('2019/1/1 23:59:59','yyyy-mm-dd hh24:mi:ss')" \

--username 用户名 \

--password 密码 \

--null-string 'null' \

--null-non-string 'null' \

--split-by 切割字段(一般为主键,如果主键规则无规则,MR会出现数据倾斜) \

--hcatalog-database 库名 \

--hcatalog-table 表名 \

--create-hcatalog-table \

--m 4 \

--hcatalog-storage-stanza 'stored as parquet'

 

3.抽取parquet格式文件方法二,   1.先创建表,再追加parquet格式文件,默认所有列都是string类型的。如果创建表包含date或者double等不是string类型会报错!!

sqoop import \

--append \

--connect jdbc:oracle:thin:@IP地址:端口:实例名 \

--query "select * from 库名.表名 where \$CONDITIONS and rownum<10 " \

--username 用户名 \

--password 密码 \

--null-string 'null' \

--null-non-string 'null' \

--fields-terminated-by '\001' --lines-terminated-by '\n' \

--target-dir /user/hive/warehouse/库名.db/表名\

--num-mappers 1 \

--as-parquetfile

 

 

Hive====》Kudu

 

impala读取hive表;

如果是第一次Hive创建表,impala执行的时候需要  

        INVALIDATE METADATA;                   //重新加载所有库中的所有表

        INVALIDATE METADATA [table]            //重新加载指定的某个表

后期如果是数据变化。

    REFRESH [table]                             //刷新某个表                        

    REFRESH [table] PARTITION [partition]       //刷新某个表的某个分区

    

 

upsert into kudu表 select * from hive表;

 

其他总结:

没有指定--split-by切割字段,mr只能设置为1个

 

 

Sqoop是一款开源的工具主要用于在Hadoop(Hive,HBasw)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。

 

将各种关系型数据导入Hive中,其实大同小异,这里就以Oracle数据为例,将Oracle中的数据导入到Hive中。共分为两个步骤:

 

第一步:用Sqoop命令将关系型数据库中表结构复制到Hive中,只是复制表结构,不复制表中的内容:

   

 sqoop create-hive-table --connect jdbc:oracle:thin:@192.168.8.110:1521:orcl --table A1 --username sky --password 123456 --hive-table a11

    其中A1是Oracle数据库中的表名称,a11则是在Hive中创建的相对应的表名称。

 

    第二步:通过sqoop将关系型数据库表中的数据导入到Hive的表中

   

sqoop import --connect jdbc:oracle:thin:@192.168.8.110:1521:orcl --username sky --password 123456 --table A1 --hive-import -hive-table a11 -m 8

   

   注意事项(大坑):Oracle数据库中的表A1必须大写,否则会报错。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhang_Fei_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值