красное смещение - как вставить в таблицу сгенерированный временной ряд - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь сгенерировать временные ряды в Redshift и вставить в таблицу, но безуспешно. Что я пробовал до сих пор:

insert into date(dateid,date)
SELECT
    to_char(datum, 'YYYYMMDD')::int AS dateid,
    datum::date AS date
FROM (
    select '1970-01-01'::date + generate_series(0, 20000) as datum
     ) tbl;

Получение следующей ошибки

SQL Error [500310] [0A000]: [Amazon](500310) Invalid operation: Specified types or functions (one per INFO message) not supported on Redshift tables.;

Есть идеи или обходной путь?

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Проблема в том, что generate_series() может быть запущено на узле Leader, но не на вычислительном узле .

Следовательно, можно выполнить инструкцию, подобную этой:

SELECT '1970-01-01'::date + generate_series(0, 20000)

Тем не менее, невозможно использовать этот оператор в FROM, поскольку он будет включать вычислительные узлы.

Решение: Создать таблицу информацииизвне и загрузите результаты в таблицу date или используйте generate_series() напрямую, чтобы сгенерировать нужные значения, сохранить результаты и импортировать их в таблицу date.

1 голос
/ 11 марта 2019

Функция generate_series не работает в Redshift

, однако она генерирует _confusion!Это связано с тем, что он работает нормально, пока вы не попытаетесь записать в таблицу.

Технически причина этого в том, что он работает ТОЛЬКО на ведущем узле.и сам узел-лидер не имеет прямого доступа к таблицам.

Если вы попробуете

SELECT CURRENT_DATE::TIMESTAMP - (i * interval '1 day') as date_datetime
FROM generate_series(1,31) i
ORDER BY 1;

Это выдаст хороший вывод таблицы, поскольку он работает на узле-лидере.

ОДНАКО, если вы запускаете

create table test as
SELECT CURRENT_DATE::TIMESTAMP - (i * interval '1 day') as date_datetime
FROM generate_series(1,31) i
ORDER BY 1;

Сбой при

[2019-03-11 07:38:00] [0A000] ОШИБКА: Указанные типы или функции(по одному на каждое сообщение INFO) не поддерживается в таблицах Redshift.[2019-03-11 07:38:00] [00000] Функция «generate_series (integer, integer)» не поддерживается.

Это потому, что мы сейчас пытаемся создать таблицу, поэтомуsql должен быть запущен на рабочих узлах (не на ведущем узле), поэтому он не работает.

...