如何在动态hdfs目录上创建分区配置单元表

7xzttuei  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(376)

我很难让配置单元发现在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 配置单元中是否有一些配置能够将动态目录检测为分区?

nzrxty8p

nzrxty8p1#

在某些目录上创建外部表是不够的,还需要挂载分区。Hive4.0.0中添加的发现分区功能。对早期版本使用msck修复表:

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

或等效于电子病历:

ALTER TABLE table_name RECOVER PARTITIONS;

当您使用 insert overwrite ,正在自动创建分区元数据,分区文件夹的格式为 key=value .

相关问题