如何将 mysql 表同步到 hive 表? (不支持 sqoop --incremental lastmodified hive 导入)
Posted
技术标签:
【中文标题】如何将 mysql 表同步到 hive 表? (不支持 sqoop --incremental lastmodified hive 导入)【英文标题】:How do I sync a mysql table to a hive table ? (sqoop --incremental lastmodified hive imports is not supported) 【发布时间】:2019-01-11 06:11:27 【问题描述】:我想将一个 mysql 表同步到 hive 表中。因为orders
表中的记录通常会在不久的将来发生变化。我需要将它们更新到 hive 中。
例如,
-
我将所有 mysql 数据转储到 hive 中
日常工作检查
time_update
近1天的变化记录,并更新到hive表中。
我已经尝试过--incremental lastmodified
,如下所示
sqoop import \
"-Dorg.apache.sqoop.splitter.allow_text_splitter=true" \
--connect $DB_URL \
--username $USERNAME \
--password $PASSWORD \
--direct \
--fields-terminated-by '\t' \
--target-dir '/data/hive/' \
--delete-target-dir \
--hive-database $HIVE_DB \
--hive-table $HIVE_TABLE \
--hive-import \
--hive-overwrite \
--create-hive-table \
--query 'select * from '$HIVE_TABLE' where $CONDITIONS' \
--split-by id \
-m 6 \
--merge-key id \
--incremental lastmodified \
--check-column time_update \
--last-value "2019-01-01 21:00:00"
遇到错误--incremental lastmodified option for hive imports is not supported. Please remove the parameter --incremental lastmodified.
没有--incremental lastmodified option
的正确方法是什么。
【问题讨论】:
【参考方案1】:首先,您必须像增量导入一样删除 --delete-target-dir 和 --create-hive-table 参数,目标目录将保持为所以 --delete-target-dir 不能与 --incremental 参数一起使用。此外,hive-table 应该只创建一次,因此您必须删除 --create-hive-table 参数并在具有相同模式的 hive 中手动创建 hive 表,获取该模式的位置并将其用作 --target-dir。
sqoop import \
--connect <<db_url>> \
--username <<username>> \
--password <<password>> \
--direct \
--fields-terminated-by '\t' \
--hive-database <<hive_db>> \
--hive-table <<hive_table>> \
--hive-import \
--hive-overwrite \
--query 'select * from <<db_table>> where $CONDITIONS' \
--split-by product_id \
-m 6 \
--merge-key product_id \
--incremental lastmodified \
--check-column timedate \
--last-value 0 \
--target-dir /user/hive/warehouse/problem5.db/products_hive (<<hive_table_location>>)
如果不告诉我,这将成功。
【讨论】:
以上是关于如何将 mysql 表同步到 hive 表? (不支持 sqoop --incremental lastmodified hive 导入)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 sqoop 将 Mysql 中的所有表导入到 hive 中用于 hive 中的特定数据库?