Hive 蜂巢-是否必须有'=';将外部表考虑为分区

Hive 蜂巢-是否必须有'=';将外部表考虑为分区,hive,hdfs,hiveql,create-table,hive-partitions,Hive,Hdfs,Hiveql,Create Table,Hive Partitions,我刚接触蜂巢,有一个基本问题: 我正在尝试在位置的HDFS目录上创建外部表 /projects/score/output/scores_2020-06-30.gzip 但它并没有将其视为分区 开发人员是否需要更改目录名“scores=yyyy-mm-dd”而不是“scores_yyy-mm-dd.gzip” 比如“/项目/得分/产出/得分=2020-06-30” 那么它只考虑分区吗?< /P> 也就是说,必须将外部表的“=”考虑为分区 或者我可以在创建时更改下表中的内容。尝试如下: C

我刚接触蜂巢,有一个基本问题:

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

    /projects/score/output/scores_2020-06-30.gzip
但它并没有将其视为分区

开发人员是否需要更改目录名“scores=yyyy-mm-dd”而不是“scores_yyy-mm-dd.gzip” 比如“/项目/得分/产出/得分=2020-06-30” 那么它只考虑分区吗?< /P>

也就是说,必须将外部表的“=”考虑为分区

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

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

提前谢谢

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

在您的示例中,缺少分区目录,您只有包含文件的表目录。在这种情况下,文件名并不重要

分区目录的格式key=value并不是绝对必需的,尽管
msck repair table
在您的配置单元发行版中可能不起作用,但您仍然可以使用
ALTER table add partition添加分区。。。任何目录顶部的LOCATION
命令

这可能取决于供应商。例如,在Qubole上,ALTER TABLE RECOVER PARTITITIONS(MSCK修复表的EMR替代品)可以很好地处理“2020-06-30”等目录

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


分区文件夹中的文件名和文件数在此上下文中并不重要。

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

在您的示例中,缺少分区目录,您只有包含文件的表目录。在这种情况下,文件名并不重要

分区目录的格式key=value并不是绝对必需的,尽管
msck repair table
在您的配置单元发行版中可能不起作用,但您仍然可以使用
ALTER table add partition添加分区。。。任何目录顶部的LOCATION
命令

这可能取决于供应商。例如,在Qubole上,ALTER TABLE RECOVER PARTITITIONS(MSCK修复表的EMR替代品)可以很好地处理“2020-06-30”等目录

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


文件名和分区文件夹中的文件数在此上下文中并不重要。

您的意思是,首先我可以创建没有分区的表,然后我可以像alter table ADD XYZ partition('scores_2020-06-30.gzip')位置“/projects/scores/output/”那样更改表;我非常怀疑它会起作用。但会检查并更新。@ShaanGreat在某些目录上创建分区表时,分区不会自动创建。您需要
更改表添加分区。。。位置…
MSCK REPAIR TABLE
,MSCK REPAIR将查找表位置中的所有目录,并为这些目录创建分区。您的意思是说,首先我可以创建没有分区的表,然后我可以像alter TABLE ADD XYZ partition('scores_2020-06-30.gzip')位置一样更改表“/projects/score/output/"; 我非常怀疑它会起作用。但会检查并更新。@ShaanGreat在某些目录上创建分区表时,分区不会自动创建。您需要
更改表添加分区。。。位置…
MSCK REPAIR TABLE
,MSCK REPAIR将查找表位置内的所有目录,并为这些目录创建分区