富阳网站建设,自己做的网站和模板,网页开发设计公司,自己如何建立一个网站一、覆盖导入
例如维度表#xff0c;每次导入的数据需要覆盖上次导入的数据。
hive-overwrite参数#xff1a;实现覆盖导入
hive-import参数#xff1a;表示向hive表导入
hive-table参数#xff1a;指定目标hive库表
sqoop import \
--connect jdbc:mysql://hadoop1:3…一、覆盖导入
例如维度表每次导入的数据需要覆盖上次导入的数据。
hive-overwrite参数实现覆盖导入
hive-import参数表示向hive表导入
hive-table参数指定目标hive库表
sqoop import \
--connect jdbc:mysql://hadoop1:3306/source?useSSLfalse \
--username root \
--password 123456 \
--table customer \
--hive-import \
--hive-table ods.customer \
--hive-overwrite
二、增量导入
sqoop提供增量导入模式用于只导入比已经导入行新的数据行。
--check-column 在确定应该导入哪些行时指定被检查的列。
--incremental 指定sqoop怎样确定哪些行是新行。有效值是append、lastmodified
--last-value 指定已经导入数据的被检查列的最大值第一次需要指定以后会自动生成
sqoop支持两种类型的增量导入append和lastmodified。可以使用--incremental参数指定增量导入的类型。
当被导入表的新行具有持续递增的行id值时应该使用append模式。指定行id为--check-column的列。sqoop导入那些被检查列的值比--last-value给出的值大的数据行。
sqoop支持的另一个表修改策略叫做lastmodified模式。当源表的数据行可能被修改并且每次修改都会更新一个last-modified列为当前时间戳时应该使用lastmodified模式。那些被检查的时间戳比--last-value给出的时间戳新的数据行被导入。
增量导入命令执行后在控制台输出的最后部分会打印出后续导入需要使用的last-value当周期性执行导入时应该用这种方式指定--last-value参数的值以确保只导入新的活修改过的数据。可以通过一个增量导入的保存作业自动执行这个过程这是适合重复执行增量导入的方式。这个值可以从日志看到。
1建立sqoop增量导入作业
sqoop job \
--create myjob_1 \
-- \
import \
--connect jdbc:mysql://hadoop1:3306/source?useSSLfalseuserrootpassword123456 \
--table sales_order \
--columns order_number,customer_number,pruduct_code,order-date,entry_date,order_amount \
--where entry_datecurrent_date() \
--hive-import \
--hive-table ods.sales_order \
--incremental append \
--check-columns entry_date \
--last-value 1900-01-01
说明
select current_date() 2023-07-12
entry_date是个时间戳 年-月-日 时:分:秒.毫秒
上面的语句建立一个名为myjob_1的sqoop作业。使用--where参数是为了导入前一天的数据。例如在2点执行此作业则不会导入0到2点这个两个小时产生的销售订单数据。2查看此时作业中保存的last-value结果如下显示
sqoop job --show myjob_1 | grep last.value
可以看到last-value的值为初始的1900-01-01
3首次执行作业
sqoop job -exec myjob_1
因为last-value的值为1900-01-01所以这次会导入全部数据查询ods.sals_order最后结果如下所示 4查看此时作业中保存的last-value结果显示如下
sqoop job --show myjob_1 | grep last.value 可以看到last-value的值为当前最大值2016-06-30 05:20:47.0
5在Mysql该表增加两条数据
一条7月3日一条7月4日
6再次执行sqoop作业因为last-value的值为2016-06-30 05:20:47。所以这次只会导入entry_date比2016-06-30 05:20:47大的数据
sqoop job -exec myjob_1
7查看此时作业中保存的last-value结果如下所示 因为当前为7月4号所以只导入了7月3号的数据
8实际生产中在shell脚本里直接写sqoop执行语句就行
sqoop job --exec myjob_1