无法在 python 中对 bigquery 运行标准 SQL 查询
Posted
技术标签:
【中文标题】无法在 python 中对 bigquery 运行标准 SQL 查询【英文标题】:Unable to run a standardSQL query to bigquery in python 【发布时间】:2017-07-19 02:16:33 【问题描述】:我正在尝试通过 Python 脚本查询 Bigquery 中的表。但是,我已将查询编写为标准 sql 查询。为此,我需要使用“#standardsql”开始我的查询。但是,当我这样做时,它会退出我的其余查询。我尝试使用多行编写查询,但它也不允许我这样做。有没有人处理过这样的问题并找到了解决方案?下面是我的第一个代码,查询被注释掉了。
client = bigquery.Client('dataworks-356fa')
query = ("#standardsql SELECT count(distinct serial) FROM `dataworks-356fa.FirebaseArchive.test2` Where (PeripheralType = 1 or PeripheralType = 2 or PeripheralType = 12) AND EXTRACT(WEEK FROM createdAt) = EXTRACT(WEEK FROM CURRENT_TIMESTAMP()) - 1 AND serial != 'null'")
dataset = client.dataset('FirebaseArchive')
table = dataset.table('test2')
tbl = dataset.table('Count_BB_Serial_weekly')
job = client.run_async_query(str(uuid.uuid4()), query)
job.destination = tbl
job.write_disposition= 'WRITE_TRUNCATE'
job.begin()
当我尝试像这样编写查询时,python 不会读取第二行过去的任何内容作为查询。
query = ("#standardsql
SELECT count(distinct serial) FROM `dataworks-356fa.FirebaseArchive.test2` Where (PeripheralType = 1 or PeripheralType = 2 or PeripheralType = 12) AND EXTRACT(WEEK FROM createdAt) = EXTRACT(WEEK FROM CURRENT_TIMESTAMP()) - 1 AND serial != 'null'")
我正在运行的查询选择上周产生的值。如果有一个不需要使用standardsql的变体,我也愿意切换我的其他查询,但我无法弄清楚如何做到这一点。不过,我希望这是最后的手段。感谢您的帮助!
【问题讨论】:
【参考方案1】:如果你想标记你将在查询本身中使用标准 SQL,你可以像这样构建它:
query = """#standardSQL
SELECT count(distinct serial) FROM `dataworks-356fa.FirebaseArchive.test2` Where (PeripheralType = 1 or PeripheralType = 2 or PeripheralType = 12) AND EXTRACT(WEEK FROM createdAt) = EXTRACT(WEEK FROM CURRENT_TIMESTAMP()) - 1 AND serial != 'null'
"""
您也可以使用的另一个选项是将创建的job
的属性use_legacy_sql
设置为False
,类似于:
job = client.run_async_query(job_name, query)
job.use_legacy_sql = False # -->this also makes the API use Standard SQL
job.begin()
【讨论】:
以上是关于无法在 python 中对 bigquery 运行标准 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
在 BigQuery 中对日期进行分组时出现 DATE_ADD 或 DATE_DIFF 错误
在 Python 中使用 BigQuery + Pandas 时无法调用 RowIterator 对象
在 BigQuery 中对具有 DateTime 值的字符串字段进行范围查询
在 BigQuery Java UDF 中对数组进行累积求和时出现问题