Snowflake: в команде MERGE или COPY (с внешнего уровня) могу ли я указать, что только самый новый файл csv должен быть объединен / скопирован? - PullRequest
0 голосов
/ 14 июля 2020

Прямо сейчас наши команды MERGE / COPY указывают на папку s3. Каждый раз, когда в папке S3 имеется более одного файла CSV, Snowflake выдает ошибку «повторяющиеся строки». Каждое утро я вручную перемещаю файлы s3, поэтому в папке s3 всегда остается только один файл. Как я могу указать снежинке, чтобы ОБЪЕДИНИТЬ / КОПИРОВАТЬ только самый новый файл csv в папке? (ПРИМЕЧАНИЕ: дата и время являются частью нашего соглашения об именах для этих файлов CSV)

1 Ответ

0 голосов
/ 17 июля 2020

Предполагая, что вы используете Dell Boomi для выполнения вашей команды COPY INTO, несколько файлов поступают в вашу корзину S3 с одной и той же загрузкой или они загружаются постепенно? TRUE в вашем операторе COPY INTO, так что как только файл будет правильно скопирован, он будет удален из вашей корзины S3, и когда появится следующий файл, не будет конфликтного копирования в вашу рабочую таблицу. PURGE = TRUE требует, чтобы вы убедились, что разрешения настроены правильно, чтобы позволить Snowflake удалять с вашего S3.

https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html#purging -files-after-loading

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

COPY INTO YourTable
    (
    RAW_FILE_NAME
    , RAW_FILE_ROW_NUMBER
    , ColPK
    , ColVal
    , ColVal2
    )
  FROM (WITH CTE AS (SELECT ROW_NUMBER() OVER(ORDER BY metadata$filename DESC) AS rnk, metadata$filename, metadata$file_row_number, t.$1,t.$2,t.$3
        FROM @YourStage/YourDirectory/
        AS t) SELECT metadata$filename, metadata$file_row_number, $1,$2,$3 FROM CTE WHERE rnk = 1);
...