sqoop:如何在将数据从rdbms导入hive表时处理重复值

lb3vh1jj  于 2021-06-03  发布在  Sqoop
关注(0)|答案(2)|浏览(412)

sqoop:如何在将数据从rdbms导入配置单元表时处理重复值。
或者如果配置单元表中已有值,则处理冗余选项?

nfzehxib

nfzehxib1#

如果数据具有唯一标识符,并且正在运行增量导入,则可以在导入的-mergekey值中指定该标识符。这将把表中已经存在的值与最新的值合并。较新的将覆盖最旧的。
如果不运行增量导入,可以使用sqoop merge来统一数据。来自sqoop文档:
合并数据集时,假定每个记录中都有一个唯一的主键值。主键的列用--merge key指定。同一数据集中的多行不应具有相同的主键,否则可能会发生数据丢失。
重要的是,每个记录都有一个唯一的主键。否则,在导入数据时可能会生成一个。为此,您可以使用--query生成导入,并使用连接现有列的数据的select上的unique键生成新列,直到获得唯一的组合。

--query "SELECT CONVERT(VARCHAR(128), [colum1]) + '_' + CONVERT(VARCHAR(128), [column2]) AS CompoundKey ,* FROM [dbo].[tableName] WHERE \$CONDITIONS" \
6yjfywim

6yjfywim2#

没有直接的选择 sqoop 这将提供您正在寻找的解决方案。您必须建立edw流程来实现您的目标:
导入暂存表中的数据(配置单元-为此目的创建暂存数据库)-这应该是目标表的副本,但数据类型可能会根据您的转换要求而有所不同。
通过执行转换将数据从暂存数据库表(hive)加载到目标数据库表(hive)。就你而言:

Insert into table trgt.table 
select * from stg.table stg_tbl 
where stg_tbl.col1 not in (select col1 from trgt.table);

在这里 trgt 是目标数据库, stg 正在暂存数据库-两者都在配置单元中。

相关问题