我很难找到关于在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
进行检查时,它可以工作并发现分区
配置单元中是否有一些配置可以将动态目录检测为分区?
答案 0 :(得分:1)
在某些目录顶部创建外部表是不够的,还需要挂载分区。 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
。