我将HFDS中的数据作为.tsv格式。我需要将它们加载到Hive表中。我需要一些帮助。
HDFS中的数据如下:
/ad_data/raw/reg_logs/utc_date=2014-06-11/utc_hour=03
注意:数据每天和每小时加载到HDFS目录/ ad_data / raw / reg_logs。
此HDFS目录中有3个.tsv文件:
funel1.tsv
funel2.tsv
funel3.tsv
每个.tsv文件有3个以制表符分隔的列,其数据如下:
2344 -39 223
2344 -23 443
2394 -43 98
2377 -12 33
...
...
我想用3列id int,region_code int和count int创建一个Hive模式,就像在HDFS中一样。如果可能的话,我想在Hive表中删除那个负号,但不是什么大不了的。
我创建了一个带有架构的Hive表:(如果我错了请纠正我)
CREATE EXTERNAL TABLE IF NOT EXISTS reg_logs (
id int,
region_code int,
count int
)
PARTITIONED BY (utc_date STRING, utc_hour STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/ad_data/raw/reg_logs';
我想要做的就是将数据从HDFS复制到Hive。我不想在路径中使用"加载数据' ..'进入表reg_logs"因为我不想每天手动输入数据。我只想将Hive表指向HDFS目录,这样它就会自动获取每天的数据。
我怎样才能实现它?如果需要,请更正我的hive表架构以及获取数据的方法。
==
第二部分:
我想创建另一个表reg_logs_org,它将从reg_logs中填充。我需要将reg_logs_org中的所有内容放在小时列旁边的reg_logs中。
我创建的架构是:
CREATE EXTERNAL TABLE IF NOT EXISTS reg_logs_org (
id int,
region_code int,
count int
)
PARTITIONED BY (utc_date STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/ad_data/reg_logs_org';
从reg_logs:
将数据插入reg_logs_orginsert overwrite table reg_logs_org
select id, region_code, sum(count), utc_date
from
reg_logs
group by
utc_date, id, region_code
错误消息:
FAILED: SemanticException 1:23 Need to specify partition columns because the destination table is partitioned. Error encountered near token 'reg_logs_org'
==
Thank you,
Rio
答案 0 :(得分:1)
你非常接近。最后一步是您需要将分区信息添加到Hive的Metastore中。 Hive单独存储每个分区的位置,并且它不会自动查找新分区。添加分区有两种方法:
每小时做一次add partition
声明:
alter table reg_logs add partition(utc_date='2014-06-11', utc_hour='03')
location '/ad_data/raw/reg_logs/utc_date=2014-06-11/utc_hour=03';
每小时(或不太频繁)进行表修复。这将扫描根表位置以查找尚未添加的任何分区。
msck repair table reg_logs;
第一种方法有点痛苦,但效率更高。第二种方法很简单,但每次都会对所有分区进行全面扫描。
编辑:问题的后半部分:
您只需添加一些语法,以便使用动态分区插入表中。一般来说,它是:
insert overwrite [table] partition([partition column])
select ...
或者在你的情况下:
insert overwrite table reg_logs_org partition(utc_date)
select id, region_code, sum(count), utc_date
from
reg_logs
group by
utc_date, id, region_code