如何使用 Sqoop 自动将 MySQL table 与 Hive 外部 table 同步?
How to automatically sync a MySQL table with a Hive external table using Sqoop?
我已经在我的本地机器 (Linux) 中拥有一个 MySQL table 它自己,并且我有一个具有相同模式的外部 Hive table作为 MySQL table.
我正在尝试将数据从 MySQL table 导入到我的 Hive 外部 table,我正在为此使用 Sqoop。
但问题是,每当向 MySQL table 添加新记录时,它不会自动更新 Hive 外部 table?
这是我正在使用的 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
我是不是漏掉了什么?或者如何做到这一点?
如有任何帮助,我们将不胜感激。
在您的例子中,新行附加到 table。
所以你需要使用增量追加方法。
什么时候使用追加模式?
- 适用于随时间递增的数值数据,例如
自动递增键
- 导入不断添加新行的 table 时
随着行 ID 值的增加
现在你需要在命令中添加什么
-check-column 指定在确定要导入的行时要检查的列。
--增量指定Sqoop如何确定哪些行是新的。
--last-value 指定check column从上一次导入的最大值
执行此操作的理想方法是使用 sqoop 作业,因为在这种情况下,sqoop Metastore 会自动记住最后一个值
第 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/;
希望这对您有所帮助..
我已经在我的本地机器 (Linux) 中拥有一个 MySQL table 它自己,并且我有一个具有相同模式的外部 Hive table作为 MySQL table.
我正在尝试将数据从 MySQL table 导入到我的 Hive 外部 table,我正在为此使用 Sqoop。
但问题是,每当向 MySQL table 添加新记录时,它不会自动更新 Hive 外部 table?
这是我正在使用的 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
我是不是漏掉了什么?或者如何做到这一点?
如有任何帮助,我们将不胜感激。
在您的例子中,新行附加到 table。 所以你需要使用增量追加方法。
什么时候使用追加模式?
- 适用于随时间递增的数值数据,例如 自动递增键
- 导入不断添加新行的 table 时 随着行 ID 值的增加
现在你需要在命令中添加什么
-check-column 指定在确定要导入的行时要检查的列。
--增量指定Sqoop如何确定哪些行是新的。
--last-value 指定check column从上一次导入的最大值
执行此操作的理想方法是使用 sqoop 作业,因为在这种情况下,sqoop Metastore 会自动记住最后一个值
第 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/;
希望这对您有所帮助..