You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BigQuery JS函数报错:未闭合字符串字面量问题求助

问题原因与解决办法

错误Syntax error: Unclosed string literal的核心原因:

  • 定义输出Schema时,用普通双引号包裹了跨多行的字符串,BigQuery标准SQL不允许普通双引号字符串直接换行,导致字符串被截断,出现未闭合情况。
  • 字符串内部的-- error here注释会被当成字符串的一部分,既破坏了Schema的格式,也加剧了换行引发的解析问题。

解决步骤

方法1:将Schema字符串合并为一行

把Schema内容写成单行,去掉换行和内部注释,确保字符串完整闭合:

SELECT type, key
FROM (
  SELECT * FROM
  js(
    (SELECT json, type FROM arboreal-vision-339901.take_home.virtual_kitchen_ubereats_hours
    ),
    -- Input columns.
    json, type,
    -- Output schema.
    "[{name: 'key', type:'string'}, {name: 'type', type:'string'}]",
     -- The function.
     "function(r, emit) { 
      x=JSON.parse(r.json)
      Object.keys(x).forEach(function(entry) {
        emit({key:entry, type:r.type});
      });     
    }"
  )
)
LIMIT 10

方法2:使用三重引号包裹多行字符串

BigQuery支持用"""(三重双引号)定义多行字符串,可保留换行格式,同时避免未闭合错误:

SELECT type, key
FROM (
  SELECT * FROM
  js(
    (SELECT json, type FROM arboreal-vision-339901.take_home.virtual_kitchen_ubereats_hours
    ),
    -- Input columns.
    json, type,
    -- Output schema.
    """[{name: 'key', type:'string'},
       {name: 'type', type:'string'}]""",
     -- The function.
     """function(r, emit) { 
      x=JSON.parse(r.json)
      Object.keys(x).forEach(function(entry) {
        emit({key:entry, type:r.type});
      });     
    }"""
  )
)
LIMIT 10

额外优化(可选)

按照JSON规范,对象的键必须用双引号包裹,可将Schema里的name和type改为双引号,避免潜在解析问题:

"[{\"name\": \"key\", \"type\":\"string\"}, {\"name\": \"type\", \"type\":\"string\"}]"

或用三重引号时直接编写:

"""[{"name": "key", "type":"string"},
   {"name": "type", "type":"string"}]"""

内容的提问来源于stack exchange,提问作者Pavan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 17:15:11