BigQuery:Coalesce 将 TIMESTAMP 转换为 INTEGER
Posted
技术标签:
【中文标题】BigQuery:Coalesce 将 TIMESTAMP 转换为 INTEGER【英文标题】:BigQuery: Coalesce converts TIMESTAMP to 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
但很奇怪,简单的合并需要特殊操作来保留类型
附言我知道谷歌的人正在阅读 ***。作业 ID 是 job_vM_1Kxo4NBp5Ae3VmLmAI-4OXpo 。希望对你有帮助!
【问题讨论】:
这绝对不是特定于您给定的 SELECT 作业。尝试SELECT CURRENT_TIMESTAMP(), COALESCE(CURRENT_TIMESTAMP(), NULL)
查看您描述的行为。所以它可能是一个错误
我认为,去年为分析功能修复了类似的错误***.com/questions/31966756/… cc: @moshapasumanski
@MikhailBerlyant 是的,该查询也重现了这种行为。希望这个错误可以尽快修复。
已确认错误 - 为了获得更好的跟踪,如果您将其提交到 code.google.com/p/google-bigquery 会有所帮助
@MoshaPasumansky 完成,第 479 期
【参考方案1】:
结束循环 - 这是在跟踪器中报告为 https://code.google.com/p/google-bigquery/issues/detail?id=479 的旧版 SQL 中的一个错误,并且由于此错误已得到修复,因此 COALESCE
保留了 TIMESTAMP
类型。
【讨论】:
以上是关于BigQuery:Coalesce 将 TIMESTAMP 转换为 INTEGER的主要内容,如果未能解决你的问题,请参考以下文章
BigQuery COALESCE/IFNULL 类型与文字不匹配