【问题标题】:Moving data from a database to Google Big Query将数据从数据库移动到 Google Big Query
【发布时间】:2019-12-19 13:51:18
【问题描述】:

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

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

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

使用 Cloud Dataflow 可以更好地完成这项工作吗?谢谢

【问题讨论】:

    标签: google-cloud-platform google-cloud-dataflow airflow google-cloud-composer data-integration


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      所以我认为您将一些工具/服务与迁移的主要目标混合在一起。因此,在任何事情之前,我将解释一些概念:

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

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

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

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

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

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

      注意: 例如,可以使用 DataFlow 来完成此过程,但是如果您的数据库位于防火墙后面并且需要 VPN 访问等,那么您将很难让它工作。

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

      注意:对于 Oracle,您可以使用类似 https://blogs.oracle.com/opal/fast-generation-of-csv-and-json-from-oracle-database

      的方式“导出”为 CSV 或 JSON

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

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

      祝你好运!

      【讨论】:

      • 谢谢 Juan Urrego 我的答案 我们可以停止服务并进行迁移吗?还是应该在数据库接受请求时发生? 迁移应该正在进行,我们不想停止数据库,是的,它可以接受请求应该需要多长时间?最长时间? 我们希望一次加载几个表,目前这是一个持续的过程这是您的数据库在防火墙后面? VPN会影响吗? 是的,数据库在防火墙后面这是一种提升和转移的方法?我的意思是,您是要直接复制粘贴,还是要进行数据重构以正确使用 BigQuery? 主要是提升和移位
      • 我知道我似乎在代码或应用程序之外将数据从 DB 移动到 GCS 作为第一个登陆区域,稍后我可以根据您解释的内容使用 Cloud Composer 或 Dataflow。移动数据的第一步是不是就像我编写一个应用程序并让它在 prem 或 GCP 中运行并将表移动到 GCS 一样?如果有办法从 Airflow 或 Dataflow 本身通过一些编码当然可以做到这一点,我宁愿不编写一个单独的连接器。如果是这样,你能给我一些链接吗?
      • 好的,所以对于Migration should be ongoing and we don't want to stop DB and yes it can take requests ,我会告诉您需要拥有 Oracle DB 的只读副本。这样,您可以在不影响当前用户的情况下运行查询。鉴于您还需要迁移即将到来的新数据,我会使用 PubSub + DataFlow 之类的东西实时插入新数据。因此,按照这种思路,您可以为历史数据创建批处理并实时接收新数据(保持新旧同步)
      • 对于Yes DB is behind firewalls It is a lift and shift ,请小心使用您的服务创建 VPN 隧道。在这种情况下,我会创建一些脚本,这些脚本将在专用网络中运行,并打开 BigQuery 或 GCS 的出站流量(取决于您的方法)
      • 对于I understand I would seem outside code or app to move data from DB to GCS as the first landing area and later I could use Cloud Composer or Dataflow based on things you explained.,不需要有“外部”的东西,您可能会创建一个 AirFlow 操作员可以执行的作业。例如,此自定义运算符与您当前基础架构中的代理连接。因此,您可以使用 AirFlow/composer 来编排您的完整工作流程。我的意思是,在开始编码之前,请注意这些安全限制
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 1970-01-01
      • 2017-09-03
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多