Снежинка: Превращение поэтапного URL-адреса S3 в столбцы таблицы

#snowflake-cloud-data-platform

Вопрос:

Я поместил некоторые данные из S3 в Snowflake, которые я хочу скопировать в таблицу. Однако я хочу, чтобы некоторые столбцы в таблице были значениями из пути URL-адреса промежуточных данных. Например —

Данные хранятся следующим образом — s3://bucket1/subbucket1/object_ID/экземпляр/тип/файл.json

Я хочу сохранить данные в таблице, которая выглядит следующим образом:

object_ID пример Тип значения из файла (JSON)
2222 3333 тип1 {JSON}

Единственный способ, который я смог найти, помогающий фильтровать команду КОПИРОВАТЬ В, — это функция ШАБЛОНА, которая позволяет копировать только значения, указанные в регулярном выражении. Используя эту функцию, я смог вернуть только некоторые файлы, но в результирующей таблице указано единственное значение полного пути.

Ответ №1:

Я предполагаю, что вы используете эту METADATA$FILENAME функцию во время своей COPY INTO команды? Вы пробовали анализировать его непосредственно как часть вашего SELECT ?

Что-то вроде:

 COPY INTO ...
SELECT SPLIT_PART(METADATA$FILENAME,'/',5),
       SPLIT_PART(METADATA$FILENAME,'/',6),
       SPLIT_PART(METADATA$FILENAME,'/',7),
       $1
FROM @STAGE;
 

Я не пробовал это, чтобы проверить, работает ли это в команде КОПИРОВАНИЯ, но это определенно работает при выборе непосредственно на сцене, поэтому я бы предположил, что это сработает и для КОПИИ. Если это не так, дайте мне знать.

Комментарии:

1. Спасибо! Похоже, это было близко. Вот что произошло: СКОПИРУЙТЕ В Audience_Tracking ИЗ (ВЫБЕРИТЕ TRY_CAST(SPLIT_PART(МЕТАДАННЫЕ$ИМЯ ФАЙЛА,’/’,4) В виде строки) как deckPin, TRY_CAST(SPLIT_PART(МЕТАДАННЫЕ$ИМЯ ФАЙЛА,’/’,5) КАК int) в качестве идентификатора экземпляра, TRY_CAST(SPLIT_PART(МЕТАДАННЫЕ$ИМЯ ФАЙЛА,’/’,6) В виде строки) как тип, TRY_CAST(SPLIT_PART(МЕТАДАННЫЕ$ИМЯ ФАЙЛА,’/’,7) В ВИДЕ строки) как сокет, $1 ИЗ @JSON_TRACKING_DATA, ГДЕ тип = «аудитория»); В результате: Ошибка компиляции SQL: оператор КОПИРОВАНИЯ поддерживает только простые операторы SELECT from stage для импорта.

2. Похоже, что выбор с этапа поддерживает только действительно минимальные инструкции SELECT.

3. Какая разница, если вы удалите TRY_CAST? Определенно есть некоторые преобразования, которые не работают, но мне интересно, это TRY_CAST или SPLIT_PART.

4. Кроме того, что делать, если вы перейдете от КОПИРОВАНИЯ В к ВСТАВКЕ В? Однако вы потеряете историю копий, если сделаете это таким образом.

5. Майк, спасибо тебе! TRY_CAST не был проблемой, у него все еще были трудные времена.