首页 > 解决方案 > 在 SQL 中的数组内的结构内选择

问题描述

我正在尝试使用新的标准 SQL 在 Google BigQuery 表中的结构数组中查找具有N标识符计数AM标识符计数的行。B表中的数据(简化),其中每一行看起来有点像这样:

{
  "Session": "abc123",
  "Information" [
    {
      "Identifier": "A",
      "Count": 1,      
    },
    {
      "Identifier": "B"
      "Count": 2,      
    },
    {
      "Identifier": "C"
      "Count": 3,      
    }
...
  ]
}

我一直在努力使用数组中的结构。我有什么办法可以做到吗?

标签: sqlgoogle-bigquery

解决方案


以下是 BigQuery 标准 SQL

#standardSQL
SELECT * 
FROM `project.dataset.table`
WHERE 2 = (SELECT COUNT(1) FROM UNNEST(information) kv WHERE kv IN (('a', 5), ('b', 10)))

如果应用到虚拟数据,如下例所示

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'abc123' session, [STRUCT('a' AS identifier, 1 AS `count`), ('b', 2), ('c', 3)] information UNION ALL
  SELECT 'abc456', [('a', 5), ('b', 10), ('c', 20)]
)
SELECT * 
FROM `project.dataset.table`
WHERE 2 = (SELECT COUNT(1) FROM UNNEST(information) kv WHERE kv IN (('a', 5), ('b', 10)))

结果是

Row session information.identifier  information.count    
1   abc456  a                       5    
            b                       10   
            c                       20   

推荐阅读