从外部表读取与加载数据并在 Bigquery 中读取

Posted

技术标签:

【中文标题】从外部表读取与加载数据并在 Bigquery 中读取【英文标题】:Reading from External Table vs Loading data and reading from it in Bigquery 【发布时间】:2019-12-04 16:57:33 【问题描述】:

我需要从 GCS 获取数据(csv 格式)到 Bigquery,然后对其执行 ETL 以产生结果。过来的 csv 格式可能不是固定的,并且可能会随着每个文件而微妙地改变。创建临时外部表以直接从 GCS 读取数据然后对其进行处理会更好,还是将数据加载到 bigquery 中的临时表中然后从中处理会更好。我试图了解在执行效率方面什么是更好的设计。任何方法都有缺点吗?

【问题讨论】:

【参考方案1】:

Google Cloud Platform 有一项名为 Composer 的服务。这是 Apache Airflow 的 GCP 版本,它是用于管理数据管道和工作流的软件。作为 GCP 产品的 Composer 具有与 GCS 和 BigQuery 配合使用的内置函数。我建议您在 Composer 中构建您的管道。

https://cloud.google.com/composer/

我们使用 Composer 与 GCS 和 Bigquery 来管理整个 ETL 流程。

Composer >> 从服务中提取原始文件 >> 将原始文件存储到 GCS Composer >> 从 GCS 提取原始文件 >> 转换原始文件 >> 将转换后的文件存储到 GCS >> 将转换后的文件存储到 BigQuery

Composer 具有许多额外的管道管理功能,当您的 ETL 变得越来越复杂时,您可以利用这些功能。

【讨论】:

【参考方案2】:

如果我理解正确,您希望在不中断进程的情况下处理由错误条目引起的异常。

如果是这种情况,您想使用 Cloud DataFlow 并使用 ParDo 来处理错误条目并将它们粘贴到云 pubsub 或等效于使用单独的系统进行处理。

有关详细信息,请参阅以下网址。

https://cloud.google.com/blog/products/gcp/handling-invalid-inputs-in-dataflow

希望这会有所帮助。

【讨论】:

以上是关于从外部表读取与加载数据并在 Bigquery 中读取的主要内容,如果未能解决你的问题,请参考以下文章

分区 BigQuery 表,从 AVRO 加载

表不会加载到 BigQuery

将时间戳从 Dataframe 加载到 BigQuery 数据集

将分区(火花)镶木地板加载到 bigquery 表

将 CSV 文件从 Google Drive 加载到 BigQuery

Apache Beam on Dataflow - 加载外部文件