Hive 基于文件路径的外部表配置单元集分区

Hive 基于文件路径的外部表配置单元集分区,hive,hdfs,datetime-format,hiveql,Hive,Hdfs,Datetime Format,Hiveql,我的工作是按照以下格式将文件写入hdfs: /table_name/yyyy/MM/dd/HH/mm/ss/file_name.avro 是否可以定义按年份和时间戳(HH:mm:ss)进行分区的配置单元外部表,而无需移动文件和重命名目录?您可以通过为每个yyyy/HH/mm/ss实例编写load data语句来实现这一点 LOAD DATA INPATH '/table_name/yyyy/MM/dd/HH/mm/ss/file_name.avro' INTO TABLE tablename

我的工作是按照以下格式将文件写入hdfs:

/table_name/yyyy/MM/dd/HH/mm/ss/file_name.avro

是否可以定义按年份和时间戳(HH:mm:ss)进行分区的配置单元外部表,而无需移动文件和重命名目录?

您可以通过为每个yyyy/HH/mm/ss实例编写load data语句来实现这一点

LOAD DATA INPATH '/table_name/yyyy/MM/dd/HH/mm/ss/file_name.avro' INTO TABLE tablename PARTITION (year=yyyy, hour=HH, minute=mm, second=ss)

可以通过为每个yyyy/HH/mm/ss实例编写load data语句来实现这一点

LOAD DATA INPATH '/table_name/yyyy/MM/dd/HH/mm/ss/file_name.avro' INTO TABLE tablename PARTITION (year=yyyy, hour=HH, minute=mm, second=ss)

我是否可以以某种方式将小时、分钟和秒连接到单个列中?当然,如果您将分区列定义为字符串类型,。在连接的情况下,您应该使用分区筛选器,例如在第二个字段上进行通配符搜索时,应使用%s。例如,从tablename中选择*,其中我的部分如“HH\u mm\uu%”。此外,删除可能是一个问题。您不能编写这样的语句:drop partition(我的部分,比如'HH\u mm\%')。你应该为每秒钟写一个拖放分区(my_part='HH_mm_ss')。酷,它可以工作。还有一个问题-其中一些路径可能会被更新(另一个avro文件可能会针对相同的hh:mm:ss到达)是否有一种通用方法可以在以后添加新文件(如使用msck修复表)并避免两次加载相同的数据?使用此方法添加目录作为分区:
ALTER table table\u name add partition partition(tstamp='yyyy\u hh\u mm\u ss')位置“/table_name/yyyy/MM/dd/HH/MM/ss”
我可以将小时、分钟和秒串接成一列吗?当然,如果您将分区列定义为字符串类型。在串接的情况下,当您想在第二个字段上进行通配符搜索时,您应该使用分区筛选器,例如使用%进行通配符搜索。例如,在You’我的部分像‘HH_-mm_%’。此外,删除可能是一个问题。你不能写这样的语句:删除分区(我的部分像‘HH_-mm_%')。你应该每秒钟写一次删除分区(my_部分='HH_-mm_-ss')。酷,它可以工作。不过,还有一个问题-一些路径可能会被更新(另一个avro文件可能会针对相同的HH:mm:ss到达)是否有一种通用方法可以在以后添加新文件(如使用msck修复表)并避免两次加载相同的数据?使用此方法可以将目录添加为分区:
ALTER table\u name add partition partition partition(tstamp='yyyy\u hh\u mm\u ss')LOCATION'/table\u name/yyyy/mm/dd/hh/mm/ss'