如何在bigquery中使用group_concat生成json字符串?

Ben*_*ley 1 json google-bigquery

我有一张桌子:

user   device   minutes
====   ======   =======
ben    phone    1.9
ben    tablet   2.3
anna   phone    1.6
Run Code Online (Sandbox Code Playgroud)

我想将设备使用打包成用户的 json 字符串,例如:

user   json
====   =====
ben    {"phone":1.9, "tablet":2.3}
anna   {"phone":1.6, "tablet":2.3}
Run Code Online (Sandbox Code Playgroud)

如何在 bigquery 中执行此操作?

Mik*_*ant 5

以下是 BigQuery 标准 SQL 的版本

#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
  SELECT 'ben' user, 'phone' device, 1.9 minutes UNION ALL
  SELECT 'ben', 'tablet', 2.3 UNION ALL
  SELECT 'anna', 'phone', 1.6 
)
SELECT 
  user, 
  CONCAT('{', STRING_AGG(CONCAT('"',device, '":', CAST(minutes AS STRING))), '}') json,
  ROUND(SUM(IF(device='tablet',minutes,0)),2) tablet_minutes
FROM `yourproject.yourdataset.yourtable`
GROUP BY user 
Run Code Online (Sandbox Code Playgroud)

输出如下

user    json                        tablet_minutes   
ben     {"phone":1.9,"tablet":2.3}  2.3  
anna    {"phone":1.6}               0.0  
Run Code Online (Sandbox Code Playgroud)