Google bigquery Bigquery中结构数组中的DISTINCT

Google bigquery Bigquery中结构数组中的DISTINCT,google-bigquery,Google Bigquery,我正在寻找使结构数组具有唯一价值的方法。下面是示例表 进入这个 我只发现了类似的问题,但我认为它只满足1个嵌套的重复列。但是,如果表包含2个或更多嵌套的重复列,该怎么办?在这种情况下,列国家,和产品 但是,如果表包含2个或更多嵌套的重复列,该怎么办 下面是BigQuery标准SQL #standardSQL SELECT * REPLACE( (SELECT ARRAY_AGG(STRUCT(id, total_visit_count)) FROM (SELECT DISTINCT

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

进入这个

我只发现了类似的问题,但我认为它只满足1个嵌套的重复列。但是,如果表包含2个或更多嵌套的重复列,该怎么办?在这种情况下,列
国家
,和
产品

但是,如果表包含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`   
如果有更多列需要重复数据消除,只需对每一列重复上述操作即可

或者,您可以使用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`
显然,我会选择后者:o)