仅导入从SQL到Hive的更新记录

时间:2014-06-14 03:54:58

标签: sql hadoop hive hbase sqoop

因为我们有一个包含2列的表,所以我们假设在SQL中 (我们在SQL源表中没有任何created_date,Updated_date,Flag列,也没有修改源表)

 id is primary key
  id name
  1 AAAAA
  2 BBBBB
  3 CCCCC
  4 ADAEAB
  5 GGAGAG

我使用sqoop将数据拉入hive作为主表,确定 但如果源数据如下更新

  id name
  1 ACACA
  2 BASBA
  3 CCHAH
  4 AASDA1
  5 GGAGAG

问题:

My Issue is that without effecting the Main table data in hive i need to pull the
Updated or Inserted or Deleted data using Sqoop and
also simultaneously update in the Hive Main Table without effecting the 
Existing once....
i have tried  tried to use
--incremental .... so on properties but no result....

结果应为:

output main table is having all the 10 records... it should be 5 records....
If we have More Records like millions of Records Then What is the Solution.....

要求:

on day1 i have 1millions of records
on day 2 i have 1million + current day + updated lets say 2 million
on day2 i have to pull only updated and newly inserted data rather than whole data.
and also 
can Anyone Help me how to combine day1 hive data with day2 updated data...


In case if Anyone has Any other solution like any Alternative please suggest me 
Clearly Because i m new to hadoop....

2 个答案:

答案 0 :(得分:1)

  1. 首次加载
  2. 创建内部表(base_table)
  3. 为增量&创建外部表(incremental_table)。更新记录
  4. 加入base_table& incremental_table基于主键和max_date,并在其上创建一个视图。
  5. 在视图顶部创建一个临时表(报告表)。
  6. 删除base_table并插入来自reporting_table的数据。 请参考以下链接: https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.4.0/bk_dataintegration/content/incrementally-updating-hive-table-with-sqoop-and-ext-table.html

答案 1 :(得分:0)

Hive没有为您提供更新特定条目的选项,但是如果您针对特定情况,则会有一些解决方法,

为了仅提取更新/新数据,您必须具有某种时间戳或机制,以便在上次导入后获取所有行已更新/添加到您的数据的内容。一旦你拥有它,你可以使用--incremental with sqoop作为参数,或者在查询中传递 - where子句以仅选择更新/插入的条目。

你的第二个要求是hive不支持更新已经加载的条目的东西,所以这是我的2美分,如果它可以帮助你。

将新数据加载到不同的表或日期分区中,然后在现有的hive表和主键上的新表中执行左外连接,以填充现有表中的更新列并插入在现有表中覆盖此数据。虽然这不是一步到位的过程,但这可行。