HP Vertica: раздел по полю TIMESTAMPTZ

Я пытаюсь переразбить некоторую таблицу, используя номер недели, считая с какого-то дня:

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 удалить из этого поля информацию о часовом поясе, сделав его детерминированным?

Спасибо!


person Michael Spector    schedule 24.09.2013    source источник


Ответы (2)


Взгляните на функцию 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
person Up_One    schedule 08.01.2014

Поскольку ответа не получил, пишу сюда, что у меня получилось:

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;

Это решение работает.

person Michael Spector    schedule 09.01.2014