首页 > 解决方案 > BigQuery @run_date 用作不同的类型

问题描述

@run_date我有一个使用BigQuery中的参数的预定查询。

SELECT
  @run_date AS run_date,
  timestamp,
  event
FROM
  `ops-data.usage.full_user_dataset`
WHERE
  DATE(timestamp) < @run_date

timestamp是类型TIMESTAMP

我无法安排它 - 安排选项在新 UI 中显示为灰色,并且在经典 UI 中不可用(它说它需要有效的 SQL)。如果我尝试运行查询,则会收到错误消息Undeclared parameter 'run_date' is used assuming different types (DATE vs INT64) at [2:3]

在尝试了各种事情之后,我能够安排下面的查询。这个想法是强制 BigQuery 将 @run_date 视为日期而不更改它

SELECT
  DATE_SUB(@run_date, INTERVAL 0 DAY) AS run_date,
  timestamp,
  event
FROM
  `ops-data.usage.full_user_dataset`
WHERE
  DATE(timestamp) < @run_date

为什么会发生此错误,为什么修复有效?

标签: google-bigquery

解决方案


我认为这是一个错误@run_date,下面的解决方法应该对你有用,直到它被修复。

DECLARE run_date DATE DEFAULT @run_date;

SELECT
  run_date,
  timestamp,
  event
FROM
  `ops-data.usage.full_user_dataset`
WHERE
  DATE(timestamp) < run_date

顺便说一句,由于解决方法使用脚本并且无法设置目标表,因此如果您确实需要目标表,则必须将其编写为:

CREATE OR REPLACE TABLE <yourDestinationTable>
AS SELECT ... -- your query

推荐阅读