如何将 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 导入)的主要内容,如果未能解决你的问题,请参考以下文章

外部覆盖后 Spark 和 Hive 表架构不同步

如何使用 sqoop 将 Mysql 中的所有表导入到 hive 中用于 hive 中的特定数据库?

教你使用Sqoop一次性将mysql中的十张表导入到hive中

使用Hive表名将Sqoop导出hive表导出到RDBMS

sqoop从hive导入数据到mysql时出现主键冲突

如何用sqoop将hive分区表信息导入到mysql命令