从Google BigQuery中的嵌套表中删除重复项

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从Google BigQuery中的嵌套表中删除重复项相关的知识,希望对你有一定的参考价值。

我们已开始使用Google bigQeury嵌套表。我们很难在这张桌子上找出重复的内容。我们尝试使用Rownumber()函数,但这意味着我们需要深入到每个记录和记录中。我们谈论的是一个在建筑的基本巢穴和超过400个领域中有超过10条记录的表格

下面的代码是我们到目前为止创建的,它给出了重复的识别,但是我可以编写的字段数量很多,正如我所写,有超过400个字段

SELECT
    count (*) AS Number_Of_Records --this will let us know how many records there is
FROM 
    (
    SELECT
        *,
        ROW_NUMBER() OVER (PARTITION BY field1, ... , fieldN) AS ranking 
    FROM
        `data.T1`,
        unnest(record1) as record1, --unnesting is a must with nested tables and records
        ....,
        unnest(recordN) as recordN
    )
WHERE
    ranking=1 --duplicats >1

我们想找一个更短的方法来编写这个查询来查找非重复行的数量,谢谢

答案

一种方法是使用散列函数来标识记录并使用此散列来删除重复项。

因此,假设您的JSON数据由字符串组成,您可以使用以下内容为您的记录生成唯一的哈希代码:

WITH items AS
  (SELECT ["apples", "bananas", "pears", "grapes"] as list
  UNION ALL
  SELECT ["coffee", "tea", "milk" ] as list
  UNION ALL
  SELECT ["cake", "pie", NULL] as list -- Duplicate record
  UNION ALL
  SELECT ["cake", "pie", NULL] as list)

SELECT distinct FARM_FINGERPRINT(ARRAY_TO_STRING(list, '--')) AS text
FROM items;

这导致3行而不是预期的4行(1行一式两份)

enter image description here

以上是关于从Google BigQuery中的嵌套表中删除重复项的主要内容,如果未能解决你的问题,请参考以下文章

如何从未嵌套的数据(BigQuery 中的 Google Analytics 数据)返回正确的汇总总数

从工作表中的 Google Apps 脚本访问 BigQuery 时需要登录错误

我们可以从 Google BigQuery 中的特定表中获取列名吗?

更新 BigQuery 表中的嵌套字段

如何从基于嵌套 json 的 BigQuery 表中进行选择?

从 python 生成 Faker 数据并将其加载到 BigQuery 嵌套表中