在 BigQuery SQL 中将 ARRAY<STRUCT> 转换为多列

Dav*_*d D 4 sql google-bigquery

我正在尝试将 Array< struct > 转换为多列。数据结构如下:

column name: Parameter
[
  -{
      key: "Publisher_name"
      value: "Rubicon"
   }
  -{
      key: "device_type"
      value: "IDFA"
   }
  -{
      key: "device_id"
      value: "AAAA-BBBB-CCCC-DDDD"
   }
] 
Run Code Online (Sandbox Code Playgroud)

我想得到什么:

publisher_name  device_type  device_id
Rubicon         IDFA         AAAA-BBBB-CCCC-DDDD
Run Code Online (Sandbox Code Playgroud)

我试过这个导致其他列的重复。

select h from table unnest(parameter) as h
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我很好奇为什么我们要在 Bigquery 中使用这种结构。我们不能将上面的3列添加到表格中吗?

Mik*_*ant 6

下面是 BigQuery 标准 SQL

#standardSQL
SELECT 
  (SELECT value FROM UNNEST(Parameter) WHERE key = 'Publisher_name') AS Publisher_name,
  (SELECT value FROM UNNEST(Parameter) WHERE key = 'device_type') AS device_type,
  (SELECT value FROM UNNEST(Parameter) WHERE key = 'device_id') AS device_id
FROM `project.dataset.table`
Run Code Online (Sandbox Code Playgroud)

您可以使用 SQL UDF 进一步重构代码,如下所示

#standardSQL
CREATE TEMP FUNCTION getValue(k STRING, arr ANY TYPE) AS
((SELECT value FROM UNNEST(arr) WHERE key = k));
SELECT 
  getValue('Publisher_name', Parameter) AS Publisher_name,
  getValue('device_type', Parameter) AS device_type,
  getValue('device_id', Parameter) AS device_id
FROM `project.dataset.table`
Run Code Online (Sandbox Code Playgroud)