因此,我正在尝试在BigQuery中为我的表构建一个增量更新系统,其源代码为Cloud SQL MySQL数据库。为此,我使用联邦查询,并且我想查询在某个时间戳之后更新的数据。
我的查询基于这个问题的答案:如何在GCP BigQuery联邦查询中使用查询参数
要获得以下信息:
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中运行,因此找不到该表。
因此,我发现您必须评估第一个选择,这导致了以下结果:
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'
有人知道怎么做吗?非常感谢你的帮助
1条答案
按热度按时间alen0pnh1#
您可以尝试以下方法之一:
1.使用转义引号(
'
)而不是(
和)
。1.在**Format()**函数中使用带三引号的格式化字符串
"""
。