【问题标题】:Sqoop incremental export using hcatalog?Sqoop 使用 hcatalog 增量导出?
【发布时间】:2016-04-19 18:50:27
【问题描述】:

有没有办法使用 sqoop 进行增量导出?我正在为 sqoop 使用 Hcatalog 集成。我尝试使用用于增量导入的 --last-value、--check-column 选项,但 sqoop 给我的错误是选项无效。

【问题讨论】:

    标签: hadoop hive sqoop hadoop2 hcatalog


    【解决方案1】:

    我还没有看到增量 sqoop 导出参数。您可以尝试的另一种方法是在 hive 中创建一个 contol_table,您可以在其中记录每次上次导出时的表名和时间戳。

    create table if not exists control_table (
     table_name  string,
     export_date timestamp
    );
    
    insert into control_table 'export_table1' as table_name, from_unixtime(unix_timestamp()) as export_date from control_table;
    

    如果 export_table1 是您要增量导出的表,并假设是否已经执行了上述两个语句。

    --execute below at once   
    --get the timestamp when the table was last executed
    create temporary table control_table_now as select table_name, max(export_date) as last_export_date from control_table group by table_name;
    
    --get incremental rows
    create table new_export_table1 as select field1, field2, field3, .... timestamp1 from export_table1 e, control_table_now c where c.table_name = 'export_table1' and e.timestamp1 >= c.last_export_date;
    
    --append the control_table for next process
    insert into control_table 'export_table1' as table_name, from_unixtime(unix_timestamp()) as export_date from control_table;
    

    现在,导出使用 sqoop 导出命令增量创建的 new_export_table1 表。

    【讨论】:

    • sqoop 是否可以更新导出中的行?从new_export_table1,如果我运行sqoop,它会更新旧行吗?
    • @VoodooChild 是的,如果 Hive 中的表 export_table1 有一个唯一字段并且相同的字段是最终表中的主键,那么 sqoop 应该更新相应的字段。参考sqoop.apache.org/docs/1.4.2/…
    【解决方案2】:

    默认情况下,sqoop 不支持与 hcatalog 集成的增量更新,当我们尝试它时会出现以下错误

    导入的附加模式与 HCatalog 不兼容。请去掉参数--append-mode 在 org.apache.sqoop.tool.BaseSqoopTool.validateHCatalogOptions(BaseSqoopTool.java:1561)

    您可以使用查询选项使其工作。如this hortonworks document 中所述

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 2016-12-17
      • 2015-08-31
      • 1970-01-01
      • 2017-06-10
      • 2020-05-14
      • 1970-01-01
      相关资源
      最近更新 更多