BigQuery查询在视图中不起作用

时间:2016-06-28 10:50:34

标签: google-bigquery

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

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. 它引用来自另一个项目的表,然后是视图所在的位置。但是,我们已经做了很多次没有问题
  3. Google的某人是否可以查看职位ID?

1 个答案:

答案 0 :(得分: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返回INTEGER,而不是TIMESTAMP。
  2. DATE_ADD期望参数类型为TIMESTAMP。
  3. 您可以使用UTC_USEC_TO_DAY将调用包装到USEC_TO_TIMESTAMP,以将参数转换为类型TIMESTAMP,如下所示: TIMESTAMP(DATE_ADD(USEC_TO_TIMESTAMP(UTC_USEC_TO_DAY(CURRENT_DATE())), -15, "day"))

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

    另外,我们需要确保TABLE_DATE_RANGE的时间戳评估中出现的错误返回比“连接错误”更有用的错误。