我无法使用从Google BigQuery到Google Cloud SQL Postgres的联合查询功能。Google最近宣布了BigQuery的联合查询功能,该功能处于测试状态。
我使用文档中描述EXTERNAL_QUERY语句,但无法连接到我的 Cloud SQL 实例。例如查询
SELECT * FROM EXTERNAL_QUERY('my-project.europe-north1.my-connection', 'SELECT * FROM mytable;');
或
SELECT * FROM EXTERNAL_QUERY("my-project.europe-north1.pg1", "SELECT * FROM INFORMATION_SCHEMA.TABLES;");
我收到此错误:
Invalid table-valued function EXTERNAL_QUERY Connection to PostgreSQL server failed: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.
有时错误是这样的:
Error encountered during execution. Retrying may solve the problem.
我已按照第 https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries 页上的说明操作并启用了 BigQuery Connection API。一些文档对EXTERNAL_QUERY使用不同的引号("或"或"(,但所有变体都以相同的结果结尾。
我在堆栈驱动程序 postgres 日志中看不到任何错误。如何更正此连接错误?任何建议如何进一步调试它?
只是为仅使用私有 IP 云 SQL 实例的人增加了另一种可能性。我刚刚遇到过这种情况,想知道为什么在确保其他一切看起来都正确后它仍然不起作用。根据文档(截至 2021 年 11 月 13 日(:"BigQuery 云 SQL 联合仅支持具有公有 IP 连接的云 SQL 实例。请为云 SQL 实例配置公共 IP 连接。
我刚刚尝试过,就 bigquery 查询在欧盟运行而言,它可以工作(截至今天 10 月 6 日它有效(。 我的例子:
SELECT * FROM EXTERNAL_QUERY("projects/xxxxx-xxxxxx/locations/europe-west1/connections/xxxxxx", "SELECT * FROM data.datos_ingresos_netos")
只需将第一个xxxxs
替换为您的projectid
,将最后一个替换为您在bigquery
接口中为连接指定的名称(不是cloudsql info
,进入查询(
不幸的是,BigQuery 对 Cloud SQL 的联合查询目前仅在美国地区有效(2019 年 9 月(。文件(https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries(说它应该在其他地区也有效,但事实并非如此。
我在欧盟和欧洲北部1多次测试了原始问题的设置,但无法使其正常工作。当我将设置更改为美国或美国中心1时,它可以工作!
对 Cloud SQL 的联合查询处于预览状态,因此该功能正在不断发展。让我们希望谷歌能尽快在其他地区发挥作用。
BigQuery 数据集和 Cloud SQL 实例必须位于同一区域,如果数据集位于多区域位置(如美国和欧盟(,则必须位于同一位置。
根据列出的已知问题仔细检查这一点。
服务器意外关闭了连接 这可能意味着服务器在处理请求之前或期间异常终止。
此消息通常意味着您将在远程数据库服务器的日志中找到更多信息。 没有有用的信息可以发送到"客户端"服务器,因为连接消失了,所以没有办法发送它。 所以你看了远程服务器。
我遇到了同样的错误,这只是一个权限问题。在Connection info
部分中,您可以找到用于外部连接的服务帐户,只需为此服务帐户提供BigQuery Connection Service Agent
角色即可。
它为我解决了这个问题,希望这对某人有所帮助
检查 BQ 服务帐户是否具有 BigQuery 连接服务代理角色。对我来说,SA权限丢失了。一旦我修复了它,它就开始为我工作