首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用App将变量插入到BigQuery查询字符串中?

如何使用App将变量插入到BigQuery查询字符串中?
EN

Stack Overflow用户
提问于 2020-11-13 09:01:36
回答 2查看 203关注 0票数 0

我遇到了一个问题,我无法搞清楚,也无法为谷歌的任何地方找到解决方案。

我在BigQuery中有一个表,其中有150k+唯一的行和29列。

每一行都有一个REQUIREDdateX类型DATE

在我的App中,我从电子表格(最重要的是日期范围)获取用户输入,在指定的文件夹中创建一个新的电子表格,插入数据和设置格式,并将下载链接返回给用户。

我需要的“最后”特性是能够获取用户提供的日期范围值,并将它们插入到我的BigQuery查询字符串中,以便我可以只为这些日期从BigQuery表中写入数据。

问题是:

无论我如何在construct中构造查询字符串,查询都不返回任何行。只是标题。

到目前为止,我已经确定查询中的WHERE语句是问题所在。我试过以下几种方法:

代码语言:javascript
复制
var request = {
    query: `SELECT * FROM le.table.name WHERE dateX = '2020-10-5'`
};
//
// Some of the variations I've tried (among countless others w/ different formatting):
// 'SELECT * FROM le.table.name WHERE dateX = "2020-10-5"'
// "SELECT * FROM le.table.name WHERE dateX = '2020-10-5'"
// 'SELECT * FROM le.table.name WHERE dateX between "2020-10-5" and "2020-10-5"'
// 'SELECT * FROM le.table.name WHERE cast(dateX as date) between "2020-10-5" and "2020-10-5"'
// `SELECT * FROM le.table.name WHERE dateX = ${dateFrom}`
// `SELECT * FROM le.table.name WHERE dateX between ${dateFrom} and ${dateTo}`
//
// I've also tried setting the query string as a variable & passing with no success. 
// var queryString = 'SELECT * FROM le.table.name WHERE dateX = "2020-10-5"';
// var queryString = 'SELECT * FROM le.table.name WHERE dateX = ' + '2020-10-5';

所有这些都运行得很好。作业执行时没有错误。但是它只返回标题,不返回行:(

相同的查询运行良好,在BigQuery中直接运行时返回所需的行。

此外,如果我从WHERE中删除所有内容,那么它将使用我的所有150k+行运行查询。

如果选择我的列,它将返回所需的列。但不会返回所有(*)。

我超越了困惑&真正迷失了。也许我花了很多时间在这个问题上,我开发了一个隧道式的愿景&需要第二组眼睛来发现这个问题。任何帮助都是非常感谢的。提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2020-11-13 10:37:30

我不确定在没有样本数据的情况下还能说什么。如果可能的话-也许你可以分享一些你的数据集的匿名版本?

我猜会是一个简单的错误:

代码语言:javascript
复制
var request = {
    query: `SELECT * FROM le.table.name WHERE dateX = '2020-10-5'`
};

不是应该是“2020-10-5”吗?

票数 0
EN

Stack Overflow用户

发布于 2020-11-13 22:09:03

我在这个问题上睡了一觉,找到了解决我的问题的办法:

当在BigQuery中直接运行查询时,知道'2020-10-05‘实际上是一个日期是非常明智的,因此它以DATE格式读取它。

在App中构造查询字符串时,整个这是一个字符串,因此'2020-10-05‘也是一个字符串。这显然会导致WHERE返回false,因为它正在将dateX ( DATE )与字符串进行比较。

通过对日期变量使用cast()来解决这个问题:

代码语言:javascript
复制
var request = {
    query: `SELECT * FROM le.table.name WHERE dateX between ` + 
           `cast(${dateFrom} as date) and cast(${dateTo} as date);`
}  
//
//Note: dateFrom & dateTo variables need to include ' ' in them.
//  Ex: var dateFrom = "'2020-10-05'";
//

我希望这能帮助其他人处理应用程序脚本& BigQuery!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64818037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档