如何对 BigQuery 中的重复字段进行分组

     2023-03-24     188

关键词:

【中文标题】如何对 BigQuery 中的重复字段进行分组【英文标题】:How to do group by on repeated field in BigQuery 【发布时间】:2017-05-18 07:15:48 【问题描述】:

在 BigQuery 中,我使用以下架构创建了一个表

id                  INTEGER NULLABLE    
visits              INTEGER NULLABLE    
dimensions          RECORD  REPEATED    
dimensions.value    STRING  
dimensions.key      STRING  

如何通过分组设备和状态值来获得总和(访问)?

示例数据:

"id": 1, visits: 100, "dimensions": ["key":"device","value":"mobile", "key":"state","value":"CA"]
"id": 1, visits: 500, "dimensions": ["key":"device","value":"desktop", "key":"state","value":"CA"]
"id": 1, visits: 200, "dimensions": ["key":"device","value":"mobile", "key":"state","value":"NY"]
"id": 2, visits: 100, "dimensions": ["key":"device","value":"mobile", "key":"state","value":"CA"]
"id": 2, visits: 500, "dimensions": ["key":"device","value":"desktop", "key":"state","value":"CA"]
"id": 2, visits: 200, "dimensions": ["key":"device","value":"mobile", "key":"state","value":"NY"]
"id": 2, visits: 780, "dimensions": ["key":"device","value":"desktop", "key":"state","value":"NY"]

我想要输出中的 id、device、state、sum(visits)。

我可以使用带有以下查询的单个维度进行分组,但不知道如何针对多个维度进行分组。

SELECT id,d.value, sum(visits) FROM dataset.tabe_name,UNNEST(dimensions) as d where d.key = "device" group by id, d.value LIMIT 1000

如果事先不知道键值,是否可以编写通用查询?

【问题讨论】:

【参考方案1】:

以下是 BigQuery 标准 SQL

#standardSQL
SELECT 
  id,
  (SELECT value FROM UNNEST(dimensions) WHERE key = "device") AS device,
  (SELECT value FROM UNNEST(dimensions) WHERE key = "state") AS state,
  SUM(visits) AS visits
FROM `dataset.tabe_name`  
GROUP BY id, device, state
LIMIT 1000   

您可以使用示例中的虚拟数据尝试/播放它,如下所示

#standardSQL
WITH data AS (
  SELECT 1 AS id, 100 AS visits, ARRAY<STRUCT<key STRING, value STRING>>[("device", "mobile"), ("state", "CA")] AS dimensions UNION ALL
  SELECT 1, 100, [STRUCT<key STRING, value STRING>("device", "mobile"), ("state", "CA")] UNION ALL
  SELECT 1, 500, [STRUCT<key STRING, value STRING>("device", "desktop"), ("state", "CA")] UNION ALL
  SELECT 1, 200, [STRUCT<key STRING, value STRING>("device", "mobile"), ("state", "NY")] UNION ALL
  SELECT 2, 100, [STRUCT<key STRING, value STRING>("device", "mobile"), ("state", "CA")] UNION ALL
  SELECT 2, 500, [STRUCT<key STRING, value STRING>("device", "desktop"), ("state", "CA")] UNION ALL
  SELECT 2, 200, [STRUCT<key STRING, value STRING>("device", "mobile"), ("state", "NY")] UNION ALL
  SELECT 2, 780, [STRUCT<key STRING, value STRING>("device", "desktop"), ("state", "NY")] 
)
SELECT 
  id,
  (SELECT value FROM UNNEST(dimensions) WHERE key = "device") AS device,
  (SELECT value FROM UNNEST(dimensions) WHERE key = "state") AS state,
  SUM(visits) AS visits
FROM data  
GROUP BY id, device, state
-- ORDER BY id, device, state

【讨论】:

对 BigQuery 中的重复字段求和

】对BigQuery中的重复字段求和【英文标题】:SummingrepeatedfieldsinBigQuery【发布时间】:2016-08-1615:26:34【问题描述】:我会尽可能清楚地解释我的问题,如果不是,请告诉我。我有一张桌子[MyTable],看起来像这样:------------------------... 查看详情

如何按 RDD 中的选定字段数进行分组,以查找基于这些字段的重复项

】如何按RDD中的选定字段数进行分组,以查找基于这些字段的重复项【英文标题】:HowtogroupbyaselectnumberoffieldsinanRDDlookingforduplicatesbasedonthosefields【发布时间】:2015-07-2416:50:45【问题描述】:我是Scala和Spark的新手。我在SparkShell中... 查看详情

如何有效地按 BigQuery 中的两个字段分组?

】如何有效地按BigQuery中的两个字段分组?【英文标题】:HowtoeffectivelygroupbytwofieldsinBigQuery?【发布时间】:2017-10-0412:03:05【问题描述】:我在BigQuery中有一个160GB的数据库,表示上个月从应用发送的事件。每行都有(除其他外)... 查看详情

如何按 MySQL 中的最后一个重复项对记录进行分组?

】如何按MySQL中的最后一个重复项对记录进行分组?【英文标题】:HowtogrouprecordsbylastduplicatesinMySQL?【发布时间】:2019-05-1212:59:49【问题描述】:我有一个包含用户登录信息的表。我想对last重复记录进行分组。例如:+---+-----------... 查看详情

如何对具有多列的表中的数据进行分组[重复]

