BigQuery - 事实表更新逻辑

时间:2016-10-05 17:08:37

标签: google-bigquery

我正在努力在Big Query上构建原型以进行性能和成本分析,

要求

为销售运营(激励,潜在客户,权利,预测,营销,潜在客户等)数据构建DW(星型模式),以便进行报告和高级分析。 每天从CRM和其他上游销售/营销系统批量加载数据。数据量约为每天5 TB数据,90%附加数据,10%数据具有旧指标更新(最多7天)。

设计

  • 创建日期分区的Big Query事实表 - 很多查询都是
    趋势和时间序列类型查询。

  • 为报告和其他重复创建聚合表 查询/仪表板限制扫描量并降低成本。

摄取逻辑

  1. 上游ETL和cron作业,以便在Google云端存储中删除加载就绪文件(已经实施了第三方和其他业务逻辑)。

  2. 更新的临时表(ODS),由于分区表无法使用DML更新,因此请复制最近7天的分区临时表(ODS)以处理更新。 (复制操作无成本) - 每天创建一个新临时表,以便更容易复制回事实表。

  3. 如果源文件中存在记录,则更新临时表中的记录 - DML操作。

  4. 旧日的新记录,附加到相应的日期临时表。

  5. 截断并将最后7天的分区从临时表替换(复制)到DW事实表。 - 复制操作无需费用。

  6. 将新数据(占总数据的90%)附加到DW事实表 - 数据加载无成本

  7. 问题

    对于给定的要求,是否有更好的设计选择?

    DML操作性能 - 我需要更新500MB - 1 TB的数据,使用BigQuery中的DML操作对性能产生的影响以及需要考虑的任何成本?

    如何估算和预测更新和复制操作性能?

2 个答案:

答案 0 :(得分:0)

关于星形架构,BigQuery中规范化数据的首选方法是使用nested and repeated structures。 IMO,您可以看到BigQuery是一个非常强大的数据库,可以用作DW。

对于您的时间序列需求,您可以使用ingestion-time partitioned tables

您可以将schedule queriesGCS triggers与云功能一起使用来代替cron作业进行查询。在GCS中添加新文件时可以触发它们。

关于摄取逻辑,我建议使用Cloud Composer,它是GCP中Airflow的集成。

您将能够使用BigQuery operators完成您所说的一切。使用此运算符,您将不需要使用DML创建表,因为您可以使用BigQueryCreateEmptyTableOperator。使用Airflow,您将不需要cron作业。

关于费用,您可以使用pricing calculator

我希望这会有所帮助!

答案 1 :(得分:0)

此工作流程几乎与我在GCP上为销售/营销/产品数据设置的工作流程相同。

我的工作流程由Python,BigQuery标准SQL,Google Cloud Composer(GCP Airflow实例)和Google Container Registry组成。

我们的工作流程是在python类中本地开发的,该类处理ETL复制所需的所有步骤。复制的大多数实际步骤都是bigquery中的Just DML语句,但是我们依赖python类进行标准化,代码重用和执行顺序/记录。

我们将其打包到一个docker容器中,然后放在Google云注册表中。

我们使用Google Cloud Composer(Airflow)Kubernetes Pod Operator在容器中运行python文件。这有帮助,因此我们不必担心维护虚拟机的任何开发问题。

气流非常适合计划和依存关系绘制。 Bigquery中没有一种方法可以轻松地调度查询并维护汇总表的执行顺序。使用Airflow,您可以在ETL管道完成后轻松启动这些汇总查询。

我不确定100%您会期望得到什么费用,但是在BigQuery中,存储和处理非常便宜。 Composer和Kubernetes是我们大部分支出的地方。

虽然此工作流程需要花费几天的时间来设置,但当您需要使用销售数据进行预测性/规范性分析时,它会变得更加强大。使用python / Airflow,您可以完成所有的etl,运行聚合查询,从R或scikit学习进行任何机器学习分析,然后将结果按正确的顺序以正确的顺序全部返回给BigQuery和CRM

如果您想获取一些代码示例或GCP网站上的快速入门帮助,可以直接与我联系。