Попытка создать последовательность дат ггггммдд - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь создать последовательность диапазона дат в следующем формате ггггммдд

insert into dim_SH (date_key)
SELECT to_char(('2012-01-01'::date + x)::date,'yyyymmdd') 
FROM generate_series(1, 365*15, 1) x;

Неверная операция Amazon: указанные типы или функции (по одному на сообщение INFO) не поддерживаются в таблицах Redshift.;Не удалось 1 оператор.

1 Ответ

0 голосов
/ 25 апреля 2019

Это правда, что GENERATE_SERIES это предположительно не поддерживается Redshift (здесь Документация Redshift говорит о том, что он не поддерживается), и поэтому всякий раз, когда вам нужно генерировать строки, вы должны создайте их на лету (как показано ниже):

WITH ten as (
  select 1 union all
  select 1 union all
  select 1 union all
  select 1 union all
  select 1 union all
  select 1 union all
  select 1 union all
  select 1 union all
  select 1 union all
  select 1
), ten_k as (
  select row_number() over () as x
  from ten a cross join
     ten b cross join
     ten c cross join
     ten d
  )
SELECT to_char(('2012-01-01'::date + x)::date,'yyyymmdd')
FROM ten_k limit 365*15;

В качестве альтернативы вы можете выбрать строки где-то:

SELECT x FROM (SELECT row_number() over () as x FROM arbitrary_table limit 10000) as ten_k

Действительно ли GENERATE_SERIES не поддерживается?

Я был в шоке , увидев, что вы отправили запрос:

SELECT to_char(('2012-01-01'::date + x)::date,'yyyymmdd')
FROM generate_series(1, 365*15, 1) x;

фактически работал, когда работал против нашего Redshift (в версии 1.0.7078). Примечания к выпуску не упоминают никаких новых функциональных возможностей в этой области [: puzzled:].

EDIT: Очевидно, на этот вопрос , generate_series работает только на узле-лидере , но завершается неудачно, когда ваш запрос должен достичь вычислительных узлов.

Следовательно, не полная поддержка этой функции означает, что не поддерживается .

...