我有一个基于gcp的环境。我在gcp BigQuery中使用标准SQL脚本,并对cloudsql MySql使用联邦查询。联邦查询从cloudsql mysql数据库中选择数据。我需要根据依赖于BigQuery中数据的条件从cloudsql mysql数据库中选择数据。我在gcp bigquery中使用标准sql脚本中的变量来存储从bigquery中选择的值。我想在mysql查询的where子句中计算这个变量的值。参见下面的示例,在该示例中,我从BigQuery中选择一个日期并将其存储在变量"BQ“中
_
最后
_
DATETIME“。
DECLARE BQ_LAST_DATETIME DATETIME
SET BQ_LAST_DATETIME = (select max(date_created) from bq_my_dataset.bq_my_table);由于我使用bigquery联邦查询从cloudsql数据库读取数据(
https://cloud.google.com/bigquery/docs/cloud-sql-federated-queries
),我想使用我存储在变量"BQ“中的值
_
最后
_
mysql查询where子句中的“DATETIME”
SELECT * FROM EXTERNAL_QUERY("my-gcp-project.my-region.my-connection2-cloudsql", "select * from mysqlschema.mysql_table where where date_created = @BQ_LAST_DATETIME;" );请注意,在上面的查询中,我使用了"@BQ
_
最后
_
我不确定我是否可以直接使用bigquery脚本变量作为联邦查询的“外部”查询部分的查询参数。有什么建议可以在联邦查询中实现外部查询的参数化吗?或者你是否知道我如何才能达到与我的意图相似的效果?
实际上,我试着按照描述的那样去做。我使用bigquery脚本变量作为联邦查询的“外部”查询部分的查询参数。这里唯一的细微差别是,由于我处理的是日期,所以我执行了强制转换,而且由于日期变量实际上被视为字符串,因此我使用mysql STR将其格式化为date
_
至
_
日期如下
DECLARE BQ_LAST_DATETIME DATETIME
SET BQ_LAST_DATETIME = (select max(date_created) from bq_my_dataset.bq_my_table);
SET BQ_LAST_DATE= CAST(BQ_LAST_DATETIME AS DATE);
SELECT * FROM EXTERNAL_QUERY("my-gcp-project.my-region.my-connection2-cloudsql", "select * from mysqlschema.mysql_table where where date_created = STR_TO_DATE(@BQ_LAST_DATE,'%Y-%m-%d') ;" );虽然此查询被解析器接受,但它没有给出预期的结果。基本上,变量@BQ的值
_
最后
_
日期似乎未按预期到达MySQL查询。
有人知道我错过了什么吗?
非常感谢你的帮助
发布于 2021-02-02 21:48:38
你可以试试
DECLARE BQ_LAST_DATETIME STRING;
DECLARE DSQL STRING;
SET BQ_LAST_DATETIME = 'SELECT max(date_created) from bq_my_dataset.bq_my_table';
SET DSQL = '"select * from mysqlschema.mysql_table where date_created = (' || BQ_LAST_DATETIME || ')"';
EXECUTE IMMEDIATE 'SELECT * FROM EXTERNAL_QUERY("my-gcp-project.my-region.my-connection2-cloudsql",' || DSQL || ');'https://stackoverflow.com/questions/65995449
复制相似问题