sqoop增量更新mysql的数据到hive的一张自动分区的分区表,应该怎么做?


0

这是mysql表的表结构:

CREATE TABLE `b_person` (
  `id` bigint(20) NOT NULL,
  `name` varchar(100) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `country` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

这是hive表的表结构:

CREATE TABLE `b_person`(
  `id` bigint,
  `name` string,
  `birthday` string,
  `country` string)
 partitioned by (year int,month int)
 row format delimited fields terminated by '\t'
 stored as parquetfile;

假如hive的表不是分区表,那么sqoop脚本只需要:

sqoop import \
--connect jdbc:mysql://localhost:3306/tmp?zeroDateTimeBehavior=CONVERT_TO_NULL\&serverTimezone=GMT%2B8 \
--username root \
--password ******* \
--table b_person \
--hive-import \
-m 1  \
--hive-database tmp \
--hive-table b_person \
--incremental append \
--check-column birthday \
--last-value "1987-07-23"

(这里检验的列是birthday其实是不符合业务逻辑的,不过我这只是一个测试用例,所以也不要纠结这一点)

但是因为hive是分区表,这样执行会报错没有指定分区,那么假如我想要将mysql的表数据增量更新到hive,并通过birthday进行自动分区,那么应该怎么做?

1 答案


0

--hive-partition-key--hive-partition-value 就是用来指定分区的啊

sqoop import \
--connect jdbc:mysql://localhost:3306/tmp?zeroDateTimeBehavior=CONVERT_TO_NULL\&serverTimezone=GMT%2B8 \
--username root \
--password ******* \
--table b_person \
--hive-import \
-m 1  \
--hive-database tmp \
--hive-table b_person \
--hive-partition-key birthday \
--hive-partition-value 1987-07-23\
--incremental append \
--check-column birthday \
--last-value "1987-07-23"

我来回答

写文章

提问题

面试题