在预分区数据上创建外部表

时间:2014-11-29 22:16:46

标签: hive

我的数据如下:

/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 *没有输出。如何创建将读入此分区数据的外部表?

1 个答案:

答案 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');

完成此操作后,查询会返回文件夹中的输出。