簡體   English   中英

如何使用 App Script 將變量插入 BigQuery 查詢字符串?

[英]How can I insert variables into BigQuery query strings using App Script?

我遇到了一個問題,我無法在谷歌上的任何地方找出或找到解決方案。

我在 BigQuery 中有一個表,其中包含 150k+ 唯一行和 29 列。
每行都有一個REQUIREDdateX類型DATE

在我的應用程序腳本中,我從電子表格中獲取用戶輸入(最重要的是日期范圍),在指定文件夾中創建新電子表格,插入數據和設置格式,然后將下載鏈接返回給用戶。

我需要的“最終”功能是能夠獲取用戶提供的日期范圍值並將它們插入到我的 BigQuery 查詢字符串中,這樣我就可以只為這些日期寫入 BigQuery 表中的數據。

問題:
無論我如何在 App Script 中構建查詢字符串,查詢都不會返回任何行。 只是標題。
到目前為止,我已經確定查詢中的WHERE語句是問題所在。 我試過以下方法:

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+ 行運行查詢。
如果我 select 我的列,它會返回所需的列。 但不會返回所有 (*)。

我非常困惑,真的迷路了。 也許我在這上面花了太多時間,以至於我形成了狹隘的視野並且需要第二只眼睛來發現問題。 任何幫助是極大的贊賞。 先感謝您。

如果沒有樣本數據,我不確定我還能說些什么。 如果可能 - 也許您可以共享一些匿名版本的數據集?

我的猜測是一個簡單的錯字:

var request = {
    query: `SELECT * FROM le.table.name WHERE dateX = '2020-10-5'`
};

不應該是' 2020-10-0 5'嗎?

我已經解決了這個問題並找到了解決我的問題的方法:

當直接在 BigQuery 中運行查詢時,它很聰明地知道“2020-10-05”實際上是一個日期,因此它以DATE格式讀取它。

在 App Script 中構造查詢字符串時,整個 this 是一個String ,因此 '2020-10-05' 也是一個字符串。 這顯然會導致WHERE返回false ,因為它正在將dateX (一個DATE )與一個String進行比較。
這是通過在日期變量上使用cast()來解決的:

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'";
//

我希望這可以幫助其他處理 App Script 和 BigQuery 的人!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM