HP Vertica:按TIMESTAMPTZ字段分区

时间:2013-09-24 09:01:49

标签: bigdata data-warehouse database-partitioning vertica

我正在尝试使用某天的周数来重新分区某些表:

my_fact表包含time_stamp类型为TIMESTAMPTZ的字段

不幸的是,重新分区不起作用,我收到错误:

MyDB=> ALTER TABLE my_fact PARTITION BY MOD(TIMESTAMPDIFF('day', time_stamp::TIMESTAMP, TIMESTAMP '2013-09-23'), 156) REORGANIZE;

NOTICE 4954:  The new partitioning scheme will produce 12 partitions
ROLLBACK 2552:  Cannot use meta function or non-deterministic function in PARTITION BY expression

time_stampTIMESTAMP的演员表是否应该从该字段中删除任何时区相关信息,从而使其具有确定性?

谢谢!

3 个答案:

答案 0 :(得分:1)

看一下date_part()函数,可以使用TIMESTAMPTZ作为其源列: 示例:

**The number of the week of the calendar year that the day is in.**

SELECT EXTRACT(WEEK FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 7
SELECT EXTRACT(WEEK FROM DATE '2001-02-16');
Result: 7

答案 1 :(得分:1)

由于我没有回答,我在这里写的是我最终的结果:

ALTER TABLE my_fact PARTITION BY 
  MOD(
     TIMESTAMPDIFF(
        'day',
        '2013-09-23'::timestamptz AT TIME ZONE 'UTC',
        time_stamp AT TIME ZONE 'UTC'),
     156)
REORGANIZE;

此解决方案有效。

答案 2 :(得分:1)

http://vertica.tips/2014/07/27/error-2552-when-partitioning-with-timestamptz/

你想要

EXTRACT(year FROM timestamptz_field AT TIME ZONE 'UTC');