我有一些数据,对于每个ID,我想将两个或多个字段聚合到一个数组中,我希望它们在顺序方面匹配。
例如,如果我有以下数据:
我想把它变成这个:
或者,这样的事也没关系:
首先,如果我要使用这样的查询,它会做我想要的,还是不能保证两个字段以相同的顺序通过(即Value_1和Value_2中的相应值可能不匹配) )?
SELECT
ID,
ARRAY_AGG (
Value_1
) AS Value_1,
ARRAY_AGG (
Value_2
) AS Value_2
FROM
table
GROUP BY
ID
如果没有,我该怎么做呢?
答案 0 :(得分:9)
如果要将值配对,请ARRAY_AGG
与STRUCT
一起使用。例如,
SELECT
ID,
ARRAY_AGG (
STRUCT(Value_1, Value_2)
) AS Values
FROM
table
GROUP BY
ID;
答案 1 :(得分:3)
...以及alternative
问:
SELECT
id,
ARRAY_AGG(CONCAT('[', Value_1, ',', Value_2, ']')) AS Values
FROM `yourTable`
GROUP BY id
答案 2 :(得分:-1)
使用Python BigQuery的Array_Agg ()
的有效解决方案:
!pip install -U google-cloud-bigquery
import pandas as pd
from google.cloud import bigquery
strvalue = """SELECT users ARRAY_AGG(STRUCT(session, page )) as hasComp FROM <datasetname>.<tableName> WHERE Group by users order by users limit 100 """
bigquery_client = bigquery.Client(project="")
dataset = bigquery_client.dataset("")
table = dataset.table('')
table.view_query_legacy_sql = False
query_job = bigquery_client.query(str_value)
df = query_job.to_dataframe()
print(df)