【发布时间】:2017-02-22 11:04:18
【问题描述】:
我在mysql中有如下表测试:
id name address
1 Km sky
2 hd heaven
3 Ab null
4 en null
现在我做了如下的 sqoop 导入
sqoop import--connect jdbc:mysql://XXXXXX/testing --username XXXX --password XXXX --query "select * from testing.test where \$CONDITIONS" --null-string '' --null-non-string '' -m 1\
--hive-import --hive-database testing --hive-table test --create-hive-table --target-dir /user/hive/warehouse/testing.db/test
我得到了想要的结果。
然后我们在 mysql 表中添加了一个新的列,额外增加了 2 行
id name address nation
1 Km sky null
2 hd heaven null
3 Ab null null
4 en null null
5 abc efd USA
6 fge cde UK
现在我想要更新上述列和行的现有配置单元表。我已经完成了以下 sqoop 工作
Sqoop 作业:
sqoop job --create sqoop_test -- import --connect jdbc:mysql:xxxxxxx/testing --username XXXXX --password XXXX --query "SELECT * from testing.test WHERE \$CONDITIONS" --incremental append\
--check-column id --last-value "3" --split-by 'id' --target-dir /user/hive/warehouse/testing.db/test
但是当我查询 hive 表时,我得到的结果为新行的 null 并且新列不显示。如下所示
id name address
NULL NULL NULL
NULL NULL NULL
1 Km sky
2 hd heaven
3 Ab
4 en
我们如何在 hive 的现有表中追加新列和新行?
或者我使用的方法是完全错误的。请告诉我
【问题讨论】:
-
对于模式演化,您可以使用 avro 数据类型。对于增量数据,在 sqoop 中使用增量模式(lastmodified 用于更新)。