0

想要创建分区表但出现语法错误:

CREATE TABLE public.emp (id int, date_1 date, amt decimal(10,2)) DISTRIBUTED BY (id) PARTITION BY RANGE (extract(year from date_1)::int) ( START ('2008') INCLUSIVE END (' 2010') 每期独家(间隔“1 年”));

错误:“(”或附近的语法错误第 3 行:PARTITION BY RANGE(提取(从 date_1 开始的年份)::int)^

********** 错误 **********

错误:“(”处或附近的语法错误 SQL 状态:42601 字符:117

4

3 回答 3

1

'partition by range' 需要一个列名作为键。尝试:按范围分区 (date_1) (START (date '2008-01-01') INCLUSIVE END (date '2009-01-01') EXCLUSIVE EVERY (INTERVAL '1 year') )

于 2016-10-11T12:54:40.007 回答
0

如果您想要每个分区的名称,那么您必须明确给出每个分区的名称。

CREATE TABLE public.emp (id int, date_1 date, amt decimal(10,2)) 
DISTRIBUTED BY (id) 
partition by range (date_1) 
(partition year2008 START (date '2008-01-01') INCLUSIVE,
 partition year2009 START (date '2009-01-01') INCLUSIVE,
 partition year2010 START (date '2010-01-01') INCLUSIVE
    END (date '2011-01-01') EXCLUSIVE EVERY (INTERVAL '1 year') );

然后将创建以下三个分区表。

public.emp_1_prt_year2008
public.emp_1_prt_year2009
public.emp_1_prt_year2010
于 2016-10-11T16:02:59.827 回答
0

我们需要手动为每个分区提及名称。这将按年创建分区并按月创建子分区。

CREATE TABLE emp (id int, date_1 date, amt decimal(10,2))
DISTRIBUTED BY (id)
partition by range (date_1)
SUBPARTITION BY RANGE (date_1)
(
    PARTITION year_2008 START ('2008-01-01'::date) INCLUSIVE END ('2009-01-01'::date)
 ( 
   SUBPARTITION mnth_jan START ('2008-01-01'::date) INCLUSIVE,
   SUBPARTITION mnth_feb START ('2008-02-01'::date) INCLUSIVE
   END ('2008-03-01'::date)
 ),
    PARTITION year_2009 START ('2009-01-01'::date) INCLUSIVE END ('2010-01-01'::date)
 ( 
   SUBPARTITION mnth_jan START ('2009-01-01'::date) INCLUSIVE,
   SUBPARTITION mnth_feb START ('2009-02-01'::date) INCLUSIVE
   END ('2009-03-01'::date)
 )
 );
于 2017-06-16T09:22:10.993 回答