【发布时间】:2022-01-22 11:06:55
【问题描述】:
我正在尝试创建一个 Stack Overflow 问题,为了提出这个问题,我需要生成一个最小示例。在创建最小示例时,我使用 BigQuery DDL 创建表。表创建步骤成功,推断我选择的架构很好。但是我写的在其中插入一行的INSERT INTO 语句会导致不允许嵌套数组的错误。
创建表的代码,成功:
CREATE TABLE `my_dataset.test_data_for_so`
(
date DATE,
hits ARRAY<STRUCT<search STRUCT<query STRING, other_column STRING>, metadata ARRAY<STRUCT<key STRING, value STRING>>>>
);
这是我创建表后 BigQuery GUI 中架构的样子:
但是当我尝试使用INSERT INTO 使用以下 BigQuery DML 代码将一行数据插入此表时:
INSERT INTO `my_dataset.test_data_for_so` (date, hits)
VALUES (CAST('2021-01-01' AS date), [STRUCT<query STRING, other_column STRING>('foo bar', 'foo bar'), [STRUCT<key STRING, value STRING>('foo bar', 'foo bar')]])
我收到一个错误:
无法构造元素类型为 ARRAY
>,因为 [8:103]` 不支持嵌套数组。
BigQuery 的文档表明这应该是可能的。他们声明数组中的数组是不可能的,但如果你在两者之间使用结构,这是可能的。这就是我相信我正在做的事情:
BigQuery 不支持直接构建数组数组。反而, 您必须创建一个结构数组,每个结构都包含一个 ARRAY 类型的字段。
https://cloud.google.com/bigquery/docs/reference/standard-sql/arrays#building_arrays_of_arrays
【问题讨论】:
标签: sql google-bigquery