BigQuery - 从字典表的多行创建 STRUCT

问题描述 投票:0回答:1

我正在尝试使用下表,我们称之为

fields

字段名称 风险
全名
电子邮件
地址
ip_地址

创建一个

STRUCT
结构,然后我可以用数据填充该结构。将此视为结构的模式,但我不确定这是否可能?

我想要的是这样的:

STRUCT (
  "" AS full_name,
  "" AS email,
  "" AS address,
  "" AS ip_address
)

然后我希望能够使用

CROSS JOIN
将其与数据连接起来并填写现有的数据,但也不确定这是否是正确的方法。

我想创建这些结构,但基于可以更改的预定义模式,而不是逐行编写

SELECT
  base_data.id,
  -- Not sure how I could use struct_tx.full_name to be updated with value from base_data
FROM base_data
  CROSS JOIN struct_tx
sql google-bigquery
1个回答
0
投票

这在 SQL 中不是很简单,但你可以尝试这个:

定义结构体

WITH struct_cte AS (
  SELECT
    STRUCT(
      "" AS full_name,
      "" AS email,
      "" AS address,
      "" AS ip_address
    ) AS empty_struct
)

然后在带有 struct_tx

CROSS JOIN
中,使用
COALESCE

执行此操作
SELECT
  base_data.id,
  STRUCT(
    COALESCE(base_data.full_name, struct_cte.empty_struct.full_name) AS 
    full_name,
    COALESCE(base_data.email, struct_cte.empty_struct.email) AS email,
    COALESCE(base_data.address, struct_cte.empty_struct.address) AS address,
    COALESCE(base_data.ip_address, struct_cte.empty_struct.ip_address) AS ip_address
  ) AS filled_struct
FROM
  base_data
  CROSS JOIN struct_cte
© www.soinside.com 2019 - 2024. All rights reserved.