BigQuery数据转换的最佳方法

时间:2020-01-08 04:00:51

标签: google-bigquery etl google-cloud-dataflow

我已经在BigQuery上存储了TB级的数据,我想对它执行大量的数据转换。

考虑到成本和性能,你们建议对这些数据进行转换以便将来在BigQuery上使用的最佳方法是什么?

我正在考虑几种选择:
1.从DataFlow中读取原始数据,然后将转换后的数据加载回BigQuery中吗?
2.直接从BigQuery进行吗?

关于如何进行此操作的任何想法?

2 个答案:

答案 0 :(得分:0)

我写下了一些有关性能的最重要的事情,您可以在这里找到有关使用DataFlow的问题的思考。

考虑性能的最佳做法

  • 选择文件格式:

BigQuery支持多种文件格式用于数据提取。有些人自然会比其他人快。在优化加载速度时,最好使用AVRO文件格式,该文件格式是基于行的二进制文件,可以拆分然后与多个工作人员并行读取。

从压缩文件(特别是CSV和JSON)中加载数据比以其他格式加载数据要慢。这是因为,由于Gzip的压缩不可拆分,因此需要获取该文件,将其加载到BQ中的插槽中,然后进行解压缩,然后最终并行化加载。

**FASTER**
Avro(Compressed)
Avro(Uncompressed)
Parquet/ORC
CSV
JSON
CSV (Compressed)
JSON(Compressed
**SLOWER**
  • ELT / ETL:

将数据加载到BQ中后,您可以考虑进行转换(ELT或ETL)。因此,通常,您希望在可能的情况下更喜欢ELT而不是ETL。 BQ具有很好的可扩展性,可以处理大量数据的大量转换。 ELT也相当简单,因为您可以编写一些SQL查询,转换一些数据,然后在表之间移动数据,而不必担心管理单独的ETL应用程序。

  • 原始表和登台表:

通常,一旦开始在仓库中将数据加载到BQ中,您将需要利用原始表和登台表,然后再发布到报表中。原始表实质上包含每日的完整摘要,或他们正在加载的数据的全部负载。暂存表基本上就是您的变更数据捕获表,因此您可以利用查询或DML将数据存储到暂存表中,并具有要插入的所有数据的完整历史记录。最后,报表表将成为发布给用户的摘要。

  • 使用DataFlow加速管道:

当您要进入流负载时,实际上是非常复杂的批处理负载(实际上并不完全适合SQL),则可以利用DataFlow或DataFusion加快这些管道的运行速度,并对这些数据执行更复杂的活动。而且,如果您从流媒体开始,我建议您使用DataFlow模板-Google提供了它来从多个不同的位置加载数据并移动数据。您可以在DataFlow UI中的Create Job from Template按钮中找到这些模板,并找到所有这些模板。 而且,如果您发现它最适合您的用例,但想进行一些修改,那么所有这些模板也都是开源的(因此您可以去回购,修改代码以适合您的需求)。

  • 分区:

BQ中的分区会根据摄取时间或数据中的一列在磁盘上物理分割您的数据。高效查询所需表的各个部分。这提供了巨大的成本和性能优势,尤其是在大型事实表上。每当有事实表或时态表时,请在日期维度上使用分区列。

  • 群集经常访问的字段:

集群使您可以对分区内的数据进行物理排序。因此,您可以通过一个或多个键进行群集。如果使用得当,可以提供巨大的性能优势。

  • BQ预订

它允许创建广告位预留,为这些预留分配项目,因此您可以为某些类型的查询分配更多或更少的资源。

考虑节省成本的最佳做法,您可以在official documentation中找到。

希望对您有帮助。

答案 1 :(得分:0)

根据this Google Cloud Documentation,应做以下问题以在ELT的DataFlow或BigQuery工具之间进行选择。

尽管数据很小,并且可以使用BigQuery UI进行快速上传,但出于本教程的目的,您也可以将Dataflow用于ETL。当您执行大规模联接时,即从大约500-5000列的10 TB以上数据中,使用Dataflow到BigQuery而不是BigQuery UI,目的是:

  • 您希望在数据加载到BigQuery时对其进行清理或转换,而不是先存储数据然后再进行连接。结果是, 这种方法还具有较低的存储要求,因为仅数据 存储在BigQuery中,处于连接和转换状态。

  • 您打算进行自定义数据清除(使用SQL无法简单完成)。

  • 您打算在加载过程中将数据与OLTP之外的数据(例如日志或远程访问的数据)合并。

  • 您计划使用连续集成或连续部署(CI / CD)来自动化数据加载逻辑的测试和部署。

  • 您预计ETL过程会随着时间的推移逐步迭代,增强和改进。

  • 您计划以增量方式添加数据,而不是执行一次性ETL。