[英]How to query json with python UDF or json_extract in BigQuery?
[英]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_date
和end_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.