0
点赞
收藏
分享

微信扫一扫

Sqoop导入表数据子集

浮游图灵 2022-02-12 阅读 46

where

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

where子句的语法如下。

--where <condition>

下面的命令用来导入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-00000
50d6394-e9qd-112eb-9c7a-030c2213e292,c102
50d6394-e9qd-11fb-9c7a-030c2213e292,c102
50d6394-e9qd-1beb-9c7a-030c2213e292,c102
50d6394-e9qd-1deb-9c7a-030c2213e292,c102
50d6394-e9qd-1f2eb-9c7a-030c2213e292,c102
50dd394-e9qd-112eb-9c7a-030c2213e292,c102
50f6394-e92d-112eb-9c7a-030c2218e062,c102
50f6394-e9fd-112eb-9c7a-030c2218e062,c102
50f6394-e9qd-112eb-9c7a-030c2213e292,c102
50f6394-e9qd-112eb-9c7a-030c2218e062,c102
50f6394-e9qd-112eb-9c7a-030c2218e262,c102
50f6394-e9qd-112eb-9c7a-030c2218e292,c102
50f6394d-e9fd-11eb-9c7a-000c2218e062,c102
50f6394d-e9fd-11eb-9c7a-000c2918e062,c102
50f6394d-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-00000
50d6394-e9qd-112eb-9c7a-030c2213e292 c102
50d6394-e9qd-11fb-9c7a-030c2213e292 c102
50d6394-e9qd-1beb-9c7a-030c2213e292 c102
50d6394-e9qd-1deb-9c7a-030c2213e292 c102
50d6394-e9qd-1f2eb-9c7a-030c2213e292 c102
50dd394-e9qd-112eb-9c7a-030c2213e292 c102
50f6394-e92d-112eb-9c7a-030c2218e062 c102
50f6394-e9fd-112eb-9c7a-030c2218e062 c102
50f6394-e9qd-112eb-9c7a-030c2213e292 c102
50f6394-e9qd-112eb-9c7a-030c2218e062 c102
50f6394-e9qd-112eb-9c7a-030c2218e262 c102
50f6394-e9qd-112eb-9c7a-030c2218e292 c102
50f6394d-e9fd-11eb-9c7a-000c2218e062 c102
50f6394d-e9fd-11eb-9c7a-000c2918e062 c102
50f6394d-e9fd-11eb-9c7a-030c2218e062 c102

增量导入

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

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

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

--incremental <mode>
--check-column <column name>
--last value <last check column 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还有默认值


举报

相关推荐

0 条评论