Redshift: на основе того, существует ли столбец в table_1, создайте другую таблицу и назначьте значения столбца - PullRequest
0 голосов
/ 17 мая 2018

У меня есть таблица в Redshift с именем 'table_1', со столбцами с именами 'column_name_1', 'column_name_2', 'column_name_3' ....... 'column_m' и т. Д.

table_1
column_name_1   column_name_2   column_name_3   column_name_4   ....   column_name_m    

Iхотите создать временную таблицу с именем 'temp_table' на основе следующих условий:

  1. Выберите 3 столбца с именем 'column_name_1','column_name_2','column_name_3'

, в которых, я уверен, уже существует 'table_1.

Выберите столбец с именем column_n, который, я не уверен, существует в table_1.Если 'column_n' существует в 'table_1', выберите его как есть, если он не существует, то создайте столбец в 'temp_table' с именем 'column_n' и назначьте ему символьное значение 'val_n' для всех строк.

Таким образом, мой окончательный «temp_table» будет выглядеть следующим образом:

  1. Если «column_n» существует в «table_1»

temp_table

column_name_1  column_name_2   column_name_3   column_n
col_1_val_1    col_2_val_1     col_3_val_1     col_n_val_1
col_1_val_2    col_2_val_2     col_3_val_2     col_n_val_2
col_1_val_3    col_2_val_3     col_3_val_3     col_n_val_3
....           ....            ....            ....   
Если 'column_n' не существует в 'table_1'

temp_table

column_name_1  column_name_2   column_name_3   column_n
col_1_val_1    col_2_val_1     col_3_val_1     val_n
col_1_val_2    col_2_val_2     col_3_val_2     val_n
col_1_val_3    col_2_val_3     col_3_val_3     val_n
....           ....            ....            ....   

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

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Это не то, что вы должны пытаться делать с помощью SQL-запросов.

Вместо этого используйте системные таблицы и представления, такие как SVV_TABLES , для получения информации о таблицах, а затем создайте соответствующий SQLзаявление для выбора / вставки ваших данных.

Чтобы уточнить, логика определения того, какие столбцы существуют и какие столбцы для вставки / копирования должна быть сделана вне Amazon Redshift .Затем отправьте полученные команды в Redshift для взаимодействия с данными.

0 голосов
/ 17 мая 2018

Это действительно сложно.Предполагая, что у вас есть уникальный столбец id некоторого вида, вы можете сделать:

select t1.column1, t1.column2, t1.column3,
       (select column_n  -- not qualified on purpose
        from table1 tt1
        where tt1.id = t1.id
       ) as column_n
from table1 t1 cross join
     (select val_n as column_n) x;

При этом используется логика определения объема для разрешения column_n в подзапросе.Если столбец существует в table1, то для заполнения значения используется внутренняя ссылка.Если нет, то используется столбец x.В этом случае нет опасности конфликта, потому что table1 не имеет столбца.

...