【问题标题】:In Google Bigquery, how to denormalize tables when the data is from different 3rd party source?在 Google Bigquery 中,当数据来自不同的第三方来源时,如何对表进行非规范化?
【发布时间】:2020-06-16 17:18:28
【问题描述】:

我有 Salesforce 中的联系人数据。我还有关于 Intercom/Zendesk 中联系人的数据。我想创建一个非规范化表,其中 Salesforce 和 Intercom 中的数据都合并到一个表中,以便我可以查询联系人。想象一下,我将 Salesforce 数据转储到 Bigquery 表中。问题是我们可能要等到以后才能转储 Intercom/Zendesk。所以我们现在只能将 Salesforce 数据添加到 Bigquery 表中。稍后我们可能会添加对讲数据。我的问题是如何合并这些(Salesforce BQ 表中的现有数据和对讲机中的新数据)?假设 Email 是两个 3rd 方来源的主键,我们可以加入它们。

我们是否需要将 Salesforce 数据从 BQ 表中取出并通过某种工具运行以合并两个表并在 BQ 中创建一个新表? 如果我们不断在 Salesforce 和 Intercom 中获取新数据会发生什么?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    您的案例似乎是 Views 的一个很好的用例。

    视图基本上是一个指向查询的虚拟表。您可以根据查询定义 view(我们称之为 query_1),然后您将能够将该 view 视为一个表。但是,每次您使用该 view 作为源运行查询(我们称之为 query_2)时,内部 BigQuery 将执行 query_1,然后执行您的 query_2 针对 query_1 的结果。

    在您的情况下,您可以创建一个使用 join 的查询来合并您的表并将该查询保存为视图。您可以通过点击BigQuery 控制台中的保存视图来创建一个视图,如下图所示,然后在保存前填写一些必填字段。




    在 BigQuery 中还有 Materialized Views,它实现了一些缓存技术,以使视图更类似于表。

    物化视图的一些好处是:

    • 使用聚合函数减少查询的执行时间和成本。当查询的计算时获得最大的好处 成本高,结果数据集小。

    • 自动和透明的 BigQuery 优化,因为优化器使用物化视图(如果可用)来改进查询 执行计划。此优化不需要对 查询。

    • 与 BigQuery 表相同的弹性和高可用性。

    要创建物化视图,您必须运行以下命令:

    CREATE MATERIALIZED VIEW  project-id.my_dataset.my_mv_table
    AS <my-query>
    


    最后,我想在此处粘贴viewsmaterialized viewsBigQuery 的参考链接。我建议您看一看,然后决定哪一个适合您的用例。

    【讨论】:

      【解决方案2】:

      您可以阅读有关查询 Google Cloud Storage https://cloud.google.com/bigquery/external-data-cloud-storage 的更多信息。

      您可以提取数据并将它们放入存储桶下的 Google Cloud Storage 中,即 Salesforce 存储桶和 Zendesk 存储桶。

      文件可用后,您可以在这些存储桶上创建外部表(每个存储桶 1 个表),以便您能够独立查询它们。

      一旦你可以查询它们,你就可以像普通表一样执行连接。

      当新数据到来时,您可以替换存储桶中的文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-25
        • 2017-10-05
        • 2021-09-05
        • 2013-03-08
        • 2021-08-08
        • 2018-12-12
        • 1970-01-01
        • 2010-10-22
        相关资源
        最近更新 更多