Как вы читаете столбец ARRAY из файла Parquet на этапе? - PullRequest
1 голос
/ 27 мая 2020

У меня есть файлы Parquet с типом данных ARRAY на внешнем этапе. Я могу запросить столбцы с синтаксисом типа данных $ 1 :::, но у меня возникли проблемы с выяснением, как запросить столбец с типом данных ARRAY.

Запросы к нему без преобразования показывают следующее значение: {"list ": [{" element ":" 1 "}, {" element ":" 4 "}]}

Но я ожидаю, что массив: [" 1 "," 4 "]

Я пробовал приведение к массиву или варианту, но он просто заключил значение в [] вместо того, что я хочу. Я, вероятно, смогу понять, как я хочу использовать flatten, array_construct и т. Д., Но есть ли более простой способ получить ARRAY из Parquet?

1 Ответ

1 голос
/ 28 мая 2020

Поддержка файлов Parquet в Snowflake, похоже, использует эту форму структурированного вывода для типов данных списков / массивов, встречающихся в схеме файла.

Хотя, похоже, нет никакого способа повлиять на это с помощью параметров , реальные данные, переносимые в созданной структуре, не повреждены, поэтому вы можете выполнить преобразование с помощью UDF , чтобы получить очищенный массив примитивов:

create or replace function PARQ_LIST_TO_ARRAY(PARQ_LIST VARIANT)
    returns ARRAY
    language javascript
    as
    '
        values = []
        PARQ_LIST.list.forEach( (e) => {
            values.push(e.element)
        })
        return values
    ';

Вы также можете запустить это непосредственно над столбцом файла Parquet (например, во время загрузки ):

> select $1:arr_col_name as lst from @stage/file.parquet;
lst
{ "list": [ { "element": "1" }, { "element": "4" } ] }

> select PARQ_LIST_TO_ARRAY($1:arr_col_name) as arr from @stage/file.parquet;
arr
["1", "4"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...