Метаданные команды этапа$имя файла показывают сотни случаев использования одного файла

#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 случая появления одного и того же файла в моем результате.

результирующий набор данных, показывающий 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. Потому что ОБЪЕДИНЕНИЕ дедуплицирует данные, в то время как ОБЪЕДИНЕНИЕ ВСЕХ сохраняет дубликаты.