在Google BigQuery中,创建嵌套表通常涉及到使用STRUCT
(结构体)或ARRAY
(数组)数据类型。这些类型允许你在单个表中存储复杂的、层次化的数据结构。以下是如何使用SELECT
语句从现有表中创建嵌套表的一些基本步骤和示例。
假设有一个名为sales
的表,其中包含以下字段:transaction_id
, customer_id
, product_id
, quantity
, 和 price
。我们想要创建一个新表,其中包含customer_id
和一个嵌套字段,该字段包含每个客户的所有交易记录。
STRUCT
。SELECT
customer_id,
ARRAY_AGG(STRUCT(transaction_id, product_id, quantity, price)) AS transactions
FROM
sales
GROUP BY
customer_id;
这个查询将为每个customer_id
创建一个数组,数组中的每个元素都是一个结构体,包含transaction_id
, product_id
, quantity
, 和 price
。
STRUCT
内部嵌套另一个STRUCT
。SELECT
customer_id,
ARRAY_AGG(
STRUCT(
transaction_id,
STRUCT(product_id, quantity, price) AS product_details
)
) AS transactions
FROM
sales
GROUP BY
customer_id;
这个查询创建了一个更深层次的嵌套,其中product_details
是一个包含product_id
, quantity
, 和 price
的结构体。
如果你只需要将某些字段的多个值聚合到一个数组中,可以直接使用ARRAY_AGG
。
SELECT
customer_id,
ARRAY_AGG(product_id) AS product_ids
FROM
sales
GROUP BY
customer_id;
这个查询为每个customer_id
创建了一个包含所有product_id
的数组。
如果你想将查询结果保存为新表,可以使用CREATE TABLE
语句结合上述查询。
CREATE TABLE new_sales_summary AS
SELECT
customer_id,
ARRAY_AGG(STRUCT(transaction_id, product_id, quantity, price)) AS transactions
FROM
sales
GROUP BY
customer_id;
这将创建一个新表new_sales_summary
,其中包含customer_id
和其对应的所有交易记录的嵌套数组。
ARRAY_AGG
和其他聚合函数时,确保考虑到可能的性能影响,特别是在处理大量数据时。领取专属 10元无门槛券
手把手带您无忧上云