您如何在阶段中从 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"]
我在外部阶段有 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"]