无法在Python中运行标准的大数据查询

2024-05-29 05:08:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过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不会将第二行上的任何内容作为查询读取。在

^{pr2}$

Im正在运行的查询选择上周内生成的值。如果有一个不需要使用standardsql的变体,我也愿意切换我的其他查询,但我还没有找到如何做到这一点。不过,我宁愿这是最后的手段。谢谢你的帮助!在


Tags: orandfromclienttableserialjobextract
1条回答
网友
1楼 · 发布于 2024-05-29 05:08:20

如果要标记将在查询本身内部使用标准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,类似于:

^{pr2}$

相关问题 更多 >

    热门问题