问题描述
脚本为:
create table T_RH_AJ_XW_JCJJJ2 (
ZJ_ID VARCHAR(32) not null,JJ_RQ VARCHAR(32),RK_SJ TIMESTAMP,GX_SJ TIMESTAMP,SJZT_W VARCHAR(32)
)
distributed by (ZJ_ID)
partition by range (JJ_RQ)
(
START ('2012-08-11'::date) END ('2012-08-12'::date)
EVERY ( INTERVAL '1 day')
);
我要分区使用varchar列(JJ_RQ数据类型,此列值为'2020-11-08'; 但这是一个错误:
解决方法
我从未与Greenplum合作,但是它基于PostgreSQL,所以我尝试一下:
JJ_RQ
列的类型应该为date
或timestamp
,因为EVERY
子句试图向i添加一个INTERVAL
值。
您应该修复表,以使jj_rq是时间戳或日期,才能正确执行此操作。但是,如果必须按varchar进行分区,则可以使用列表分区。
create table T_RH_AJ_XW_JCJJJ2 (
ZJ_ID VARCHAR(32) not null,JJ_RQ VARCHAR(32),RK_SJ TIMESTAMP,GX_SJ TIMESTAMP,SJZT_W VARCHAR(32)
)
distributed by (ZJ_ID)
partition by list (JJ_RQ)
(
partition part1 values ('2012-08-11'),partition part2 values ('2012-08-12')
);
小型表无法从分区中受益,因此我假设您的表较大。为了帮助减少磁盘I / O,您应该使用附加的优化表,也可能使用压缩。文件较小,扫描时间更少。
create table T_RH_AJ_XW_JCJJJ2 (
ZJ_ID VARCHAR(32) not null,SJZT_W VARCHAR(32)
)
with (appendonly=true)
distributed by (ZJ_ID)
partition by list (JJ_RQ)
(
partition part1 values ('2012-08-11'),partition part2 values ('2012-08-12')
);
这是固定数据类型的最佳方法。
create table T_RH_AJ_XW_JCJJJ2 (
ZJ_ID VARCHAR(32) not null,JJ_RQ timestamp,SJZT_W VARCHAR(32)
)
with (appendonly=true)
distributed by (ZJ_ID)
partition by range (JJ_RQ)
(
START ('2012-08-11'::timestamp) END ('2012-08-12'::timestamp)
EVERY ( INTERVAL '1 day')
);