BigQuery是一个完全管理的企业数据仓库,可帮助我们管理和分析数据。这是Google Cloud Platform(GCP)提供的杰出产品。 Bigquery的可扩展分布式分析引擎使我们可以在几分钟内查询Terabytes和Petabytes。具有重复的数据行会导致不正确的聚合或查询结果。有多种方法可以处理BigQuery中的数据重复。我们将在这篇文章中探索其中的几个。
考虑一个场景,我们安排每天运行一次的作业,以从BigQuery中的数据源加载数据。也就是说,每天的数据都是唯一的。如果出于任何原因,此工作在处理过程中失败了,那么我们将不得不重新运行工作。现在,重新运行它可以添加重复的行,这些行会在此失败之前插入。行的这种重复可能会妨碍我们的分析,报告等,这取决于此数据集。我们如何处理这些重复的行? ð我们看一下。
1.在重新运行之前删除重复项
这里最简单的方法是以确保当天数据在插入之前不存在的方式实现处理。也就是说,在重新运行工作之前,我们首先删除当今的数据。现在,这听起来可能是一件容易的事,但是在并发世界中,将来很难扩展。
2.选择唯一记录
由于BigQuery可以处理数据的数据,因此我们可以在INSERTs
中允许数据重复,并在SELECT
查询中删除(跳过)重复。通常,各种非技术团队都使用BigQuery生成不同的报告,并且此重复可能会产生不必要的结果。你猜怎么了?我们有Views
进行救援ð。视图可以抽象在实际数据集之上获取独特行的复杂性。
通常,有两种类型的视图-Logical
和Materialized
。请参阅下面的比较图表,以根据您的用例选择适当的选项。
- 逻辑视图与实现的视图
功能 | 逻辑视图 | 实现的视图 |
---|---|---|
定义 | 每次查询视图时都会运行定义视图的查询。 | 视图是预先计算的视图,可以定期缓存查询结果,以提高性能和效率。它存储在一个单独的表中以缓存结果。 |
费用 | 查询是根据直接或间接通过顶级查询引用的所有表字段中的数据总数计费的。 | 与这些观点相关的成本是 - 查询实现的视图 - 维护实现的视图(刷新记录) - 存储实现的视图表 |
存储 | 无需额外的存储。 | 需要自己的存储空间。 |
维护 | 无需维护。 | 刷新物品视图的记录可以是手动的或自动的。如果手动,我们必须维护它。自动刷新与它们相关。 |
ð如果您没有生成聚合,则请获取逻辑视图。对于这篇文章,我将重点介绍逻辑上的观点,该观点将数据集顶部的唯一行投影。
ð〜逻辑视图语法
CREATE OR REPLACE VIEW
`table_name_view` OPTIONS ( friendly_name="table_name_view",
description="A view that fetches latest unique entries processed from table_name" ) AS
SELECT
*
FROM
`dataset.table_name`
WHERE
TRUE QUALIFY ROW_NUMBER() OVER(PARTITION BY column_1, column_2 ORDER BY inserted_at DESC ) = 1;
ð在上述查询中,我们正在解决两个主要问题:
- 使用
PARTITION BY
根据多个键列找到唯一行 - 使用
inserted_at
列选择最新记录,该列记录行插入时间戳
dª我们的团队已经依靠这种观点语法已有一段时间了,事实证明这是我们生产过程的宝贵资产。