В Amazon Redshift generate_series()
, похоже, поддерживается на узле лидера, но не на вычислительных узлах. Есть ли способ использовать generate_series для создания таблицы на узле лидера, а затем нажать ее на вычислительные узлы?Использование create_series для создания таблицы
Этот запрос работает отлично, работает на узле лидера:
with
date_table as (select now()::date - generate_series(0, 7 * 10) as date),
hour_table as (select generate_series(0, 24) as hour),
time_table as (
select
date_table.date::date as date,
extract(year from date_table.date) as year,
extract(month from date_table.date) as month,
extract(day from date_table.date) as day,
hour_table.hour
from date_table CROSS JOIN hour_table
)
SELECT *
from time_table
Однако этот запрос не удается:
create table test
diststyle all
as (
with
date_table as (select now()::date - generate_series(0, 7 * 10) as date),
hour_table as (select generate_series(0, 24) as hour),
time_table as (
select
date_table.date::date as date,
extract(year from date_table.date) as year,
extract(month from date_table.date) as month,
extract(day from date_table.date) as day,
hour_table.hour
from date_table CROSS JOIN hour_table
)
SELECT *
from time_table
);
Единственное решение, которое я могу думать прямо сейчас, чтобы вытащить результаты запроса в другую программу (например, python), а затем вставить результат в базу данных, но это кажется хакерским.
Для тех из вас, кто никогда не использовал redshift, это сильно измененный вариант postgresql и имеет множество собственных особенностей. Ниже запрос полностью действует работает нормально:
create table test diststyle all as (select 1 as a, 2 as b);
select * from test
выходов:
a b
1 2
проблема проистекает из разницы между leadernode только функциональной и вычислительными узлами функциями на красном смещении. Я уверен, что это не из-за ошибки в моем запросе.
'test diststyle all' является недопустимым именем таблицы. Используйте 'create table test as ...' или 'create table test_diststyle_all as ...' И не '(' после 'as' в' create table .. as' –
@a_horse_with_no_name Redshift - сильно измененный вариант postgres. Когда вы создаете таблицу в redshfit, вы можете указать стиль распространения (distkey, diststyle even или distyle all), который управляет распределением таблицы по кластеру. Вышеупомянутый SQL полностью действителен и если я заменю as (...) с чем-то другим (например, 'select * from users limit 1'), запрос выполняется нормально. – Zach