我一直试图从python对bq运行查询,但是它返回给我;
400 Syntax error: Unexpected end of statement at [1:3585]
不好的是,它给了我一个我无法真正找到的行号。
这是我使用CTE向表插入的唯一查询。
Insert `x.y.z` (Date, Dollars)
WITH data AS (Select Date, Dollars FROM `x.y.temp`
SELECT Date, Dollars from data
该查询在BQ UI中工作正常,但只是从api遇到此问题。
答案 0 :(得分:2)
从Python客户端库发送查询时,绝对支持CTE,但是使用的助手或自定义代码之一可能存在格式问题。
收集有关格式化的信息,以下是更全面的故障排除指南,对所有人都有好处:
检查查询中的UseLegacySql
标志是否未设置,因为该方言不支持WITH /公用表表达式(CTE)。此外,即使您使用#StandardSQL
查询前缀,其他设置也可能会覆盖此前缀(当两个不匹配变得怪异但并不总是抛出错误时的行为)。
返回的错误位置不仅仅是行号,而是line:position。因此1:3585
表示第1行,字符/位置3585。请记住,这就是库正在生成的查询中的位置,但是可以帮助您找到问题所在。
查看实际生成的查询。如果您具有项目级别的访问权限,则可以在用户界面中的“查询历史记录”下执行此操作,然后选择此页面顶部的“项目历史记录”选项卡。 (如果正在进行很多事情,则可能需要按用户或查询文本进行过滤。)请注意,您还可以从查询详细信息中查看它是否作为Legacy SQL运行。还要注意避免从控制台UI中运行测试,该测试也会显示在控制台UI中,但会以用户身份显示(而您的脚本可能会以服务帐户或其他经过身份验证的用户身份显示)
如果您无权访问项目查询以查看错误和生成的SQL,则可以在发送查询后通过检索.query
属性来获取查询文本。根据{{1}}文档,这看起来像google-cloud-python
。从那里,粘贴到文本编辑器中,您应该能够看到生成错误的位置。错误发生在查询的3K上的第1行上,这可能表示某些文件格式不正确。
最好能找到它!