1

我很难让蜂巢发现在 HDFS 中创建的分区

这是HDFS中的目录结构

warehouse/database/table_name/A
warehouse/database/table_name/B
warehouse/database/table_name/C
warehouse/database/table_name/D

A,B,C,D 是列中的值type

当我使用以下语法创建配置单元表时

CREATE EXTERNAL TABLE IF NOT EXISTS 
table_name(`name` string, `description` string) 
PARTITIONED BY (`type` string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' 
LOCATION 'hdfs:///tmp/warehouse/database/table_name'

查询表时看不到任何记录。

但是当我在 HDFS 中创建目录时,如下所示

warehouse/database/table_name/type=A
warehouse/database/table_name/type=B
warehouse/database/table_name/type=C
warehouse/database/table_name/type=D

当我检查使用时,它可以工作并发现分区show partitions table_name

hive 中是否有一些配置能够将动态目录检测为分区?

4

1 回答 1

1

在某个目录上创建外部表是不够的,还需要挂载分区。Hive 4.0.0 中添加的发现分区功能。对早期版本使用MSCK REPAIR TABLE :

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

或者它在 EMR 上是等效的:

ALTER TABLE table_name RECOVER PARTITIONS;

当您使用创建动态分区时insert overwrite,会自动创建分区元数据,并且分区文件夹的格式为key=value

于 2019-10-26T06:45:26.837 回答