在标准SQL / Tableau中转换为时间戳时出现奇怪错误

时间:2017-02-02 09:20:35

标签: sql csv google-bigquery tableau

最新版本的Tableau在连接到Google的BigQuery时已开始使用标准SQL。

我最近尝试更新一个大表,但发现尝试解析日期时似乎有错误。该表源自CSV,加载到BigQuery中进行进一步的操作。原始CSV中的日期时间列包含ISO标准日期时间格式的字符串(基本上为yyyy-mm-dd hh:mm)。这样可以节省很多烦人的操作。

但是在尝试将Tableau中的日期时间字符串转换为日期或日期时,我遇到了一堆错误。经过调查,他们似乎来自BigQuery,看起来像这样:

Error: Invalid timestamp: '2015-06-28 02:01'

我一开始认为这可能是一个Tableau问题所以我将一大块原始CSV直接加载到Tableau中,其中字符串到数据的转换效果非常好。

然后我尝试了更简单的转换版本(一年而不是完整的日期时间),但它们仍然失败了。最简单转换生成的SQL如下所示:

SELECT
  EXTRACT(YEAR
  FROM
    CAST(`Arrival_Date` AS TIMESTAMP)) AS `yr_Arrival_Date_ok`
FROM
  `some_dataset`.`some_table` `some_table`
GROUP BY
  1

错误消息中的无效时间戳总是看起来像一个完全有效的时间戳。进一步的分析表明,源表中的所有行都不会发生,偶尔也会发生。

此错误未出现在旧版本的Tableau / BigQuery中,其中旧版SQL是Tableau的默认值。所以我认为它是标准SQL的结果。

在BigQuery中投射到时间戳是否存在间歇性问题?或者这是一个Tableau问题,导致SQL格式不正确?我能做些什么呢?

1 个答案:

答案 0 :(得分:1)

如果小时和分钟也存在,则需要canonical timestamp representation中的秒部分。请尝试使用PARSE_TIMESTAMP,然后查看它是否有效:

SELECT
  EXTRACT(YEAR
    FROM
      PARSE_TIMESTAMP('%F %R', `Arrival_Date`)) AS `yr_Arrival_Date_ok`
FROM
  `some_dataset`.`some_table`.`some_table`
GROUP BY
  1