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

Hive 在预分区数据上创建外部表,hive,Hive,我有如下数据: /user/me/output/ key1/ part_00000 part_00001 key2/ part_00000 part_00001 key3/ part_00000 part_00001 数据由“key_ux”预先分区,“part_x*”文件以“a,b,key_x”的形式包含我的数据。我创建一个外部表: CREATE EXTERNAL TABLE tester ( a STRING, b INT

我有如下数据:

/user/me/output/
  key1/
    part_00000
    part_00001
  key2/
    part_00000
    part_00001
  key3/
    part_00000
    part_00001
数据由“key_ux”预先分区,“part_x*”文件以“a,b,key_x”的形式包含我的数据。我创建一个外部表:

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*不提供任何输出。如何创建将读取此分区数据的外部表?

您必须更改目录结构,以确保配置单元读取文件夹。应该是这样的

/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修复,以使用配置单元元数据加载分区。其中任何一项都可以:

msck repair table tester;

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

Alter table tester ADD PARTITION (key = 'key1');
Alter table tester ADD PARTITION (key = 'key2');
Alter table tester ADD PARTITION (key = 'key3');