首页 文章

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

提问于
浏览
0

最新版本的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 回答

  • 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
    

相关问题