我正在努力寻找BigQuery中联邦查询内部工作的文档,当涉及到这些查询对云SQL (MySQL)数据库的影响时。
我在这里看到联邦查询是只读的,没有问题。
我的问题是:联邦查询是否就像对数据库的普通查询一样,就像您使用MySQL Workbench之类的管理工具一样,或者是否有其他机制,联邦查询使用它来读取底层表而不会影响数据库的常规性能?例如,如果通过LOCK table语句/事务锁定表/行,然后触发联邦查询,那么联邦查询还会运行吗?
我的用例是增量地将数据从Cloud SQL加载到BigQuery数据仓库。我想尽量减少对OLTP数据库的影响,而不需要创建和维护流管道的开销。
我无法在GCP Public文档中找到关于联邦查询内部工作的任何细节,因此,这种机制可能是保密的。但是,我已经运行了您在这个问题中描述的设置,看起来BigQuery在Cloud SQL实例中执行正常查询。
我用mysql创建了一个Cloud SQL实例,并在BigQuery上设置了一个外部连接。如果我执行[1],我可以从BigQuery以及从另一个云shell窗口(它使用的用户与拥有锁的用户不同)检索结果。
然而,如果我在原来的云shell中执行[2],我无法在BigQuery和我的其他云shell实例中检索任何结果(查询一直在等待),直到我执行[3](我让它运行了超过10分钟)。
看了(4),为了提高我对读锁和写锁之间的理解,我想说BigQuery的行为方式与其他可以查询Cloud SQL实例的工具类似。
关于您将数据从Cloud SQL迁移到BigQuery以最小化对数据库的影响的用例场景,我理解将csv文件保存到Google Cloud Storage然后创建BigQuery传输不适合您的业务场景。另一方面,新的GCP产品Database Migration Service(5)不支持BigQuery作为目标。
最后,你可能想要考虑使用一个管道,它将数据从Cloud SQL流到Pub/Sub,最后将数据插入到BigQuery中,如果你用联邦查询迁移数据,"BigQuery不能保证外部数据源的数据一致性"。在查询运行时对底层数据的更改可能导致意外行为"(6)。
[1]:
[2]:
[3]:打开表;