У меня есть поле идентификатора в одной из моих таблиц, заданное как
User_Key BIGINT PRIMARY KEY IDENTITY(-1,1) NOT NULL
Для начального числа задано -1, чтобы учесть неизвестное значение (универсальное для всех моих таблиц) и таблицу, о которой идет речьдобавляется, а не удаляется и воссоздается каждый раз, но процесс настроен на воссоздание таблицы, если она случайно отброшена.
Поскольку RedShift не поддерживает операторы if (в идеале, я бы вставил неизвестное значение, если таблица еще не существует), мой обходной путь (с использованием EXCEPT) показан ниже.
CREATE TABLE IF NOT EXISTS TBL
(User_Key BIGINT PRIMARY KEY IDENTITY(-1,1) NOT NULL
,Col1 VARCHAR(255) NOT NULL
,Col2 INT
,COL3 VARCHAR(255) NOT NULL
INSERT INTO TBL
(Col1
,Col2
,Col3)
SELECT
'Unknown'
NULL
'Etc'
EXCEPT
SELECT
Col1
,Col2
,Col3
FROM TBL
В предложении EXCEPT значение в поле User_Key изменяется (но никогда не равно -1, как ожидается).Без условия EXCEPT поле User_Key работает точно так же, как и ожидалось.Тестирование этого процесса включало удаление и воссоздание этой таблицы при каждой итерации.
Я выполнил обычную проверку документации процесса / форумов и т. Д., Но не вижу, чтобы об этом сообщали в другом месте.Это известная проблема, которую можно исправить, указав дополнительные параметры?У меня есть обходной путь для этого (включая инструкцию create и неизвестное значение до остальной части процедуры в моем приложении, но я бы предпочел сохранить сценарий как можно меньшим количеством частей.