BigQuery DATE_DIFF Error: Encountered " <STRING_LITERAL>

BigQuery DATE_DIFF Error: Encountered " <STRING_LITERAL>

我正在尝试 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

但是,我从 UI 收到以下错误:

Error: Encountered " "\'2010-07-07\' "" at line 1, column 23. Was expecting: ")" ... [Try using standard SQL (https://cloud.google.com/bigquery/docs/reference/standard-sql/enabling-standard-sql)]

这是从文档简单复制并粘贴到 Web UI 查询编辑器。

知道如何解决这个问题吗?

下面分别是 BigQuery Legacy SQL 和 Standard SQL

的示例

确保您尝试使用下面答案中的代码 - 不仅仅是第二行,而是 2(两)行,包括看起来像注释的第一行 - 但实际上是查询的重要部分,因为它控制着哪个 [=26= 】 方言会生效!

#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   

两个 returns 结果如下

Row days_diff    
1   559     

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

虽然答案已经在您的问题的评论中提供,并且 Mikhail 在另一个答案中提供了答案,但让我与您分享一个完整的答案,希望能解决您所有的疑问:

错误信息

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

更改正在使用的查询语言

首先,我想强调使用 Standard SQL 而不是 Legacy SQL 的重要性,因为前者增加了新功能,并且是当前推荐用于 BigQuery 的语言。您可以在 the documentation 中看到完整的比较列表,但如果您开始使用 BigQuery,我会直接使用标准 SQL。

现在澄清一下,为了使用标准 SQL 而不是传统 SQL,您可以查看 the documentation here,但让我总结一下可用的选项你:

  • 在 BigQuery UI 中,您可以切换 Use legacy SQL 选项 显示选项 菜单。如果标记了此选项,您将使用 遗产 SQL;如果不是,您将使用标准 SQL.
  • 您可以在查询中使用前缀,例如 #standardSQL#legacySQL,这将忽略默认配置并使用您通过此选项指定的语言。作为如何使用它的示例,请查看 Mikhail 的其他答案,他与您分享了几个使用前缀来识别所用语言的示例。您应该在 UI 中复制完整的查询(包括前缀),您将看到它成功运行。
  • 最后,按照 Elliott 的建议,您可以使用新的 UI,它最近刚刚在 Beta 访问中发布。您也可以通过此 link https://console.cloud.google.com/bigquery instead of the old link https://bigquery.cloud.google.com that you were using until now. You can find more information about the new BigQuery Web UI 在其他 linked 页面中访问它。