![](/img/trans.png)
[英]How to configure federated query from Google BigQuery to Google AlloyDB?
[英]Debugging a bigquery federated query with variables
所以我正在尝试为我的表在 bigquery 中构建增量更新系统,源为 Cloud SQL MySQL 数据库。 为此,我正在使用联合查询,并且我想查询在某个时间戳之后已更新的数据。
我的查询基于这个问题的答案: How to use query parameters in GCP BigQuery federated queries
要获得:
DECLARE BQ_LAST_DATETIME STRING;
DECLARE DSQL STRING;
SET BQ_LAST_DATETIME = "SELECT MAX(updated_at) FROM `dataset.table`";
SET DSQL = '"SELECT * FROM mysql_table WHERE updated_at > ('|| BQ_LAST_DATETIME ||')"';
EXECUTE IMMEDIATE 'SELECT * FROM EXTERNAL_QUERY("mygcpproject.region.database",'|| DSQL||');'
这不起作用,因为设置 BQ_LAST_DATETIME 的 bigquery 查询正在 mysql 中运行,因此找不到表。
所以我发现你必须评估第一个 SELECT,这导致了这个:
DECLARE BQ_LAST_DATETIME TIMESTAMP;
DECLARE DSQL STRING;
SET BQ_LAST_DATETIME = (SELECT MAX(updated_at) FROM `dataset.table`);
SET DSQL = '"SELECT * FROM mysql_table WHERE updated_at > ('|| BQ_LAST_DATETIME ||')"';
EXECUTE IMMEDIATE 'SELECT * FROM EXTERNAL_QUERY("mygcpproject.region.database",'|| DSQL||');'
这也不起作用,因为查询将具有以下内容:
SELECT * FROM mysql_table WHERE updated_at > 16-09-2022 15:25:00
它应该在哪里:
SELECT * FROM mysql_table WHERE updated_at > '16-09-2022 15:25:00'
有人知道该怎么做吗? 非常感谢你的帮助
您可以尝试以下方法之一:
\'
) 而不是(
and )
。SET DSQL = '"SELECT * FROM mysql_table WHERE updated_at > \''|| BQ_LAST_DATETIME ||'\'"';
"""
的格式化字符串。EXECUTE IMMEDIATE FORMAT("""
SELECT * FROM EXTERNAL_QUERY(
"mygcpproject.region.database",
"SELECT * FROM mysql_table WHERE updated_at > '%s'"
);
""", STRING(BQ_LAST_DATETIME));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.