【问题标题】:BigQuery: Aggregate multiple fields into arrayBigQuery:将多个字段聚合到数组中
【发布时间】:2017-12-27 20:23:22
【问题描述】:

我有一些数据,对于每个 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

如果没有,我该怎么做?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    Array_Agg () 与 Python BigQuery 的工作解决方案:

    !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)
    

    【讨论】:

      【解决方案2】:

      ...对于你的alternative 问:

      SELECT  
        id,
        ARRAY_AGG(CONCAT('[', Value_1, ',', Value_2, ']')) AS Values
      FROM `yourTable`
      GROUP BY id
      

      【讨论】:

      • 这会生成一个字符串而不是一个列表,因为 concat 返回一个字符串。这也可以作为列表中的列表吗?
      【解决方案3】:

      如果要将值配对在一起,请使用 ARRAY_AGGSTRUCT。例如,

      SELECT
        ID,
        ARRAY_AGG (
          STRUCT(Value_1, Value_2)
        ) AS Values
      FROM
        table
      GROUP BY
        ID;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-01
        • 2019-03-09
        • 2018-04-05
        • 2015-04-03
        相关资源
        最近更新 更多