首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在BigQuery中求两个数组的交集

如何在BigQuery中求两个数组的交集
EN

Stack Overflow用户
提问于 2018-08-08 19:53:38
回答 4查看 6.4K关注 0票数 6

我有如下数据:

代码语言:javascript
运行
复制
id  col1     col2
-----------------
1   [1,2]    [2,3]
2   [4,4,6]  [6,7]

我想要像这样的数据:

代码语言:javascript
运行
复制
id  col3
---------
1   [2]
2   [6]

对此有什么聪明的解决方案吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-08 20:28:45

您可以使用INTERSECT DISTINCT

代码语言:javascript
运行
复制
-- build example table
WITH example as (
  SELECT
  * FROM UNNEST([
      STRUCT([1,2] as col1, [2,3] as col2),
      STRUCT([4,4,6],[6,7])
    ])
  )

-- INTERSECT per row on two arrays
SELECT
  ARRAY(SELECT * FROM example.col1
    INTERSECT DISTINCT
    (SELECT * FROM example.col2)
  ) AS result
FROM example
票数 7
EN

Stack Overflow用户

发布于 2018-08-08 20:28:32

对不起,我自己解决的:

代码语言:javascript
运行
复制
#standardSQL
CREATE TEMPORARY FUNCTION intersection(x ARRAY<INT64>, y ARRAY<INT64>)
RETURNS INT64
LANGUAGE js AS """
  var res =  x.filter(value => -1 !== y.indexOf(value));
  return res;
;
""";

任何其他更聪明的想法都是受欢迎的!谢谢。

票数 0
EN

Stack Overflow用户

发布于 2018-08-08 21:34:46

另一种选择

代码语言:javascript
运行
复制
#standardSQL
WITH `project.dataset.your_table` AS (
  SELECT 1 id, [1,2,3] col1, [2,3] col2, [2,3,7] col3  UNION ALL
  SELECT 1, [4,4,6], [6,7], [5,6]
)
SELECT 
  id, 
  ARRAY(
    SELECT DISTINCT a 
    FROM t.col1 a, t.col2 b, t.col3 c 
    WHERE a = b AND b = c
  ) AS result
FROM `project.dataset.your_table` t

上面可以更紧凑,特别是当您有两个以上的列要处理时

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51746070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档