Генерация временных рядов с датой и часом и создание таблицы в Amazon Redshift - PullRequest
0 голосов
/ 24 сентября 2018

Я хотел бы создать таблицу дат и часов в Amazon Redshift.Следующий запрос будет работать в Postgresql 9.1 и выше, но, к сожалению, мы ограничены Amazon Redshift, что привело к ошибке: «функция generate_series не существует».Ваша помощь в создании временных рядов в 8.02, таких как таблица результатов, будет принята с благодарностью.

SELECT * FROM generate_series('2008-03-01 00:00'::timestamp, 
                          '2008-03-04 12:00', '10 hours');
  generate_series   

generate_series   
    ---------------------
     2008-03-01 00:00:00
     2008-03-01 10:00:00
     2008-03-01 20:00:00
     2008-03-02 06:00:00
     2008-03-02 16:00:00
     2008-03-03 02:00:00
     2008-03-03 12:00:00
     2008-03-03 22:00:00
     2008-03-04 08:00:00

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

«Указанные типы или функции (по одному на каждое сообщение INFO) не поддерживаются в таблицах Redshift.»

SELECT '2017-01-01 00:00:00'::timestamp + x * interval'1 hour' AS Date_Time
FROM generate_series(0, 1000 * 24) AS g(x)

Есть идеи, как это можно создать в таблице в Redshift?Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Отказ от ответственности: Пожалуйста, не используйте эту версию больше!


Работает для Postgres 8.4 (не может проверить 8.0, но он также должен работать)

демо: db <> fiddle

SELECT start_date + gs * interval '10 hours'
FROM (
    SELECT '2008-03-01 00:00:00'::timestamp as start_date, generate_series(1,10, 1) as gs
) s
  1. generate_series от 1 до 10 и объедините результат с начальной отметкой времени.В результате получается таблица с двумя столбцами: по одному с началом в каждой строке, по одному с числами от 1 до 10.
  2. теперь вы можете умножить сгенерированное число на свой интервал и добавить его в начало.

Редактировать: Проблема уже обсуждается

0 голосов
/ 24 сентября 2018

Такой сценарий может помочь вам,

CREATE or REPLACE function gen_ser() returns integer
as 
$body$
declare
query varchar;
i integer := 0;
begin
loop 
exit when i >= 100;
i:=i+10;
query :='Insert into table select ''01-01-2018''::timestamptz + '''|| i ||' hours'' ::interval;';
execute query;
end loop;
return 1;
end;
$body$
language plpgsql;
...