【问题标题】:BigQuery DATE_DIFF Error: Encountered " <STRING_LITERAL>BigQuery DATE_DIFF 错误:遇到“<STRING_LITERAL>
【发布时间】:2019-01-04 04:11:45
【问题描述】:

我正在尝试 BigQuery 标准 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/docs/reference/standard-sql/enabling-standard-sql)]

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

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

【问题讨论】:

  • 错误提示尝试使用标准 SQL。您也可以切换到新的 UI,它默认具有标准 SQL。
  • 我正在使用我引用的 Google 标准 SQL 页面中的确切代码(通过复制粘贴):“标准 SQL 函数和运算符”cloud.google.com/bigquery/docs/reference/standard-sql/…。如何切换到新 UI?

标签: sql google-bigquery bigquery-standard-sql


【解决方案1】:

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

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

【讨论】:

  • 您应该尝试使用答案中的代码 - 不仅是第二行,而且包括第一行在内的两行看起来像注释 - 但实际上是查询的重要部分,因为它控制哪种 SQL 方言将生效!所以再试一次!
  • 当然。你是老板,由你决定接受哪个答案:o)很快就会将来自 cmets 的那些额外措辞添加到我的答案中
【解决方案2】:

尽管 cmets 已经为您的问题提供了答案,而 Mikhail 在另一个答案中已经提供了答案,但让我与您分享一个完整的答案,希望能解决您的所有疑问:

错误信息

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

更改使用的查询语言

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

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

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

【讨论】:

  • 感谢您完整而全面的回答。我对你和米哈伊尔的两个答案都投了赞成票,但选择了你的答案,因为它提供了更多信息。
  • 谢谢@Grokify 我很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多