【问题标题】:Unable to run a standardSQL query to bigquery in python无法在 python 中对 bigquery 运行标准 SQL 查询
【发布时间】: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的变体,我也愿意切换我的其他查询,但我无法弄清楚如何做到这一点。不过,我希望这是最后的手段。感谢您的帮助!

【问题讨论】:

    标签: python google-bigquery


    【解决方案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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      • 2018-12-12
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 2019-03-03
      相关资源
      最近更新 更多