【发布时间】:2017-03-22 11:27:33
【问题描述】:
我想创建一个外部 Hive 表,按记录类型和日期(年、月、日)分区。一个复杂的问题是我的数据文件中的日期格式是单值整数 yyyymmddhhmmss,而不是所需的日期格式 yyyy-mm-dd hh:mm:ss。 我可以仅基于单个数据值指定 3 个新分区列吗?类似于下面的示例(不起作用)
create external table cdrs (
record_id int,
record_detail tinyint,
datetime_start int
)
partitioned by (record_type int, createyear=datetime_start(0,3) int, createmonth=datetime_start(4,5) int, createday=datetime_start(6,7) int)
row format delimited
fields terminated by '|'
lines terminated by '\n'
stored as TEXTFILE
location 'hdfs://nameservice1/tmp/sbx_unleashed.db'
tblproperties ("skip.header.line.count"="1", "skip.footer.line.count"="1");
【问题讨论】:
-
只有当您的 HDFS 数据已经通过 record_type 和 datetime_start(或它的变体)分隔到不同的目录时,分区才有意义。是这样吗?
-
还没有。因此,如果我理解正确,那么我需要创建以下形式的目录:hdfs://nameservice1/tmp/sbx_unleashed.db/createyear=2017/createmonth=01/createday=01/recordtype=1,然后物理移动文件到相应的 hdfs 目录,然后使用 'partioned by (createyear int, createmonth int, createday int, record_type int) 运行上面的命令?
-
为什么不直接使用日期进行分区?
标签: hive