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

Remove quote marks in Google Cloud Datalab SQL module parameters?

数据实验室 github 存储库中 "SQL Parameters" 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 子句。所以我确实需要一种方法来传递更复杂的查询。

抱歉,变量是用于 IN 子句的简单标量、表格或(很快)列表。它们不适用于表达式。

将不带引号的参数传递给 SQL 模块 是不可能的,但是可以直接创建一个 datalabs.data.SQLStatement SQL 以字符串形式。这样您就可以使用自己的 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)

我不知道他们是否对占位符或笔记本中的命令处理做了什么特别的事情,但是......好吧,我在我的(公认的有限的)洞穴探险中没有看到任何这些。