我的数据如下:
/user/me/output/
key1/
part_00000
part_00001
key2/
part_00000
part_00001
key3/
part_00000
part_00001
数据由"键_"和"部分_ *"预先分区。文件包含我的数据格式为" a,b,key _"。我创建了一个外部表:
CREATE EXTERNAL TABLE tester (
a STRING,
b INT
)
PARTITIONED BY (key STRING)
ROW FORMAT
DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/user/me/output/';
但SELECT *没有输出。如何创建将读入此分区数据的外部表?
答案 0 :(得分:2)
您必须更改目录结构以确保hive读取文件夹。它应该是这样的。
/user/me/output/
key=key1/
part_00000
part_00001
key=key2/
part_00000
part_00001
key=key3/
part_00000
part_00001
完成此操作后,您可以使用您提到的查询在此基础上创建一个表。
CREATE EXTERNAL TABLE tester (
a STRING,
b INT
)
PARTITIONED BY (key STRING)
ROW FORMAT
DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/user/me/output/';
您还必须显式添加分区或对表执行msck修复以使用hive元数据加载分区。其中任何一个都可以:
msck repair table tester;
OR
Alter table tester ADD PARTITION (key = 'key1');
Alter table tester ADD PARTITION (key = 'key2');
Alter table tester ADD PARTITION (key = 'key3');
完成此操作后,查询会返回文件夹中的输出。