Hive错误“函数IF的第二个和第三个参数应该具有相同的类型,但它们是不同的:”timestamp“和”string“”

时间:2017-06-30 15:50:09

标签: hive

我在Hive中收到以下错误:

“函数IF的第二个和第三个参数应该具有相同的类型,但它们是不同的:”timestamp“和”string“

以下是查询:

 
with cte_fix_on_time AS (

SELECT 
	*, 
 	SPLIT(from_unixtime(unix_timestamp(CAST(timestamp AS STRING),'yyyyMMddHHmmss'),'yyyy-MM-dd HH:mm:ss'),' ')[0] as bl_date,
	SPLIT(from_unixtime(unix_timestamp(CAST(timestamp AS STRING),'yyyyMMddHHmmss'),'yyyy-MM-dd HH:mm:ss'),' ')[1] as bl_time
FROM 
	table
)

SELECT 
	*,
	SUM(baseline_visits) OVER(ORDER BY locale, CAST(timestamp AS INT) ROWS BETWEEN CURRENT ROW AND 4 FOLLOWING) as bl_ad_visits,
	IF(CAST(CONCAT(bl_date,' ',bl_time) AS STRING)<'2016-03-08 00:00:00'),to_utc_timestamp(CAST(CONCAT(bl_date,' ',bl_time) AS STRING), 'CET'),CAST(CONCAT(bl_date,' ',bl_time) AS STRING)) as utc_timestamp,
	SPLIT(CAST(IF((CAST(CONCAT(bl_date,' ',bl_time) AS STRING)< '2016-03-08 00:00:00'),to_utc_timestamp(CAST(CONCAT(bl_date,' ',bl_time) AS STRING), 'CET'),CAST(CONCAT(bl_date,' ',bl_time) AS STRING)) as STRING),' ')[0] as utc_date,
	SPLIT(CAST(IF((CAST(CONCAT(bl_date,' ',bl_time) AS STRING)< '2016-03-08 00:00:00'),to_utc_timestamp(CAST(CONCAT(bl_date,' ',bl_time) AS STRING), 'CET'),CAST(CONCAT(bl_date,' ',bl_time) AS STRING)) as STRING),' ')[1] as utc_time
FROM 
	cte_fix_on_time

非常感谢任何帮助

1 个答案:

答案 0 :(得分:0)

你的第二个参数(“then”部分)是一个时间戳:

to_utc_timestamp(CAST(CONCAT(bl_date,' ',bl_time) AS STRING)

你的第三个参数(“else”部分)是一个字符串:

CAST(CONCAT(bl_date,' ',bl_time) AS STRING)

您需要在第三个参数上使用to_utc_timestamp或在第二个参数上停止使用它。