如何在视图或计划查询之间进行选择,以对通过 Stitch 导入的 BigQuery 表进行重复数据删除?

Posted

技术标签:

【中文标题】如何在视图或计划查询之间进行选择,以对通过 Stitch 导入的 BigQuery 表进行重复数据删除?【英文标题】:How to choose between Views or Scheduled Queries for de-duplicating BigQuery tables imported via Stitch? 【发布时间】:2020-07-22 08:13:06 【问题描述】:

我根据存储在 BigQuery 表中的数据构建按需生成的统计输出。每天使用“仅附加”通过缝合导入一些数据。这会在导入的表中产生duplicated observations(大约 20kk 行,每年增长 8kk)。

我可以要么安排 BigQuery 查询以将去重的值存储在已清理的表中,构建视图来做同样的事情,但我不明白其中的权衡条款:

BigQuery 的费用用于存储/运行预定的查询和视图。 以后查询的速度取决于去重视图。视图是否缓存?

我是否正确地假设存储去重数据的每日计划查询成本更高(用于重写存储的表)但加快了以后对去重数据的查询(节省使用成本)?

每天将依次查询已删除重复数据数百次以生成关注响应性的仪表板输出。

在决定更好的解决方案时我应该如何争论?

【问题讨论】:

这确实是一个意见问题,但我会使用预定查询或类似 dbt 的东西。 【参考方案1】:

让我们来看看事实:

    无论您使用 View 还是 Scheduled Query,您在查询中支付的价格都是相同的 使用计划查询时,您需要为存储在重复数据删除表中的数据付费。 视图不会存储任何数据,因此您不会产生额外费用。 就速度而言,使用 计划查询 方法会胜出,因为您已经对数据进行了重复数据删除和清理。如果您要向仪表板提供这些数据,查看方法可能会导致仪表板加载延迟。 另一种可能的方法是使用Materialized Views,这是一种更智能的视图,可以定期缓存结果以提高性能。在这个guide 中,您可以找到一些有关在计划查询和物化视图之间进行选择的信息:

什么时候应该使用计划查询而不是具体化视图?

计划查询是运行任意复杂的便捷方式 定期计算。每次查询运行时,它都在运行 完全。以前的结果没有用,你付全价 用于查询。当您不需要 最新鲜的数据,并且您对数据过时的容忍度很高。

物化视图适用于需要查询最新的 数据,同时通过重用以前的数据来减少延迟和成本 计算结果。您可以使用物化视图作为伪索引, 在不更新任何现有的情况下加速对基表的查询 工作流程。

作为一般准则,只要有可能,如果您没有跑步 任意复杂的计算,使用物化视图。

【讨论】:

我完全错过了物化视图。它们确实是一种权衡混合体。然而,我在测试存储已清理数据的计划查询时尝试了一些集群和分区,它们极大地加快了 DataStudio 中的图表速度。将研究物化视图。 其实。材质视图 1) 不允许排序,2) 不允许 DISTINCT 选择,以及 3) 不支持 JOIN,所以我想知道是否甚至可以在有效查询中对缝合数据进行去重。 :(

以上是关于如何在视图或计划查询之间进行选择,以对通过 Stitch 导入的 BigQuery 表进行重复数据删除?的主要内容,如果未能解决你的问题,请参考以下文章

如何在“流水线表函数”、视图和显式游标之间进行选择

MDX 查询以对具有特定日期范围的日期维度进行分组

查询以在Denodo中将执行计划()作为输出

如何设置选择器视图以显示来自多个矩阵选项的数据?

Rails STI 和视图重用

Oracle -----视图