蜂巢 |按日期创建分区
Hive | Create partition on a date
我需要在 csv 文件之上创建一个外部配置单元 table。 CSV 有 col1、col2、col3 和 col4。
但我的外部配置单元 table 应该在 月 上分区,但我的 csv 文件没有任何月份字段。 col1 是日期字段。
我该怎么做?
您需要将数据重新加载到分区 table。
- 使用 CSV 在文件夹顶部创建未分区的 table (mytable)。
创建分区 table (mytable_part)
create table mytable_part(
--columns specification here for col1, col2, col3, col4
)
partitioned by (part_month string) ...
stored as textfile --you can chose any format you need
使用动态分区将数据加载到分区 table 中,计算查询中的分区列:
设置hive.exec.dynamic.partition=真;
设置 hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table mytable_part partition (part_month)
select
col1, col2, col3, col4,
substr(col1, 1, 7) as part_month --partition column in yyyy-MM format
from mytable
distribute by substr(col1, 1, 7) --to reduce the number of files
;
试试这个方法
将 csv 数据复制到 HDFS 位置 hdfs://somepath/5 的文件夹中,并将该路径添加到外部 table 作为分区。
create external table ext1(
col1 string
,col2 string
,col3 string
,col4 string
)
partition by (mm int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS ORC;
alter table ext1 add partition(mm = 5) location 'hdfs://yourpath/5';
我需要在 csv 文件之上创建一个外部配置单元 table。 CSV 有 col1、col2、col3 和 col4。
但我的外部配置单元 table 应该在 月 上分区,但我的 csv 文件没有任何月份字段。 col1 是日期字段。 我该怎么做?
您需要将数据重新加载到分区 table。
- 使用 CSV 在文件夹顶部创建未分区的 table (mytable)。
创建分区 table (mytable_part)
create table mytable_part( --columns specification here for col1, col2, col3, col4 ) partitioned by (part_month string) ... stored as textfile --you can chose any format you need
使用动态分区将数据加载到分区 table 中,计算查询中的分区列:
设置hive.exec.dynamic.partition=真; 设置 hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table mytable_part partition (part_month) select col1, col2, col3, col4, substr(col1, 1, 7) as part_month --partition column in yyyy-MM format from mytable distribute by substr(col1, 1, 7) --to reduce the number of files ;
试试这个方法
将 csv 数据复制到 HDFS 位置 hdfs://somepath/5 的文件夹中,并将该路径添加到外部 table 作为分区。
create external table ext1(
col1 string
,col2 string
,col3 string
,col4 string
)
partition by (mm int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS ORC;
alter table ext1 add partition(mm = 5) location 'hdfs://yourpath/5';