Arrays 返回在嵌套对象上筛选的BigQuery数据

Arrays 返回在嵌套对象上筛选的BigQuery数据,arrays,nested,google-bigquery,Arrays,Nested,Google Bigquery,我正在尝试创建一个查询,该查询返回在两个嵌套对象上过滤的数据。我在代码中添加了(1)和(2),以表明我希望得到来自两个不同嵌套对象的结果(我知道这不是一个有效的查询)。我一直在看记录,但我无法理解 SELECT externalIds.value(1) AS appName, externalIds.value(2) AS driverRef, SUM(quantity)/ 60 FROM [billing.tempBilling] WHERE callTo = 'example' AND ex

我正在尝试创建一个查询,该查询返回在两个嵌套对象上过滤的数据。我在代码中添加了(1)和(2),以表明我希望得到来自两个不同嵌套对象的结果(我知道这不是一个有效的查询)。我一直在看记录,但我无法理解

SELECT externalIds.value(1) AS appName, externalIds.value(2) AS driverRef, SUM(quantity)/ 60 FROM [billing.tempBilling]
WHERE callTo = 'example' AND externalIds.type(1) = 'driverRef' AND externalIds.type(2) = 'applicationName'
GROUP BY appName, driverRef ORDER BY appName, driverRef;
加载到BigQuery中的数据如下所示:

{
  "callTo": "example",
  "quantity": 120,
  "externalIds": [
    {"type": "applicationName", "value": "Example App"},
    {"type": "driverRef", "value": 234}
  ]
}
我追求的结果是:

+-------------+-----------+----------+
|   appName   | driverRef | quantity |
+-------------+-----------+----------+
| Example App |    123    |   12.3   |
| Example App |    234    |  132.7   |
| Test App    |    142    |   14.1   |
| Test App    |    234    |   17.4   |
| Test App    |    347    |  327.5   |
+-------------+-----------+----------+

如果需要求和的所有数量都在同一条记录内,则可以在该记录内用于此查询。在记录中使用NTH()获取记录中某个字段的第一个和第二个值。然后使用必须执行过滤,因为它需要由聚合函数计算的值

SELECT callTo,
       NTH(1, externalIds.type) WITHIN RECORD AS firstType,
       NTH(1, externalIds.value) WITHIN RECORD AS maybeAppName,
       NTH(2, externalIds.type) WITHIN RECORD AS secondType,
       NTH(2, externalIds.value) WITHIN RECORD AS maybeDriverRef,
       SUM(quantity) WITHIN RECORD
FROM [billing.tempBilling]
HAVING callTo LIKE 'example%' AND
       firstType = 'applicationName' AND
       secondType = 'driverRef';
如果要求和的数量分布在多个记录中,则可以使用此方法,然后按键分组,并在外部查询中求和这些数量