BigQuery中存储含换行与引号的查询字符串语法错误解决方法
问题描述
我尝试将编译后的代码(包含大量换行的完整查询语句)存储到BigQuery的表中,但当查询语句以带引号的字符串结尾时,无法生成完整字符串。示例代码如下:
select 'this is a string', '''this is the string I am not able to store where field = 'string''''
执行时出现错误:
Syntax error: Unclosed string literal at.
我曾考虑检查字符串是否以引号结尾并移除,但这样会导致查询语句不完整,请问该如何解决这个问题?
解决方法
在BigQuery中,用三重单引号包裹多行字符串时,需遵循两个核心规则:
- 字符串内部的单引号必须用两个连续单引号转义
- 若字符串本身以单引号结尾,要在结尾额外加一个单引号,区分内容里的引号与闭合用的三重引号
针对你的示例,修正后的代码如下:
select 'this is a string', '''this is the string I am not able to store where field = ''string'''''
具体解释
- 原语句里的
'string'改为''string'',让BigQuery识别这是字符串内容的一部分,而非字符串的闭合标记 - 结尾的
'''''实际拆解为:字符串的最后一个单引号 + 三重闭合引号('+'''),这样BigQuery能准确判断字符串的结束位置,不会抛出未闭合的语法错误
如果不想用三重单引号,也可以尝试用双引号包裹整个字符串,但需要先执行SET QUOTED_IDENTIFIER OFF;(默认是开启状态),不过这种方式处理多行字符串不如三重单引号直观,更推荐前者。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

