BigQuery 中的标准 SQL - 从多行获取连接文本
Posted
技术标签:
【中文标题】BigQuery 中的标准 SQL - 从多行获取连接文本【英文标题】:Standard SQL in BigQuery - Get concatenate text from multiple rows 【发布时间】:2019-03-07 10:52:57 【问题描述】:我有如下表格:
文档:
+-----+---------+
| dId | score |
+-----+---------+
| A | 100 |
| B | 80 |
| C | 70 |
+-----+---------+
实体:
+------+------------+-----+
| name | details | dId |
+------+------------+-----+
| e1 | a | A |
| e2 | a | A |
| e3 | b | B |
| e4 | c | B |
| e5 | d | C |
+------+------------+-----+
预期输出:
+------+--------+----------+
| dId | score | entities |
+------+--------+----------+
| A | 100 | e1, e2 |
| B | 80 | e3, e4 |
| C | 70 | e5 |
+------+--------+----------+
当前查询:
SELECT
docT.dId,
docT.score,
entityT.name AS entities
FROM
document docT,
entity entityT
LEFT JOIN
document_sentiment docT1
ON
docT1.dId = entityT.dId
现在,我浏览了用于 SQL-Server 的 1 和 2。
但我正在寻找Standard SQL Format used by BigQuery。
如何获得标准 SQL 格式的预期输出?
【问题讨论】:
【参考方案1】:尝试如下
select d.dId,score,STRING_AGG(e.name)
document d join entity e on d.did=e.did
group by d.dId,score
【讨论】:
【参考方案2】:使用array_agg()
- reference
SELECT
docT.dId,
docT.score,
array_agg(entityT.name) AS entities
FROM
document docT join entity entityT on docT.dId=entityT.dId
LEFT JOIN document_sentiment docT1 ON docT1.dId = entityT.dId
group by docT.dId,docT.score
【讨论】:
以上是关于BigQuery 中的标准 SQL - 从多行获取连接文本的主要内容,如果未能解决你的问题,请参考以下文章
在 bigquery 标准 sql 上提取两个日期之间的小时数
BigQuery 标准 SQL 中的 JSON_EXTRACT?