bigquery api是否通过python支持CTE?

时间:2019-07-05 16:58:43

标签: google-bigquery

我一直试图从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遇到此问题。

1 个答案:

答案 0 :(得分:2)

从Python客户端库发送查询时,绝对支持CTE,但是使用的助手或自定义代码之一可能存在格式问题。

收集有关格式化的信息,以下是更全面的故障排除指南,对所有人都有好处:

  1. 检查查询中的UseLegacySql标志是否未设置,因为该方言不支持WITH /公用表表达式(CTE)。此外,即使您使用#StandardSQL查询前缀,其他设置也可能会覆盖此前缀(当两个不匹配变得怪异但并不总是抛出错误时的行为)。

  2. 返回的错误位置不仅仅是行号,而是line:position。因此1:3585表示第1行,字符/位置3585。请记住,这就是库正在生成的查询中的位置,但是可以帮助您找到问题所在。

  3. 查看实际生成的查询。如果您具有项目级别的访问权限,则可以在用户界面中的“查询历史记录”下执行此操作,然后选择此页面顶部的“项目历史记录”选项卡。 (如果正在进行很多事情,则可能需要按用户或查询文本进行过滤。)请注意,您还可以从查询详细信息中查看它是否作为Legacy SQL运行。还要注意避免从控制台UI中运行测试,该测试也会显示在控制台UI中,但会以用户身份显示(而您的脚本可能会以服务帐户或其他经过身份验证的用户身份显示)

  4. 如果您无权访问项目查询以查看错误和生成的SQL,则可以在发送查询后通过检索.query属性来获取查询文本。根据{{​​1}}文档,这看起来像google-cloud-python。从那里,粘贴到文本编辑器中,您应该能够看到生成错误的位置。错误发生在查询的3K上的第1行上,这可能表示某些文件格式不正确。

最好能找到它!