欢迎投稿

今日深度:

kettle日期参数使用

kettle日期参数使用


在使用日期类型参数进行比较大小的时候,务必保证传递的日期类型参数和比较的类型保持一致。

在ETL过程中使用日期类型的参数很是常见,例如SQL如下:

SELECT b.display_name,
a.company_id,
date_format(max(first_send_notice_date), ‘%Y-%m’) accMonth,
count(*) totalReport,
sum(CASE WHEN a.takeoff_time > ‘1980’ THEN 1 ELSE 0 END) removed ,
sum(CASE WHEN a.takeoff_time > ‘1980’
AND a.takeoff_time < a.first_send_notice_date + interval 1 DAY THEN 1 ELSE 0 END) 1DAY ,
sum(CASE WHEN a.takeoff_time >=a.first_send_notice_date + interval 1 DAY
AND a.takeoff_time < a.first_send_notice_date + interval 3 DAY THEN 1 ELSE 0 END) 2_3day ,
sum(CASE WHEN a.takeoff_time >=a.first_send_notice_date + interval 3 DAY
AND a.takeoff_time < a.first_send_notice_date + interval 5 DAY THEN 1 ELSE 0 END) 4_5day ,
sum(CASE WHEN a.takeoff_time >=a.first_send_notice_date + interval 5 DAY
AND a.takeoff_time < a.first_send_notice_date + interval 7 DAY THEN 1 ELSE 0 END) 6_7day,
sum(CASE WHEN a.takeoff_time >=a.first_send_notice_date + interval 7 DAY THEN 1 ELSE 0 END) 7DAY,
current_timestamp ETL_DTE
FROM FACT_matchedVideo a
JOIN DIM_trackingWebsite b ON a.trackingWebsite_id = b.trackingWebsite_id
WHERE a.first_send_notice_date >= date_format(‘FIRSTDAYOFLASTMONTH′,‘ANDa.firstsendnoticedate{FIRSTDAYOFCURMONTH}’, ‘%Y-%m-%d’)
AND a.count_send_notice> 0
AND a.hide_flag = 2
AND b.website_type in(‘ugc’,’hybrid’)
GROUP BY 1, 2

其中where过滤条件之一为:

a.first_send_notice_date >= date_format(‘${FIRSTDAYOFLASTMONTH}’, ‘%Y-%m-%d’)

在参数传递过来的时候,kettle的日期参数传递过来的时候,日期格式为:

‘yyyy-MM-dd HH:mm:ss’ 形式为 ‘2015/05/01 00:00:00’

而数据库里面的日期格式为’yyyy-MM-dd HH:mm:ss’

那么两者比较的话就会出错,如下面的错误:

select ‘2015/05/01 00:00:00’ > ‘2015-05-02 00:00:00’;
+———————————————–+
| ‘2015/05/01 00:00:00’ > ‘2015-05-02 00:00:00’ |
+———————————————–+
| 1 |
+———————————————–+

www.htsjk.Com true http://www.htsjk.com/DB2/20443.html NewsArticle kettle日期参数使用 在使用日期类型参数进行比较大小的时候,务必保证传递的日期类型参数和比较的类型保持一致。 在ETL过程中使用日期类型的参数很是常见,例如SQL如下: SELECT b....
评论暂时关闭