【问题标题】:BigQuery query doesn't work inside a viewBigQuery 查询在视图中不起作用
【发布时间】:2016-06-29 02:36:43
【问题描述】:

当我从我创建的视图中选择时,我会不时收到以下错误,但并非总是如此:

query: Timestamp evaluation: connection error. (error code: invalidQuery)
Job ID  vex-custom:bquijob_59705b02_155966ddc5f
Start Time  Jun 28, 2016, 11:53:50 AM
End Time    Jun 28, 2016, 11:53:50 AM

单独运行查询效果很好。

这个查询有两点特别之处:

  1. 它使用 TABLE_DATE_RANGE
  2. 它引用来自另一个项目的表,然后是视图所在的位置。但我们已经多次这样做了,没有任何问题

Google 的人可以检查工作 ID 吗?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    我检查了您的查询的内部详细信息。您失败的查询引用的视图对TIMESTAMP 函数进行了一些有问题的调用。这是一个例子:

    SELECT * FROM TABLE_DATE_RANGE([...], TIMESTAMP(DATE_ADD(UTC_USEC_TO_DAY(CURRENT_DATE()), -15, "day")), CURRENT_TIMESTAMP())
    

    具体来说,对TIMESTAMP(DATE_ADD(UTC_USEC_TO_DAY(CURRENT_DATE()), -15, "day")) 的调用出错,因为:

    1. UTC_USEC_TO_DAY 返回一个整数,而不是时间戳。
    2. DATE_ADD 需要一个 TIMESTAMP 类型的参数。

    您可以使用USEC_TO_TIMESTAMP 包装对UTC_USEC_TO_DAY 的调用,以将参数转换为TIMESTAMP 类型,如下所示: TIMESTAMP(DATE_ADD(USEC_TO_TIMESTAMP(UTC_USEC_TO_DAY(CURRENT_DATE())), -15, "day"))

    我们正在推出一个版本,可以更仔细地检查许多时间戳函数的预期输入类型,这就是您目前看到不一致行为的原因。这些修复可以防止某些函数返回格式错误的TIMESTAMPs 的问题,同时也使我们的行为更符合our documentation on timestamp functions


    另外,我们需要努力确保在评估 TABLE_DATE_RANGE 的时间戳时发生的错误比“连接错误”返回更多有用的错误。

    【讨论】:

    • 谢谢丹尼!确实,数据类型的杂耍再次吸引了我。也许在您的文档中添加每个函数返回值的确切数据类型也是一个好主意。现在只有一个文字示例。
    • 是的,同意我们的文档将受益于更具体的返回类型。我们已经考虑到这一点,在我们的standard SQL function documentation 中,许多函数都明确记录了它们的输入和输出类型。
    猜你喜欢
    • 2014-05-16
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多