У меня есть база данных Redshift, в которой хранятся сообщения.Посты определяются как уникальные по их post_id
, а все остальные поля могут быть переменными.
Я использую промежуточную таблицу, чтобы сделать эквивалент UPSERT
, используя следующий запрос:
BEGIN;
CREATE TABLE posts_staging (LIKE posts);
COPY posts_staging (post_id,user_id,timestamp,votes,comments) FROM 's3://posts' CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=yyyy' CSV;
DELETE FROM posts USING posts_staging WHERE posts.post_id = posts_staging.post_id;
INSERT INTO posts SELECT DISTINCT * FROM posts_staging;
DROP TABLE posts_staging;
END;
В большинстве случаев это работает правильно, однако я замечаю некоторые повторяющиеся значения в таблице.Я полагаю, что происходит то, что есть вероятность, что загруженный файл CSV будет иметь дубликат post_ids
, но с другими полями (например, с разным количеством лайков), то есть DISTINCT
вставляет несколько одинаковых post_id
,Есть ли способ изменить этот запрос только на INSERT
уникальный post_ids
?