我正在尝试使用某天的周数来重新分区某些表:
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_stamp
到TIMESTAMP
的演员表是否应该从该字段中删除任何时区相关信息,从而使其具有确定性?
谢谢!
答案 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');