BigQuery DATE_DIFF错误:遇到“ <string_literal>

时间:2018-07-27 05:09:37

标签: sql google-bigquery standard-sql

我正在尝试从BigQuery Standard SQL文档中查询以下查询:

SELECT DATE_DIFF(DATE '2010-07-07', DATE '2008-12-25', DAY) as days_diff;

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#date_diff

但是,我从用户界面收到以下错误:

  

错误:在第1行第23列遇到了“” \'2010-07-07 \“”“,期望:”)“ ... [尝试使用标准SQL(https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql)]

enter image description here

这是一个简单的副本,可以从文档复制并粘贴到Web UI查询编辑器中。

关于如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:3)

下面分别是BigQuery旧版SQL和标准SQL的示例

请确保您尝试按以下答案中的代码进行操作-不仅是第二行,还包括2(both)行,包括看起来像注释的第一行-但实际上是查询的重要部分,因为它控制着哪个SQL方言将生效!

#legacySQL
SELECT DATEDIFF(DATE('2010-07-07'), DATE('2008-12-25')) AS days_diff

#standardSQL
SELECT DATE_DIFF(DATE '2010-07-07', DATE '2008-12-25', DAY) AS days_diff   

都返回如下结果

Row days_diff    
1   559     

理想情况下,您应该考虑migrating to Standard SQL

答案 1 :(得分:2)

尽管您的问题的注释中已经提供了答案,而米哈伊尔(Mikhail)在其他答案中已经提供了答案,但让我与您分享一个完整的答案,希望可以解决您的所有疑问:

错误消息

如您得到的错误消息中所述[Try using standard SQL (...)]。您正在尝试使用旧版SQL(而是使用DATEDIFF function)运行此示例。您实际上是对的,您正在运行文档中提供的完全相同的查询,但是这里的问题是您使用的文档适用于Standard SQL(BigQuery中的首选查询语言),而您使用的是Legacy SQL(旧用户界面中的默认语言,即您所使用的语言。)

更改正在使用的查询语言

首先,我想指出使用标准SQL而不是传统SQL的重要性,因为前者增加了新功能,并且是当前建议与BigQuery一起使用的语言。您可以在the documentation中看到整个比较列表,但是如果您从BigQuery开始,我将直接使用Standard SQL。

现在,需要澄清的是,为了使用标准SQL而不是旧版SQL,您可以看看the documentation here,但让我总结一下为您提供的可用选项:

  • 在BigQuery用户界面中,您可以在内部切换 Use legacy SQL 选项 显示选项菜单。如果选中此选项,则将使用 旧版SQL;否则,您将使用标准SQL。
  • 您可以在查询中使用前缀,例如#standardSQL#legacySQL,这些前缀将忽略默认配置,并使用通过此选项指定的语言。作为如何使用它的示例,请查看Mikhail的另一个答案,他与您分享了一些使用前缀来标识所用语言的示例。您应该在用户界面中复制完整的查询(包括前缀),然后您会看到它成功运行。
  • 最后,按照Elliott的建议,您可以使用最近在Beta访问中发布的新UI。您可以通过此链接https://console.cloud.google.com/bigquery而非以前使用的旧链接https://bigquery.cloud.google.com进行访问。您也可以在另一个链接页面中找到有关the new BigQuery Web UI的更多信息。