我想自动将数据从外部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创建报告,这很好用,但是只有来自Google BigQuery数据库的SQL查询参数才能接受。例如,如果我们有一个包含1M个条目的表,并且我们希望用户添加一个Google Data Studio参数,这将变成一个:
SELECT * from table WHERE id=@parameter;
这意味着查询速度会更快,并且不会达到Google Data Studio中100K记录的限制。
在外部PostgreSQL (只读访问)和谷歌BigQuery之间创建连接的最佳方式是什么,以便在通过BigQuery查询时,可以获得与查询外部PostgreSQL相同的实时结果?
发布于 2021-04-08 18:03:33
也许你错过了谷歌云用户指南中提到的选项?
https://cloud.google.com/sql/docs/mysql/replication/replication-from-external#setup-replication
请注意,在本节中,它说:
在设置复制设置时,还可以决定云SQL副本在初始导入完成后是否应与源数据库服务器保持同步。应保持同步的副本处于联机状态。仅更新一次的副本处于脱机状态。
我怀疑在线模式就是你要找的。
发布于 2021-04-14 02:26:00
你正在寻找的东西将需要一些基于你的需求的架构设计和一些编码。没有自动将PostgreSQL数据库与BigQuery同步的功能(除了EXTERNAL_QUERY()功能有一些限制-每个数据库1个连接-性能-连接总数等)。
如果您不是在寻找实时数据,您可以使用Airflow,例如,让DAG每天连接到所有数据库一次(例如使用KubernetesPodOperator ),提取数据(从前一天)并将其加载到BQ中。一个典型的ETL进程,但在本例中更多的是EL(T)。如果您不能等待前一天的数据,则可以更频繁地运行此过程。
另一方面,如果流是您正在寻找的,那么我可以考虑数据流作业。我想您可以使用JDBC连接器进行连接。
此外,根据管道结构的不同,如果在写入PostgreSQL DB的同时还将数据流式传输到BigQuery中,可能更容易实现(但更难维护)。
发布于 2021-04-16 05:16:25
不确定您是否已经尝试过此操作,但如果您添加了基于维度的下拉过滤器,Data Studio会将其下推到底层Postgres数据库中,而不是添加参数:
SELECT * from table WHERE id=$filter_value;
这应该可以在不经过BigQuery的情况下获得您想要的结果。
https://stackoverflow.com/questions/66901681
复制相似问题