簡體   English   中英

Python - 將 Python 變量用於 BigQuery Magic 查詢結構(不是查詢參數)

[英]Python - Use Python variable for BigQuery Magic query structure (not query parameter)

我想使用 Python 變量來幫助構建 BigQuery Magic SQL 查詢的結構,但是我無法確定這樣做的方法。 不是WHERE子句或類似內容的參數——它是查詢本身的結構。

這是我想使用 Python 變量day_of_week的 BigQuery Magic:

%%bigquery df
SELECT DATE_DIFF(CURRENT_DATE(), opening_date, WEEK(WEDNESDAY)) AS diff_weeks #I want to change WEDNESDAY to day_of_week

我嘗試執行以下操作:

params = {"day_of_week": day_of_week} #day_of_week could be either MONDAY, TUESDAY, WEDNESDAY etc.

%%bigquery df --params $params
SELECT DATE_DIFF(CURRENT_DATE(), opening_date, WEEK(@day_of_week)) as diff_weeks

但是,BigQuery Magic 似乎將其視為值參數, 'WEDNESDAY'而不是WEDNESDAY

有任何想法嗎?

我想出了另一種方法來做我想做的事情,它保留了 BigQuery Magic 的使用。

根據我的研究,BigQuery Magic 似乎不允許動態查詢,您可以在其中使用 Python 變量作為查詢結構。 如果你想這樣做,你必須使用 BigQuery Python Client 庫並將查詢創建為字符串,這不是很容易調試。

因此,我找到了一種在 BigQuery SQL 中執行DATE_DIFF(end_date, start_date, WEEK(<WEEKDAY>))的替代方法,它允許我使用 Python 變量動態交換<WEEKDAY>參數。

params = {"day_of_week": day_of_week} #day_of_week could be Monday, Tuesday, Wednesday, etc.

%%bigquery df --params $params

SELECT COUNT(*) counts
FROM (SELECT DATE FROM UNNEST(GENERATE_DATE_ARRAY(start_date, end_date)) AS DATE)
WHERE FORMAT_DATE('%A', DATE) = @day_of_week #this is the Python variable
GROUP BY FORMAT_DATE('%A', DATE)

此 SQL 語句使用提供的start_dateend_date之間的GENERATE_DATE_ARRAY創建日期數組。 FORMAT_DATE('%A', DATE)將每個日期轉換為工作日(即星期一、星期二、星期三等)。 並且有效地,通過執行GROUP BY FORMAT_DATE('%A', DATE)COUNT(*) ,它計算每個工作日的出現次數。

執行WHERE FORMAT_DATE('%A', DATE) = @day_of_week然后將其過濾到您關心的工作日。

暫無
暫無

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

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