如何在动态 hdfs 目录上创建分区配置单元 table
How to create partitioned hive table on dynamic hdfs directories
我很难让配置单元发现在 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
的值
当我使用以下语法创建配置单元时 table
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'
我在查询 table 时看不到任何记录。
但是当我在 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
检查时,它可以工作并发现分区
配置单元中是否有一些配置能够将动态目录检测为分区?
在某些目录之上创建外部 table 是不够的,还需要挂载分区。 Discover partitions feature added in Hive 4.0.0. Use MSCK REPAIR TABLE 早期版本:
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
或 EMR 上的等效项:
ALTER TABLE table_name RECOVER PARTITIONS;
并且当您使用 insert overwrite
创建动态分区时,会自动创建分区元数据并且分区文件夹的格式为 key=value
。
我很难让配置单元发现在 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
当我使用以下语法创建配置单元时 table
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'
我在查询 table 时看不到任何记录。
但是当我在 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
配置单元中是否有一些配置能够将动态目录检测为分区?
在某些目录之上创建外部 table 是不够的,还需要挂载分区。 Discover partitions feature added in Hive 4.0.0. Use MSCK REPAIR TABLE 早期版本:
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
或 EMR 上的等效项:
ALTER TABLE table_name RECOVER PARTITIONS;
并且当您使用 insert overwrite
创建动态分区时,会自动创建分区元数据并且分区文件夹的格式为 key=value
。