Как в Redshift объединить CTAS с предложением if not exists?

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

Вот что я хочу сделать: у меня есть данные, которые мне нужно перемещать между схемами, и мне нужно создавать целевые таблицы для данных на лету, но только если они еще не существуют.

Вот запросы, которые, как я знаю, работают:

create table if not exists temp_table (id bigint);

Это создает таблицу, если она еще не существует, и она работает нормально.

create table temp_2 as select * from temp_table where 1=2;

Таким образом, создается пустая таблица с той же структурой, что и предыдущая. Это тоже отлично работает.

Однако когда я делаю этот запрос:

create table if not exists temp_2 as select * from temp_table where 1=2;

Redshift задыхается и говорит, что рядом с ним есть ошибка (для записи, я попытался удалить "как", а затем он говорит, что есть ошибка рядом с выбором)

Я ничего не нашел в документации по красному смещению, и на данный момент я просто догадываюсь, как это исправить. Это то, что я просто не могу сделать с красным смещением?

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

РЕДАКТИРОВАТЬ:

Я не верю, что это дубликат. Сообщение, на которое есть ссылка, предлагает ряд решений, которые полагаются на пользовательские функции ... redshift не поддерживает UDF. Недавно они реализовали систему UDF на основе Python, но, насколько я понимаю, она находится в стадии бета-тестирования, и мы все равно не знаем, как ее реализовать.

Тем не менее, спасибо, что посмотрели.


person bigbenbt    schedule 27.03.2015    source источник
comment
возможный дубликат таблицы создания PostgreSQL, если она не существует   -  person Jakub Kania    schedule 27.03.2015
comment
Мне это не кажется дубликатом. Они говорят, что эта функция была исправлена ​​в Postgres 9.1, но мы используем красное смещение, которое является ответвлением более ранней версии Postgres. Кроме того, решение, предлагаемое в связанном посте, основано на UDF, которое не поддерживает красное смещение.   -  person bigbenbt    schedule 29.03.2015


Ответы (1)