Jar*_*red 6 hadoop hive hortonworks-data-platform
假设我有一个 Hive 表,其中包含一个 TIMESTAMP 列,该列经常(几乎总是)包含在查询的 WHERE 子句中。通过 TIMESTAMP 字段对这个表进行分区是有意义的;然而,为了保持合理的基数,按天分区是有意义的(而不是按 TIMESTAMP 的最大分辨率)。
实现这一目标的最佳方法是什么?我应该创建一个额外的列 (DATE) 并在其上分区吗?或者有没有办法在不创建重复列的情况下实现分区?
它不是一个新列,而是一个伪列,您应该通过添加这样的分区规范来重新创建您的表:
create table table_name (
id int,
name string,
timestamp string
)
partitioned by (date string)
Run Code Online (Sandbox Code Playgroud)
然后你加载数据,像这样动态创建分区
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
FROM table_name_old tno
INSERT OVERWRITE TABLE table_name PARTITION(substring(timestamp,0,10))
SELECT tno.id, tno.name, tno.timestamp;
Run Code Online (Sandbox Code Playgroud)
现在,如果您从表中全选,您将看到该分区的一个新列,但考虑到 Hive 分区只是一个子目录而不是真正的列,因此它不会仅对总表大小产生几千字节的影响。
| 归档时间: |
|
| 查看次数: |
3170 次 |
| 最近记录: |