【问题标题】:streaming PostgreSQL tables into Google BigQuery将 PostgreSQL 表流式传输到 Google BigQuery
【发布时间】:2021-06-28 06:49:41
【问题描述】:

我想将外部 PostgreSQL 数据库中的数据自动流式传输到我 GCP 帐户中的 Google Cloud Platform BigQuery 数据库中。到目前为止,我已经看到可以使用 EXTERNAL_QUERY() 函数查询外部数据库(MySQL 或 PostgreSQL),例如: https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries

但要使其正常工作,数据库必须位于 GCP Cloud SQL 中。我试图查看从外部 PostgreSQL 流式传输到 Cloud SQL PostgreSQL 数据库有哪些选项,但我只能找到有关在一次性副本中复制它的信息,而不是流式传输: https://cloud.google.com/sql/docs/mysql/replication/replication-from-external

我希望这种流式传输到 BigQuery 的原因是我正在使用 Google Data Studio 从外部 PostgreSQL 创建报告,效果很好,但 GDS 只能接受来自 Google BigQuery 数据库的 SQL 查询参数。例如。如果我们有一个包含 1M 条目的表,并且我们希望用户添加一个 Google Data Studio 参数,这将变成:

SELECT * from table WHERE id=@parameter;

这意味着查询会更快,并且不会达到 Google Data Studio 中 100K 记录的限制。

在外部 PostgreSQL(只读访问)和 Google BigQuery 之间创建连接以便通过 BigQuery 查询时获得与查询外部 PostgreSQL 相同的实时结果的最佳方法是什么?

【问题讨论】:

  • 如果您正在寻找将数据流式传输到 BigQuery,我不认为使用 EXTERNAL_QUERY() 是要走的路。您为什么不直接将数据流式传输到 BigQuery,而不是计划将数据从 PostgreSQL 移动到 CloudSQL?这并不简单,但通过适当的数据流作业,您可以做到。也许为了更简单,您可以每 X 小时批处理一次。
  • EXTERNAL_QUERY 的限制是什么?性能?
  • 性能将是最重要的,是的。但还有更多 - cloud.google.com/bigquery/docs/…。您需要实时数据吗?还是那不重要?您可以考虑构建一个管道来提取数据并加载到 BQ 中吗?

标签: postgresql google-bigquery google-data-studio


【解决方案1】:

也许您错过了谷歌云用户指南中所述的选项?

https://cloud.google.com/sql/docs/mysql/replication/replication-from-external#setup-replication

这部分的注意事项,上面写着:

“设置复制设置时,您还可以决定 Cloud SQL 副本是否应在初始导入完成后与源数据库服务器保持同步。应保持同步的副本处于联机状态。A只更新一次的副本处于离线状态。”

我怀疑你正在寻找在线模式。

【讨论】:

  • 这并没有引起我的注意:我一定会试一试,看看效果如何!谢谢。
【解决方案2】:

您正在寻找的内容需要根据您的需求进行一些架构设计和一些编码。没有自动将您的 PostgreSQL 数据库与 BigQuery 同步的功能(除了有一些限制的 EXTERNAL_QUERY() 功能 - 每个数据库 1 个连接 - 性能 - 连接总数 - 等等)。

如果您不是实时查找数据,您可以使用 Airflow,例如,使用 DAG 每天一次连接到所有数据库(例如使用 KubernetesPodOperator),提取数据(从过去的一天)并将其加载到 BQ 中。一个典型的 ETL 过程,但在这种情况下更多的是 EL(T)。如果您不能等待前一天的数据,您可以更频繁地运行此过程。

另一方面,如果您正在寻找流式传输,那么我可以考虑数据流作业。我猜你可以使用 JDBC 连接器进行连接。

此外,根据您的管道结构,如果在写入 PostgreSQL 数据库的同时,您还将数据流式传输到 BigQuery,可能会更容易实现(但更难维护)。

【讨论】:

    【解决方案3】:

    不确定您是否已经尝试过,但不是添加参数,而是添加基于维度的下拉过滤器,Data Studio 会以这种形式将其推送到底层 Postgres 数据库:

    SELECT * from table WHERE id=$filter_value;

    这应该可以在不通过 BigQuery 的情况下达到您想要的相同结果。

    【讨论】:

      猜你喜欢
      • 2017-05-10
      • 1970-01-01
      • 2023-02-13
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 2020-09-03
      相关资源
      最近更新 更多