Как выполнить массовую загрузку файлов с внешнего уровня Amazon s3 в таблицу снежинок с помощью COPY into для неупорядоченных столбцов с помощью столбца? - PullRequest
0 голосов
/ 08 июля 2020

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

COPY INTO db.schema.table FROM @stage/file.csv 
FILE_FORMAT=(TYPE= CSV field_delimiter ='|' SKIP_HEADER =1) ;

Есть ли способ, которым мы можем поместить sh файлы в том же порядке, что и в целевой таблице в снежинке?

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

Я вижу, есть опция MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE копирования, но она не поддерживает CSV-файл или структурированные данные

Ответы [ 2 ]

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

Как вы сказали, единственный способ сделать это изначально - это примерно так:

    COPY INTO db.schema.table
    (
    col1
    , col2
    , col3
    , col4 
    )
  FROM (SELECT t.$4,t.$3,t.$2,t.$1
        FROM @stage/file.csv AS t);

Но если вы хотите, чтобы это было более автоматизировано и соответствовало по имени столбца, вам нужно было бы написать сохраненный процедура, которая выполняет динамическое c копирование в оператор. Или посмотрите на сторонний инструмент. Для начала вы можете создать сохраненный pro c, который:

  1. запрашивает DDL таблицы, чтобы получить информацию о столбце для таблицы:

    SELECT * FROM db .INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'schema' AND TABLE_NAME = 'table';

  2. выполняет итерацию по количеству столбцов из information_schema и строит динамический c запрос к промежуточному файлу. чтобы получить имена столбцов заголовка:

    SELECT t. $ 1, t. $ 2, t. $ 3, t. $ 4 FROM @ stage / file.csv AS t ORDER BY метаданных $ file_row_number ASC LIMIT 1

  3. Сгенерировать оператор Dynami c COPY INTO на основе порядка столбцов, возвращаемых из промежуточного запроса. Это предполагает, что столбцы заголовка в файле будут соответствовать именам столбцов таблицы снежинок.

Если у меня будет больше времени сегодня вечером / завтра, я соберу рабочий пример и обновлю этот ответ.

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

Вы должны либо сделать это сами, либо взять инструмент, способный сделать эту работу за вас. Snowflake не в состоянии построить это за вас.

Инструменты вроде FiveTran и Matillion достаточно для этого, но они довольно дороги и, на мой взгляд, не стоят своих затрат во многих ситуациях.

Лично я бы посоветовал вам написать сценарий для генерации утомительных COPY INTO операторов, о которых вы упомянули ранее.

...