】如何对具有多列的表中的数据进行分组[重复]【英文标题】:Howtogroupdatafromtablewithmultiplecolumns[duplicate]【发布时间】:2014-11-2814:34:18【问题描述】:我正在尝试以这种方式使用多列对我的数据进行分组:vargroupedCustomers=listToProces... 查看详情

选择查询以使用 BigQuery 对输出 json 中的记录进行分组

】选择查询以使用BigQuery对输出json中的记录进行分组【英文标题】:SelectquerytogrouprecordsinoutputjsonusingBigQuery【发布时间】:2020-02-1718:16:21【问题描述】:我在BigQuery中有一个日期时间分区表,其架构如下:timestampTIMESTAMPREQUIREDcustom... 查看详情

如何对记录数组的数组中的字段进行分组?

】如何对记录数组的数组中的字段进行分组?【英文标题】:Howtogroupbyonafieldinsideanarrayofanarrayofrecords?【发布时间】:2017-06-3014:14:58【问题描述】:我有以下架构-[名称:StringType,等级:ArrayType(结构类型(StructField(subject_grades,Arra... 查看详情

如何按n个元素对python中的元素进行分组[重复]

】如何按n个元素对python中的元素进行分组[重复]【英文标题】:Howtogroupelementsinpythonbynelements[duplicate]【发布时间】:2011-06-2706:33:06【问题描述】:可能重复:HowdoyousplitalistintoevenlysizedchunksinPython?我想从列表l中获取大小为n个元素... 查看详情

如何对数组中的特定字段进行分组?

】如何对数组中的特定字段进行分组?【英文标题】:Howtogroupaspecificfieldinarray?【发布时间】:2018-06-0412:15:41【问题描述】:我需要获得一个团队赢得的trophies,每个奖杯都是在一个特定赛季的比赛中获得的,但是一个团队可以... 查看详情

如何删除 BigQuery 架构中的重复字段?

】如何删除BigQuery架构中的重复字段?【英文标题】:HowtoremoveRepeatedfieldinBigQueryschema?【发布时间】:2019-08-2106:08:36【问题描述】:我有一个架构,其中有一个重复字段嵌套到另一个重复字段中,如下所示:person.children.toys。我想... 查看详情

根据条件对 BigQuery 中的行进行重复数据删除

】根据条件对BigQuery中的行进行重复数据删除【英文标题】:DeduplicatingrowsinBigQuerybasedoncondition【发布时间】:2020-03-0213:04:14【问题描述】:我目前正在尝试对我的一张表在GoogleBigQuery中的行进行重复数据删除。基本上,我有一个... 查看详情

如何在视图或计划查询之间进行选择,以对通过 Stitch 导入的 BigQuery 表进行重复数据删除?

...何在视图或计划查询之间进行选择,以对通过Stitch导入的BigQuery表进行重复数据删除?【英文标题】:HowtochoosebetweenViewsorScheduledQueriesforde-duplicatingBigQuerytablesimportedviaStitch?【发布时间】:2020-07-2208:13:06【问题描述】:我根据存储... 查看详情

如何应用规则根据条件和对数据进行分组来更新字段中的记录[关闭]

】如何应用规则根据条件和对数据进行分组来更新字段中的记录[关闭]【英文标题】:HowcanIapplyaruletoupdaterecordsinafieldbasedonaconditionandbygroupingthedata[closed]【发布时间】:2020-10-1721:22:04【问题描述】:我正在尝试在sql中执行此任务。... 查看详情

如何对一系列数据进行分组以在 GOOGLE BigQuery 中创建一个类别

】如何对一系列数据进行分组以在GOOGLEBigQuery中创建一个类别【英文标题】:HowtogrouparangeofdatatomakeacategoryinGOOGLEBigQuery【发布时间】:2013-11-1904:55:59【问题描述】:Row|day|Prob--------------------------150.3230.1320.6440.5510.4我想将第1天到第3... 查看详情

如何计算多个字段并使用 django orm 对它们进行分组

】如何计算多个字段并使用djangoorm对它们进行分组【英文标题】:Howtocountmorethanonefieldsandgroupingthemusingdjangoorm【发布时间】:2017-12-1110:03:17【问题描述】:我是Django及其ORM的新手。表User有很多用户。我需要对活跃用户和总数进行... 查看详情

如何对熊猫中的多索引进行分组?

】如何对熊猫中的多索引进行分组?【英文标题】:Howtodogroupbyonamultiindexinpandas?【发布时间】:2013-11-1620:56:16【问题描述】:下面是我的数据框。我进行了一些转换来创建类别列并删除了它派生的原始列。现在我需要做一个分组... 查看详情

BigQuery:如何从重复记录中仅提取某些字段作为另一个重复字段

】BigQuery:如何从重复记录中仅提取某些字段作为另一个重复字段【英文标题】:BigQuery:HowtoextractonlycertainfieldfromREPEATEDrecordsasanotherREPEATEDfield【发布时间】:2018-11-0422:36:24【问题描述】:这是BigQuery中的示例表:WITHtestAS(SELECT[STRUC... 查看详情

如何使用 SQL 查询 BigQuery 中的 BYTES 字段?

】如何使用SQL查询BigQuery中的BYTES字段?【英文标题】:HowtoqueryaBYTESfieldinBigQueryusingSQL?【发布时间】:2017-02-0413:24:42【问题描述】:我们在GoogleBigQuery的表中对一个字段进行了SHA256加密,结果类型为BYTES。我们已经尝试编写各种匹... 查看详情