Bigquery 中的 ARRAY OF STRUCT 中的 DISTINCT

Khu*_*dia 3 google-bigquery

我正在寻找使结构数组具有唯一值的方法。这里是示例表。

-------------------------------------

成这个 在此处输入图片说明

我只在这里找到了类似的问题,但我认为它只适用于 1 个嵌套的重复列。但是如果表包含 2 个或更多嵌套的重复列怎么办?在这种情况下,列countryproduct

Mik*_*ant 10

但是如果表包含 2 个或更多嵌套的重复列怎么办?

下面是 BigQuery 标准 SQL

#standardSQL
SELECT * REPLACE(
  (SELECT ARRAY_AGG(STRUCT(id, total_visit_count))
  FROM (SELECT DISTINCT id, total_visit_count FROM UNNEST(country) c
  )) AS country,
  (SELECT ARRAY_AGG(STRUCT(name, total_visit_count))
  FROM (SELECT DISTINCT name, total_visit_count FROM UNNEST(product) c
  )) AS product
)
FROM `project.dataset.table`   
Run Code Online (Sandbox Code Playgroud)

如果您有更多的列要重复数据删除 - 您可以简单地对每个这样的列重复上述操作

或者,您可以使用 SQL UDF 将重复数据删除逻辑封装在一处,如下例所示

#standardSQL
CREATE TEMP FUNCTION dedup(val ANY TYPE) AS ((
  SELECT ARRAY_AGG(t)
  FROM (SELECT DISTINCT * FROM UNNEST(val) v) t
));
SELECT * REPLACE(
  dedup(country) AS country,
  dedup(product) AS product
)
FROM `project.dataset.table`
Run Code Online (Sandbox Code Playgroud)

显然,后者将是我的选择:o)