如何在 bigquery 中使用 group_concat 生成 json 字符串?
Posted
技术标签:
【中文标题】如何在 bigquery 中使用 group_concat 生成 json 字符串?【英文标题】:How can I generate json string with group_concat in bigquery? 【发布时间】:2017-12-15 03:53:57 【问题描述】:我有一张桌子:
user device minutes
==== ====== =======
ben phone 1.9
ben tablet 2.3
anna phone 1.6
我想将设备使用打包成一个json字符串,用户喜欢:
user json
==== =====
ben "phone":1.9, "tablet":2.3
anna "phone":1.6, "tablet":2.3
如何在 bigquery 中执行此操作?
【问题讨论】:
【参考方案1】:以下是 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
输出如下
user json tablet_minutes
ben "phone":1.9,"tablet":2.3 2.3
anna "phone":1.6 0.0
【讨论】:
【参考方案2】:使用 BigQuery 旧版 SQL
# legacySQL
SELECT
user,
json,
JSON_EXTRACT_SCALAR(json, '$.tablet') AS tablet_minutes
FROM (
SELECT
user,
CONCAT('', GROUP_CONCAT_UNQUOTED(CONCAT('"', device,'":', minutes)), '') AS json,
FROM
(SELECT 'ben' user, 'phone' device, '1.9' minutes),
(SELECT 'ben' user, 'tablet' device, '2.3' minutes),
(SELECT 'anna' user, 'phone' device, '1.6' minutes),
GROUP BY
user)
使用标准 SQL(感谢 Mikhail)
# 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
两个输出
user json tablet_minutes
==== ==== ==============
ben "phone":1.9,"tablet":2.3 2.3
anna "phone":1.6 0.0
【讨论】:
以上是关于如何在 bigquery 中使用 group_concat 生成 json 字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Datalab 的 api 中使用 Bigquery 中的子查询?
在 Google 表格中使用 BigQuery,如何授予其他用户按“刷新”的权限?
如何在 BigQuery 中使用 UDF 展平 Google Analytics 自定义维度?
如何安全地为 bigquery 节点插入转义用户输入?可以在 bigquery.insert 节点库上使用参数化查询吗?