#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 не был проблемой, у него все еще были трудные времена.