sqoop:如何在将数据从rdbms导入配置单元表时处理重复值。或者如果配置单元表中已有值,则处理冗余选项?
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" \
6yjfywim2#
没有直接的选择 sqoop 这将提供您正在寻找的解决方案。您必须建立edw流程来实现您的目标:导入暂存表中的数据(配置单元-为此目的创建暂存数据库)-这应该是目标表的副本,但数据类型可能会根据您的转换要求而有所不同。通过执行转换将数据从暂存数据库表(hive)加载到目标数据库表(hive)。就你而言:
sqoop
Insert into table trgt.table select * from stg.table stg_tbl where stg_tbl.col1 not in (select col1 from trgt.table);
在这里 trgt 是目标数据库, stg 正在暂存数据库-两者都在配置单元中。
trgt
stg
2条答案
按热度按时间nfzehxib1#
如果数据具有唯一标识符,并且正在运行增量导入,则可以在导入的-mergekey值中指定该标识符。这将把表中已经存在的值与最新的值合并。较新的将覆盖最旧的。
如果不运行增量导入,可以使用sqoop merge来统一数据。来自sqoop文档:
合并数据集时,假定每个记录中都有一个唯一的主键值。主键的列用--merge key指定。同一数据集中的多行不应具有相同的主键,否则可能会发生数据丢失。
重要的是,每个记录都有一个唯一的主键。否则,在导入数据时可能会生成一个。为此,您可以使用--query生成导入,并使用连接现有列的数据的select上的unique键生成新列,直到获得唯一的组合。
6yjfywim2#
没有直接的选择
sqoop
这将提供您正在寻找的解决方案。您必须建立edw流程来实现您的目标:导入暂存表中的数据(配置单元-为此目的创建暂存数据库)-这应该是目标表的副本,但数据类型可能会根据您的转换要求而有所不同。
通过执行转换将数据从暂存数据库表(hive)加载到目标数据库表(hive)。就你而言:
在这里
trgt
是目标数据库,stg
正在暂存数据库-两者都在配置单元中。