2017-07-17 34 views
1

我已经在自己的本地机器(Linux)中拥有一个MySQL表,并且我有一个与MySQL表具有相同架构的Hive外部表。如何使用Sqoop自动将MySQL表与Hive外部表同步?

我想从MySQL表导入数据到我的Hive外部表,我使用Sqoop。

但问题是,无论何时将新记录添加到MySQL表中,它都不会自动更新Hive外部表?

这是Sqoop导入命令我使用的是:

sqoop import --connect jdbc:mysql://localhost:3306/sqoop --username root -P --split-by id --columns id,name,age,salary --table customer --target-dir /user/chamith/mysqlhivetest/ --fields-terminated-by "," --hive-import --hive-table test.customers 

我缺少的东西在这里?或者如何做到这一点?

任何帮助,不胜感激。

+1

使用增量加载的方式.. – TKHN

+0

添加像什么新的记录添加..是它的突变数据或附加数据的样本? – TKHN

+0

@TKHN它绝对是一个新的行,所有列都有值。增量负载方法?如果你能对此有所了解?谢谢! – Kulasangar

回答

3

在你的情况一个新的行附加到表。 所以你需要使用增量追加方法。

何时使用追加模式?

  • 作品对于被递增随着时间的数值数据,如 自动递增键
  • 进口,其中新行会不断添加 随着行ID表当值

现在你需要添加命令

-check-column指定在确定要导入哪些行时要检查的列。

- 增量指定Sqoop如何确定哪些行是新的。

--last价值从以前的进口

理想指定检查列的最大值在这种情况下sqoop metastore自动记忆上次值

这是使用sqoop工作执行步骤1:用正常的导入命令内在载入数据。

第2步:

sqoop job --create incrementalImportJob -- import \ 
--connect jdbc:mysql://localhost:3306/sqoop 
--username root 
-P 
--split-by id 
--columns id,name,age,salary 
--table customer 
--incremental append \ 
--check-column id \ 
--last-value 5 
--fields-terminated-by "," 
--target-dir hdfs://ip:8020/path/to/table/; 

希望这有助于..