Hive update实现方案V1.0(优选.) .doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
.. .. .. .. doc.. .. PAGE / NUMPAGES doc.. .. .. .. doc.. .. Hive update实现方案 问题 由于hive数仓的特性,不容许数据进行修改,造成hive中的数据更新活着删除很困难的问题,自hive 0.11版本之后,hive也尝试在测试环境允许进行update和delte操作,但这些操作还不成熟,不敢在生产环境放心使用,其中也有一样不足。所以就需要找一种可靠的方案实现hive的数据更新或者删除。 方案 创建数据表 创建两张数据结构一模一样的hive数据表TEST、TEST_TEMP,其中TEST表的存储格式为“ORCFILE”(性能高),TEST_TEMP表的存储格式为“TEXTFILE”(方便数据加载)。 ID NAME AGE 主键 姓名 年龄 create table TEST_TEMP ( id string, name string, age string ) comment 临时表 partitioned by (y string,m string,d string) row format delimited fields terminated by , stored as textfile create table TEST ( id string, name string, age string ) comment 最终表 row format delimited fields terminated by , stored as orcfile 初始化 通过hive数据load的方式先把数据加载到TEST_TEMP表中(此处也可以通过sqoop进行数据抽取,不再详述)。 load data local inpath /home/hadoop/a.txt overwrite into table TEST_TEMP 通过hive insert overwrite的方式把临时表的数据加载到最终表TEST中。 insert into table TEST select id,name,age from TEST_TEMP 日常 通过hive数据load的方式先把数据加载到TEST_TEM表中(此处也可以通过sqoop进行数据抽取,不再详述)。 load data local inpath /home/hadoop/b.txt overwrite into table TEST_TEMP 通过数据比对方式,找出非更新和非增量的数据,人后把这部分数据覆盖到TEST表中,即保证TEST中的数据和TEST_TEMP中的没有重复(前提是表中必须有主键)。 INSERT OVERWRITE TABLE TEST SELECT id,name,age FROM TEST a LEFT JOIN TEST_TEMP b on a.id=b.id WHERE b.id is null; 注:上述语句其实就是not in的逻辑,如果日常数据上包含增、删、改标识,则只需在关联时在TEST_TEMP表上加条件判断即可。 经过第二步的数据比对重复处理之后,则可以直接把TEST_TEMP中的数据追加(append)到TEST表。 insert into table TEST select id,name,age from TEST_TEMP; ****************增、改实现**************** 注:实现比对出增、改标识 SELECT a.id, a.name, a.age,

文档评论(0)

pxh1986 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档