您如何在阶段中从 Parquet 文件中读取 ARRAY 列?

How do you read ARRAY column from Parquet file in stage?

我在外部阶段有 ARRAY 数据类型的 Parquet 文件。我可以使用 $1:::datatype 语法查询列,但我无法弄清楚如何查询 ARRAY 数据类型的列。

在不转换的情况下查询它显示值如下:{ "list": [ { "element": "1" }, { "element": "4" } ] }

但我期待的是数组:["1", "4"]

我试过转换为数组或变体,但它只是将值包装在 [] 中,而不是我想要的。我可能可以使用 flatten、array_construct 等达到我想要的效果,但是有没有更简单的方法从 Parquet 获取 ARRAY?

Snowflake 中的 Parquet 文件支持似乎将这种形式的结构化输出用于文件架构中遇到的 list/array 数据类型。

虽然似乎没有办法影响它 via options, the real data carried within the produced structure is intact, so you can perform a transformation via 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 文件列(例如 during load):

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

> select PARQ_LIST_TO_ARRAY(:arr_col_name) as arr from @stage/file.parquet;
arr
["1", "4"]