首页 文章

BigQuery DATE_DIFF错误:遇到“<STRING_LITERAL>

提问于
浏览
1

我正在尝试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收到以下错误:

错误:在第1行第23列遇到“”\“2010-07-07 \”“” . 期待:“)”... [尝试使用标准SQL(https://cloud.google.com/bigquery /文档/参考/标准-SQL /启用标准-SQL)]

enter image description here

这是从doc到Web UI查询编辑器的简单复制和粘贴 .

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

2 回答

  • 2

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

    ERROR MESSAGE

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

    CHANGE THE QUERY LANGUAGE IN USE

    首先,我想说明使用标准SQL而不是旧版SQL的重要性,因为前者添加了新的功能,并且是当前推荐的与BigQuery一起使用的语言 . 您可以在the documentation中看到整个比较列表,但如果您从BigQuery开始,我会立即使用标准SQL .

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

    • 在BigQuery UI中,您可以在“显示选项”菜单中切换“使用旧版SQL”选项 . 如果标记了此选项,您将使用旧版SQL;如果不是,您将使用标准SQL .

    • 您可以在查询中使用前缀,例如 #standardSQL#legacySQL ,这将忽略默认配置并使用您使用此选项指定的语言 . 有关如何使用它的示例,请查看Mikhail的其他答案,他与您分享了几个使用前缀来识别正在使用的语言的示例 . 您应该在UI中复制完整的查询(包括前缀),您将看到它成功运行 .

    • 最后,根据Elliott的建议,您可以使用刚刚在Beta版访问中发布的新UI . 您可以通过此链接https://console.cloud.google.com/bigquery而不是您目前使用的旧链接https://bigquery.cloud.google.com来访问它 . 您也可以在此其他链接页面中找到有关the new BigQuery Web UI的更多信息 .

  • 3

    下面分别是BigQuery Legacy SQL和Standard SQL的示例

    确保你在下面的答案中尝试代码 - 不仅仅是第二行而是2(两行)行,包括看起来像注释的第一行 - 但实际上是查询的重要部分,因为它控制哪种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

相关问题