1

我是使用 bq(Big Query 命令行实用程序)的新手。我有一个更复杂的 SQL 子句,不幸的是在 SQL 语句中同时包含撇号和引号字符。由于这两个字符都在 SQL 语句中,我正在寻找它们的替代品,否则其中一个或另一个将被解释为“查询结束”分隔符。

下面是我尝试运行的查询,它在 Big Query html 界面上运行良好,但使用 bq 命令行实用程序时效果不佳。关于替换撇号或引号以使此东西运行的建议?是否有任何选项可以将文件内容传递给 bq 查询命令,以便可以将复杂查询存储在文件中?(也更容易在文件中阅读而不是挤在一行上)。

bq 查询 'SELECT regexp_extract(meta, r'\"bldid\":\"(.*?)\"') as bldid FROM stuff.201308010000 LIMIT 10'

[编辑] 在玩了这个之后,看起来这是一个简单的修复。如果引号用于 BEG 和 END 分隔符,则查询有效。

bq 查询 "SELECT regexp_extract(meta, r'\"bldid\":\"(.*?)\"') as bldid FROM stuff.201308010000 LIMIT 10"

不知道为什么这不适用于撇号来标记查询的开始和结束。

4

2 回答 2

1

这是一个 bash 问题,而不是 BigQuery 问题:单引号在单引号字符串中是“不可引用的”。Bash 在 BigQuery 看到之前处理该字符串。

看看如何在单引号字符串中转义单引号?.

“用单引号括起来的字符会保留引号内每个字符的字面值。单引号可能不会出现在单引号之间,即使前面有反斜杠也是如此。” http://www.gnu.org/software/bash/manual/bashref.html#Single-Quotes

于 2013-08-28T05:24:56.760 回答
0

尝试只使用双引号,但转义它们。您还需要再转义 \ 一次:

bq query "SELECT regexp_extract(meta, r\"\\\"bldid\\\":\\\"(.*?)\\\"\") as bldid FROM stuff.201308010000 LIMIT 10;"
于 2013-08-28T15:41:58.333 回答