来自 ARRAY<STRUCT<STRING, STRING>> 的 BigQuery 未嵌套内部字符串列

Posted

技术标签:

【中文标题】来自 ARRAY<STRUCT<STRING, STRING>> 的 BigQuery 未嵌套内部字符串列【英文标题】:BigQuery unnest inner string column from ARRAY<STRUCT<STRING, STRING>> 【发布时间】:2021-11-15 17:04:48 【问题描述】:

我无法在这里创建可重现的示例,因为我不太确定如何使用 ARRAY> 类型的列创建演示示例表.我们有下表:

而我们只是试图将 year 变成自己的列。我们尝试显而易见的:

select 
    customValues.year as year
from dataset.our_table

并得到错误Cannot access field year on a value with type ARRAY&lt;STRUCT&lt;year STRING, statCrewShirtNumber STRING&gt;&gt;。所以这不是一个基本结构,而是一个数组内部的结构。我们如何为year 创建一个单独的列?

【问题讨论】:

【参考方案1】:

您需要首先取消嵌套数组,如下例所示

select customValue.year as year
from `dataset.our_table` t, 
t.customValues as customValue

【讨论】:

【参考方案2】:

使用这个示例表,我在数组中也有一个结构。您可以简单地使用UNNEST 为每个字段设置单独的列。

请参阅下面的查询:

SELECT gender FROM `sandbox.test_table`, UNNEST(bikerides)

结果:

【讨论】:

以上是关于来自 ARRAY<STRUCT<STRING, STRING>> 的 BigQuery 未嵌套内部字符串列的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Impala 中插入 Array<Struct> 值?

Hive 使用自定义 udf 将 array<string, string> 转换为 array<struct<key:string, value:string>>

使用 `struct S const char *array[ARG_MAX]; 避免来自 `struct S as[] = NULL;` 的段错误;`? [复制]

使用了 unnest(),但仍然无法访问类型为 ARRAY<STRUCT<text STRING, language STRING>> 的值的字段文本,大查询

是否需要在C ++析构函数中显式销毁结构中固定大小的数组?

将 STRUCT 的 ARRAY 传递给标准 BigQuery SQL 的用户定义函数