Hive-将外部表视为分区是否必须具有'='

我是Hive的新手,并且有以下基本问题:

我正在尝试在HDFS目录中的位置上创建外部表

    /projects/score/output/scores_2020-06-30.gzip

但它不将其视为分区。

开发人员是否应该更改目录名称“ scores = yyyy-mm-dd”代替“ scores_yyyy-mm-dd.gzip” 如“ / projects / score / output / scores = 2020-06-30” 那么只有它会认为是分区的吗?

即将外部表考虑为分区是否必须具有'='

或者我可以在创建时更改下表中的内容。尝试如下:

CREATE EXTERNAL TABLE IF NOT EXISTS XYZ (
...
)
PARTITIONED BY (scores STRING)
LOCATION '/projects/score/output/';

谢谢!

iCMS 回答:Hive-将外部表视为分区是否必须具有'='

您可以使用ALTER TABLE ADD PARTITION在任何位置之上定义分区,甚至可以在表目录之外定义分区。 HDFS中的分区通常是表位置内的目录,但不一定。如果它在表目录中,则可以使用msck repair table将表目录中的现有子目录作为分区附加,它将扫描表位置并添加分区元数据。

在示例分区目录丢失的情况下,您仅具有包含文件的表目录。在这种情况下,文件名无关紧要。

以{= {value}}的形式分配分区目录不是绝对必要的,尽管msck repair table在您的Hive发行版中可能不起作用,但是您仍然可以使用ALTER TABLE ADD PARTITION ... LOCATION命令在任何目录的顶部添加分区

这可能取决于供应商。例如,在Qubole上,ALTER TABLE RECOVER PARTITIONS(MSCK REPAIR TABLE的EMC替代)可以很好地与“ 2020-06-30”之类的目录配合使用。

默认情况下,使用动态分区插入数据时,它会以key = value的格式创建分区文件夹,但是如果使用其他工具创建分区目录,则可以使用'value'作为分区文件夹名称。只要检查一下MSCK REPAIR是否工作即可。如果没有,请在需要MSCK修复时创建目录key = value。

在这种情况下,文件名和分区文件夹中文件的数量无关紧要。

本文链接:https://www.f2er.com/1979453.html

大家都在问