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还有默认值