- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)