使用联合查询将 bigquery table 与 google cloud postgres table 合并

Merge bigquery table with google cloud postgres table with federated query

我正在尝试将 bigquery table(目标)与 google 云 postgres table(源)与联合查询合并。但是,bigquery 似乎不接受“using”子句中的联合查询。

Syntax error: Expected "(" or keyword SELECT or keyword WITH but got identifier "EXTERNAL_QUERY" at [3:9]

我的查询如下所示。

MERGE bigquery_dataset.bigquery_table TARGET
USING (
    EXTERNAL_QUERY("projects/company-co/locations/us/connections/company","SELECT * FROM postgres_schema.postgres_table")
        ) SOURCE

ON target.id = source.id

WHEN MATCHED THEN ...
WHEN NOT MATCHED BY TARGET THEN ...
WHEN NOT MATCHED BY SOURCE THEN ...

此类功能是否有任何已知的解决方法?或者还有其他方法可以执行这种类型的合并吗?

根据您的要求,如果您希望在外部数据源位于 Cloud PostgreSQL 实例的 BigQuery 中 运行 联合查询,您需要使用 SQL 函数即 EXTERNAL_QUERY

您收到的错误:“语法错误:应为“(”或关键字 SELECT 或关键字 WITH 但在 [3:9] 处获得了标识符“EXTERNAL_QUERY” ” 是因为您在 EXTERNAL_QUERY.

之前遗漏了 SELECT 语句

根据这个doc,语法应该是:

SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query[, options]);

我尝试 运行在 BigQuery 中使用联合查询,其中源在 Cloud PostgreSQL 中,它按预期工作。

SQL 查询:

MERGE myproject.demo.tab1 TARGET
USING (
  select * from EXTERNAL_QUERY("projects/myproject/locations/us-central1/connections/sqltobig", "SELECT * FROM entries;")
       ) SOURCE

ON target.entryID = source.entryID

WHEN MATCHED THEN
DELETE

WHEN NOT MATCHED THEN
INSERT(guestName, content, entryID)
VALUES(guestName, content, entryID)