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

问题描述 投票:0回答: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检查时,它可以工作并发现分区

配置单元中是否有一些配置可以将动态目录检测为分区?

hadoop hive create-table
1个回答
0
投票

在某些目录顶部创建外部表是不够的,还需要安装分区。 Hive 4.0.0中添加了Discover partitions功能。对于早期版本,请使用MSCK REPAIR TABLE

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

或等效于EMR:

ALTER TABLE table_name RECOVER PARTITIONS;

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

© www.soinside.com 2019 - 2024. All rights reserved.