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 类型与文字不匹配

带有 SELECT 子查询的 BigQuery COALESCE()

BigQuery 中的联接性能缓慢

Bigquery 如果字段存在

bigquery - 保存大型查询结果

如何在 bigquery 中使用带有 JSON EXTRACT 的正则表达式