我试图在python中运行这个bigQuery
start_date= "2022-03-08"
end_date = "2022-05-03"
query = f"""
SELECT SUM(CostInBillingCurrency) as cost,EXTRACT(MONTH from date) as MONTH, SubscriptionId, SubscriptionName
FROM `table_name`
WHERE
Date BETWEEN TIMESTAMP({start_date})
AND TIMESTAMP({end_date})
GROUP BY
SubscriptionId, SubscriptionName,MONTH """这是我正在犯的错误:
google.api_core.exceptions.BadRequest: 400 No matching signature for function TIMESTAMP for argument types: INT64. Supported signatures: TIMESTAMP(STRING, [STRING]); TIMESTAMP(DATE, [STRING]); TIMESTAMP(DATETIME, [STRING]); TIMESTAMP(TIMESTAMP) at [5:18]如果我将日期硬编码为:
Date BETWEEN TIMESTAMP("2022-06-01")
AND TIMESTAMP("2022-06-30")效果很好。所以这个查询是对的。
请帮助弄清楚如何动态传递日期。
发布于 2022-07-28 11:30:58
你得加引号。如果您执行result = f'TIMESTAMP({start_date})',它将呈现给TIMESTAMP(2022-06-01)。因此,将其更改为result = f'TIMESTAMP("{start_date}")或result = f"TIMESTAMP('{start_date}')",您应该会很好。
发布于 2022-07-28 11:34:54
该变量似乎只是在查询中放置值,但查询需要字符串,您可以按如下方式更新查询
query = f"""
SELECT SUM(CostInBillingCurrency) as cost,EXTRACT(MONTH from date) as MONTH, SubscriptionId, SubscriptionName
FROM `table_name`
WHERE
Date BETWEEN TIMESTAMP("{start_date}")
AND TIMESTAMP("{end_date}")
GROUP BY
SubscriptionId, SubscriptionName,MONTH """https://stackoverflow.com/questions/73152096
复制相似问题