#snowflake-cloud-data-platform
Вопрос:
У меня на этапе есть файлы, которые я хочу запросить, поскольку я хочу включить имена файлов в результат, я использую команду metadata$filename.
Моя стадия-это Azure ADLS 2 поколения. На моем этапе у меня есть только один файл, соответствующий следующему регулярному выражению : .*regular.*[.]png
.
Когда я выполняю команду
SELECT
metadata$filename
FROM
@dev_silver_db.common.stage_bronze/DEV/BRONZE/<CENSORED>/S21/2715147 (
PATTERN => $pattern_png
)
AS t
У меня есть 562 случая появления одного и того же файла в моем результате.
Сначала я подумал, что это ошибка из моей IDE, и дважды проверил историю Снежинки, и это фактический результат запроса.
Если я запущу СПИСОК, будет возвращен правильный набор данных (только 1 результат).
Если я выполню следующую команду (то же самое с любым объединением).
SELECT $pattern_png
UNION
SELECT
metadata$filename
FROM
@dev_silver_db.common.stage_bronze/DEV/BRONZE/<CENSORED>/S21/2715147 (
PATTERN => $pattern_png
)
AS t
Я получаю следующий результат.
На мой взгляд, такое поведение следует считать ошибкой, но я, возможно, что-то упустил. Сейчас я просто буду использовать TOP(1), потому что в моем случае это нормально, но это может стать проблемой в других контекстах.
Заранее благодарю вас за ваши идеи.
Ответ №1:
Когда вы ВЫБИРАЕТЕ на этапе, вы фактически читаете содержимое файла, используя ФОРМАТ ФАЙЛА. Если не указан, по умолчанию используется формат файла CSV.
Я думаю, что на самом деле вы видите информацию о метаданных$имени файла, дублирующуюся в каждой «строке», которую снежинка может прочитать в вашем файле.
Комментарии:
1. Я попробовал использовать формат файла CSV, в котором RECORD_DELIMITER ОТСУТСТВУЕТ. Это сработало, вопреки моим ожиданиям. Итак, во-первых, спасибо вам ! Во-вторых, я все еще не могу объяснить, почему результат будет отличаться, когда запрос объединяется с другим.
2. Потому что ОБЪЕДИНЕНИЕ дедуплицирует данные, в то время как ОБЪЕДИНЕНИЕ ВСЕХ сохраняет дубликаты.