从 Google BigQuery 中的嵌套表中删除重复项
Remove duplicates from nested tables in Google BigQuery
我们已经开始使用 Google bigQuery 嵌套 table。我们很难识别此 table 上的重复项。我们尝试使用 Rownumber() 函数,但这意味着我们需要深入研究每条记录和记录。我们说的是一个table,建筑基础巢穴10多个记录,400多个字段
以下代码是我们目前创建的代码,它可以识别重复项,但我们可以编写尽可能多的字段,正如我所写的那样,有 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 行一式两份)
我们已经开始使用 Google bigQuery 嵌套 table。我们很难识别此 table 上的重复项。我们尝试使用 Rownumber() 函数,但这意味着我们需要深入研究每条记录和记录。我们说的是一个table,建筑基础巢穴10多个记录,400多个字段
以下代码是我们目前创建的代码,它可以识别重复项,但我们可以编写尽可能多的字段,正如我所写的那样,有 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 行一式两份)