【问题标题】:BigQuery: Coalesce converts TIMESTAMP to INTEGERBigQuery:Coalesce 将 TIMESTAMP 转换为 INTEGER
【发布时间】:2016-03-24 19:54:30
【问题描述】:

我遇到了 COALESCE 函数的问题,当应用于 TIMESTAMP 字段时,它会将其转换为 INTEGER 这是一个例子

SELECT 
   c_date AS c_date,
   COALESCE(nd.c_datetime, od.c_datetime) AS c_datetime,
   COALESCE(nd.c_timestamp, od.c_timestamp) AS c_timestamp 
FROM [table1] as nd 
LEFT JOIN [table2] as od ON  nd.c_date = od.c_date ";

虽然两个表中的所有 3 个字段都具有 TIMESTAMP 类型,但查询将返回第一个作为 TIMESTAMP,但所有其他字段都将变为 INTEGER。这是预期的行为吗?

附:我找到了解决方法

 USEC_TO_TIMESTAMP(COALESCE(nd.c_datetime, od.c_datetime)) AS c_datetime

但很奇怪,简单的合并需要特殊操作来保留类型

附言我知道谷歌的人正在阅读 stackoverflow。作业 ID 是 job_vM_1Kxo4NBp5Ae3VmLmAI-4OXpo 。希望对你有帮助!

【问题讨论】:

  • 这绝对不是特定于您给定的 SELECT 作业。尝试SELECT CURRENT_TIMESTAMP(), COALESCE(CURRENT_TIMESTAMP(), NULL) 查看您描述的行为。所以它可能是一个错误
  • 我认为,去年为分析功能修复了类似的错误stackoverflow.com/questions/31966756/… cc: @moshapasumanski
  • @MikhailBerlyant 是的,该查询也重现了这种行为。希望这个错误可以尽快修复。
  • 已确认错误 - 为了获得更好的跟踪,如果您将其提交到 code.google.com/p/google-bigquery 会有所帮助
  • @MoshaPasumansky 完成,第 479 期

标签: google-bigquery


【解决方案1】:

结束循环 - 这是在跟踪器中报告为 https://code.google.com/p/google-bigquery/issues/detail?id=479 的旧版 SQL 中的一个错误,并且由于此错误已得到修复,因此 COALESCE 保留了 TIMESTAMP 类型。

【讨论】:

    猜你喜欢
    • 2013-08-08
    • 2011-05-01
    • 1970-01-01
    • 2020-12-15
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多