首页 > 解决方案 > Big Query - 将数组转置为列

问题描述

我们在 Big Query 中有一个表,如下所示。

输入表:

 Name | Interests
 -----+----------
 Bob  | ["a"]
 Sue  | ["a","b"]
 Joe  | ["b","c"]

我们希望将上表转换为以下格式,以使其对 BI/Visualisation 友好。

目标/所需表:

 +------------------+
 | Name | a | b | c |
 +------------------+
 | Bob  | 1 | 0 | 0 |
 | Sue  | 1 | 1 | 0 |
 | Joe  | 0 | 1 | 0 |
 +------------------+

注意:兴趣列是数组数据类型。Big Query 中是否可以进行这种转换?如果是,任何参考查询?

提前致谢!

标签: sqlgoogle-cloud-platformgoogle-bigquerydata-processing

解决方案


以下是 BigQuery 标准 SQL 并使用 BQ 的脚本功能

#standardSQL
create temp table ttt as (
  select name, interest 
  from `project.dataset.table`, 
  unnest(interests) interest
);

EXECUTE IMMEDIATE (
  SELECT """
  SELECT name, """ || 
    STRING_AGG("""MAX(IF(interest = '""" || interest || """', 1, 0)) AS """ || interest, ', ') 
  || """
  FROM ttt 
  GROUP BY name
  """
  FROM (
    SELECT DISTINCT interest 
    FROM ttt
    ORDER BY interest
  )
);      

如果适用于您的问题的样本数据 - 输出是

在此处输入图像描述


推荐阅读