繁体   English   中英

使用变量调试 bigquery 联合查询

[英]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'

有人知道该怎么做吗? 非常感谢你的帮助

您可以尝试以下方法之一:

  1. 使用转义引号 ( \' ) 而不是( and )
SET DSQL = '"SELECT * FROM mysql_table WHERE updated_at > \''|| BQ_LAST_DATETIME ||'\'"';
  1. FORMAT() function 中使用带三引号"""的格式化字符串。
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM