将数据从数据库移动到 Google Big Query

Moving data from a database to Google Big Query

我正在尝试找出一种方法,将数据从本地数据库 (Oracle) 批量(未流入)移动到 Google Bigquery。

我正在尝试通过 Google Cloud Composer 执行此操作,但我知道我需要先将数据导入 GCS,然后才能使用 Composer 将其移动到 BigQuery。

将数据从本地数据库移动到 GCS 的最佳方法是什么。或者 Google 云中是否有允许我将数据直接从数据库移动到 Bigquery 的服务?

是否可以改用 Cloud Dataflow 来更好地完成这项工作?谢谢

所以我认为您将 tools/services 与迁移的主要目标混为一谈。所以在任何事情之前我要解释一些概念:

1) Cloud Composer只是一个提供Airflow as Service的GCP产品,什么是Airflow? 编排平台,您可以在其中以编程方式创作、安排和监控工作流。 因此,一旦您有多个管道、作业或任务要编排,这将非常有用。它可以用于初始迁移,但不是必须使用的强制服务。

2) DataFlow 是 GCP 的一款出色产品,它使用 Apache Beam 作为其主要流水线语言,因此您可以部署批处理或流处理管道。如果您想在 GCP 中获得更多的云原生体验,Dataflow 是经典 products/frameworks 的替代方案,例如 Spark 或 Hadoop。下一张图片是关于何时使用 DataProc(Spark、Hadoop 等作为服务)或 Dataflow 的建议:

既然我们理解了这里的术语,答案就来了:这取决于。因此,这些服务可以在此过程中为您提供帮助,但每个基础架构都非常独特。例如:

  • 我们可以停止服务并进行迁移吗?还是应该在数据库接受请求时发生?
  • 需要多长时间?最长时间?
  • 你的数据库在防火墙后面? VPN 会影响吗?
  • 这是一个lift and shift的方法?我的意思是,您是要直接复制粘贴还是要进行数据重构以正确使用 BigQuery?

正如您所见,它在一定程度上取决于您的需求和当前的基础架构。但是,我要告诉你我们在我们公司做了什么:

就我而言,我采用了两种方法:Lift&Shift 和数据重构。这样做的原因是在我们忙于重构数据架构时,为业务提供查询的东西。我们做第一个的方法是将 table 从我们的 MSSQL 数据库移动到 BigQuery。解决方案是一组 python 脚本,用于复制模式并在另一侧重新创建 table(table by table 小批量)。

注意:这个过程可以使用 DataFlow 来完成,但是如果你的数据库在防火墙后面并且它需要 VPN 访问等,你将很难尝试让它发挥作用。

Google 建议的方法是在 GCS 中转储您的 table,然后您可以使用 BigQuery 中的 create table from source 选项重建它们(它行为类似于 AWS 中的 Athena)。但是,请记住,BigQuery 只能识别 Avro、parquet、JSON、CSV 和 ORC 格式。这意味着您的数据库转储应该以这些格式之一导出。如果您使用 JSON 或 CSV 之类的东西,Google BigQuery 足够智能,可以自动检测您的模式,不过!!!它并不完美,它会根据前 100 行做出很多假设。如果您使用 avro 或 parquet,架构将由这些文件定义,因此您将降低误报的风险。

注意: 对于 Oracle,您可以 "export" 到 CSV 或 JSON 使用这样的东西 https://blogs.oracle.com/opal/fast-generation-of-csv-and-json-from-oracle-database

所以总的来说,有很多选择可以解决这个问题,也有很多事情需要考虑。这是来自 google 的关于从 TeraData 迁移到 BigQuery 的文档,但通常它适用于任何其他类型的迁移:

https://cloud.google.com/solutions/migration/td2bq/td-bq-migration-overview

祝你好运!

您可以安排将数据迁移到 Cloud Composer 之外的 GCS。然后使用 GoogleCloudStorageObjectSensor 创建一个 DAG,它会每隔一段时间戳 GCS 以检查文件是否到达。然后,您可以使用 GCSToBigQueryOperator 将数据复制到 BigQuery。