Sqoop导入表数据子集

网友投稿 219 2022-11-21

Sqoop导入表数据子集

where

我们可以导入表的使用Sqoop导入工具,​​"where"​​子句的一个子集。它执行在各自的数据库服务器相应的SQL查询,并将结果存储在HDFS的目标目录。

where子句的语法如下。

--where

下面的命令用来导入vehicle_name表数据的子集。子集查询camera_name为c102,且列只需要id,camera_name

命令如下:

sqoop import \--connect jdbc:mysql://master:3306/duanjc \--username root \--password 123456 \--where "camera_name ='c102'" \--target-dir /wherequery \--columns id,camera_name \--table vehicle_name --m 1

​​--columns​​ 表示要导入哪些列​​

查看hdfs,只包含符合条件的记录。

[root@master bin]# hadoop fs -cat /wherequery/part-m-0000050d6394-e9qd-112eb-9c7a-030c2213e292,c10250d6394-e9qd-11fb-9c7a-030c2213e292,c10250d6394-e9qd-1beb-9c7a-030c2213e292,c10250d6394-e9qd-1deb-9c7a-030c2213e292,c10250d6394-e9qd-1f2eb-9c7a-030c2213e292,c10250dd394-e9qd-112eb-9c7a-030c2213e292,c10250f6394-e92d-112eb-9c7a-030c2218e062,c10250f6394-e9fd-112eb-9c7a-030c2218e062,c10250f6394-e9qd-112eb-9c7a-030c2213e292,c10250f6394-e9qd-112eb-9c7a-030c2218e062,c10250f6394-e9qd-112eb-9c7a-030c2218e262,c10250f6394-e9qd-112eb-9c7a-030c2218e292,c10250f6394d-e9fd-11eb-9c7a-000c2218e062,c10250f6394d-e9fd-11eb-9c7a-000c2918e062,c10250f6394d-e9fd-11eb-9c7a-030c2218e062,c102

query

按需求导入

sqoop import \--connect jdbc:mysql://master:3306/duanjc \--username root \--password 123456 \--target-dir /wherequery2 \--query 'select id,camera_name from vehicle_name where camera_name="c102" and $CONDITIONS' \--split-by id \--fields-terminated-by '\t' \--m 1

如果要用query,就要写​​$CONDITIONS​​,​​--fields-terminated-by​​ 指定存储的时候,字段之间按照这个分割

查看hdfs:已经使用/t进行字段分割了

[root@master bin]# hadoop fs -cat /wherequery2/part-m-0000050d6394-e9qd-112eb-9c7a-030c2213e292 c10250d6394-e9qd-11fb-9c7a-030c2213e292 c10250d6394-e9qd-1beb-9c7a-030c2213e292 c10250d6394-e9qd-1deb-9c7a-030c2213e292 c10250d6394-e9qd-1f2eb-9c7a-030c2213e292 c10250dd394-e9qd-112eb-9c7a-030c2213e292 c10250f6394-e92d-112eb-9c7a-030c2218e062 c10250f6394-e9fd-112eb-9c7a-030c2218e062 c10250f6394-e9qd-112eb-9c7a-030c2213e292 c10250f6394-e9qd-112eb-9c7a-030c2218e062 c10250f6394-e9qd-112eb-9c7a-030c2218e262 c10250f6394-e9qd-112eb-9c7a-030c2218e292 c10250f6394d-e9fd-11eb-9c7a-000c2218e062 c10250f6394d-e9fd-11eb-9c7a-000c2918e062 c10250f6394d-e9fd-11eb-9c7a-030c2218e062 c102

增量导入

增量导入是仅导入新添加的表中的行的技术。

它需要添加​​'incremental', 'check-column',​​和​​​'last-value'​​​选项来执行增量导入。

下面的语法用于Sqoop导入命令增量选项。

--incremental --check-column --last value

假设新添加的数据转换成emp表如下:

1206,satish p,grp des,20000,GR

下面的命令用于在emp表执行增量导入。

sqoop import \--connect jdbc:mysql://master:3306/userdb \--username root \--password root \--table emp --m 1 \--target-dir /emp_append \--incremental append \--check-column id \--last-value 1203

那个id那一列,也就是按照那一列增量导入的,最好是int,可比较性

--incremental append表示要增量导入

--check-column id表示要按照那一列增量导入

​​--last-value 1203​​上一列的值是1203,表示这次是从这个往后面

根据时间增量导入

sqoop import \--connect jdbc:mysql://master:3306/company \--username root \--password root \--table staff \--check-column last_modified \--incremental lastmodified \--last-value "2017-09-28 22:20:38" \--m 1 \--append

根据属性last_modified来增量导入,时间是last-value

使用last_modified方式导入数据要指定增量数据是要​​--append​​(追加)还是要​​--merge-key​​(合并)

​​--incremental lastmodified​​模式下last-value指定的值是会包含于增量导入的数据中

注意

sqoop中可以使用

sqoop import -D property.name=property.value

加入执行任务的参数,多个参数用空格隔开

sqoop-site.xml中有些属性设置了值,如果注释了就表示没有了,没有默认值.不像hadoop还有默认值

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:基于SpringBoot Mock单元测试详解
下一篇:ZENDURE发布A8PD Pro双USB-C 4口快充移动电源 总输出超100W
相关文章

 发表评论

暂时没有评论,来抢沙发吧~