是否删除Google Cloud Datalab SQL模块参数中的引号?

是否删除Google Cloud Datalab SQL模块参数中的引号?,sql,google-bigquery,google-cloud-datalab,Sql,Google Bigquery,Google Cloud Datalab,datalab github repo中“SQL参数”IPython笔记本中的参数化示例(在datalab/tutorials/BigQuery/下)显示了如何更改WHERE子句中测试的值 %%sql --module get_data SELECT * FROM [myproject:mydataset.mytable] WHERE $query 但是,这种语法似乎总是在参数周围插入引号。当我传递的参数不仅仅是一个简单的值时,这会中断: import gcp.bigquery

datalab github repo中“SQL参数”IPython笔记本中的参数化示例(在datalab/tutorials/BigQuery/下)显示了如何更改WHERE子句中测试的值

%%sql --module get_data
SELECT *
FROM
    [myproject:mydataset.mytable]
WHERE
    $query
但是,这种语法似乎总是在参数周围插入引号。当我传递的参数不仅仅是一个简单的值时,这会中断:

import gcp.bigquery as bq
query = "(bnf_code LIKE '1202%') OR (bnf_code LIKE '1203%')"
query = bq.Query(get_data, query=query)

print query.sql
这将打印一个无效的查询:

SELECT * FROM [myproject:mydataset.mytable]
WHERE "(bnf_code LIKE '1202%') OR (bnf_code LIKE '1203%')"
有没有什么方法可以插入没有用引号括起来的值


我在代码中反复使用模块,在查询参数中使用数量可变的OR子句。所以我确实需要一种方法来传递更复杂的查询

对不起,变量应该是简单的标量、表或(很快)列表,以便在子句中使用。它们不是用于表达式的。

对不起,变量是用于子句中的简单标量、表或(很快)列表。它们不适用于表达式。

不可能将不带引号的参数传递给SQL模块,但可以使用字符串形式的直接SQL创建
datalabs.data.SQLStatement
。这样,您就可以使用自己的Python样式占位符来替换您认为合适的值:

import datalab.data._sql_statement as bqsql
statement = bqsql.SqlStatement(
    "SELECT some-field FROM %s" % '[your-instance:some-table-name]')
query = bq.Query(statement)

我不知道他们是否对占位符或笔记本中的命令处理做了特殊的处理,但是。。。好吧,我在我的(公认有限的)探索中没有看到任何这一点。

将不带引号的参数传递给SQL模块是不可能的,但是可以用字符串形式的直接SQL创建一个
datalabs.data.SQLStatement
。这样,您就可以使用自己的Python样式占位符来替换您认为合适的值:

import datalab.data._sql_statement as bqsql
statement = bqsql.SqlStatement(
    "SELECT some-field FROM %s" % '[your-instance:some-table-name]')
query = bq.Query(statement)

我不知道他们是否对占位符或笔记本中的命令处理做了特殊的处理,但是。。。嗯,在我的(公认有限的)洞穴探险中,我没有看到任何这样的情况。

是否有相关的数据实验室公共问题跟踪器,可以在其中提交功能请求?就如何将变量模板化为查询而言,这似乎是Datalab的一个问题,而不是BigQuery的问题,对不对?加上-1,因为有一个问题跟踪程序可以将其归档。@Pentium10我将查询设置为Python字符串而不是子模块,然后用
bq.query(query\u string)调用它,从而解决了这个问题。@Pentium10
不带变量。不过,由于这是有意为之,提交一份文件不会有多大效果。Richard,列表将在下一版本中得到支持(代码已经在主版本中)。是否有相关的Datalab公共问题跟踪程序,可以在其中提交功能请求?就如何将变量模板化为查询而言,这似乎是Datalab的一个问题,而不是BigQuery的问题,对不对?加上-1,因为有一个问题跟踪程序可以将其归档。@Pentium10我将查询设置为Python字符串而不是子模块,然后用
bq.query(query\u string)调用它,从而解决了这个问题。@Pentium10
不带变量。不过,由于这是有意为之,提交一份文件不会有多大效果。Richard,下一版本将支持列表(代码已经在主版本中)。