我是使用bq,Big Query命令行实用程序的新手。我有一个更复杂的SQL子句,不幸的是在SQL语句中有撇号和引号字符。由于这两个字符都在SQL语句中,我正在寻找它们的替代品,否则一个或另一个将被解释为“查询结束”分隔符。
下面是我尝试运行的查询,它在Big Query html界面上运行良好,但使用bq命令行实用程序却不是很好。更换撇号或引号以使这个东西运行的建议?是否有任何选项可以将文件内容传递到bq查询命令中,以便将复杂查询存储在文件中? (也更容易在文件中读取vs塞在一行上)。
bq查询'SELECT regexp_extract(meta,r'\“bldid \”:\“(。*?)\”')作为bldid FROM stuff.201308010000 LIMIT 10'
[编辑] 在玩了这个之后,看起来这是一个简单的修复。如果引号用于BEG和END分隔符,则查询可以正常工作。
bq查询“SELECT regexp_extract(meta,r'\”bldid \“:\”(。*?)\“')as bldid FROM stuff.201308010000 LIMIT 10”
不确定为什么这不适用于撇号来标记查询的开头和结尾。
答案 0 :(得分:1)
这是一个bash问题,不仅仅是一个BigQuery的事情:单引号在单引号字符串中是“不可引用的”。 Bash在BigQuery甚至看到之前处理字符串。
看看How to escape single-quotes within single-quoted strings?。
“用单引号括起字符可以保留引号中每个字符的字面值。单引号之间可能不会出现单引号,即使前面有反斜杠也是如此。” http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes
答案 1 :(得分:0)
尝试使用双引号,但转义它们。你还需要再次逃避\
bq query "SELECT regexp_extract(meta, r\"\\\"bldid\\\":\\\"(.*?)\\\"\") as bldid FROM stuff.201308010000 LIMIT 10;"