请详细解释这段代码with a0 as ( select case when prodlinename in ('冷柜', '冰箱') then '制冷' when prodlinename in ('商空') then '楼宇' when prodlinename in ('家空') then '空调' else prodlinename end industry, mouldno, cast(avgintervals as double) as avgintervals, pt from dl_yf_seq.tt_hmzy_haier_mould_iot_fenqu where avgintervals is not null and avgintervals not in('', '0', '0.0') and prodlinename in('冷柜', '冰箱', '商空', '家空', '厨电', '洗涤', '热水器') and substr(pt, 1, 4) = from_unixtime(unix_timestamp(), 'yyyy') ), a1 as ( select model_code, cast(ratedcycle as double) as ratedcycle from dh_yf.dim_udo_model_dim_asset where ratedCycle is not null and ratedCycle not in('', '/', '0', '0.0') ), a2 as ( select industry, mouldno, avgintervals, b.ratedcycle, case when avgintervals<= ratedCycle then 1 else 0 end db, pt from a0 a left join a1 b on a.mouldno = b.model_code ), a3 as ( select pt, industry, count(mouldno) as kj_module_num, sum(db) as db_module_num from a2 group by pt, industry ) insert OVERWRITE table dh_yf.tg_dim_udo_model_scxldb select pt, industry, cast(kj_module_num as string) kj_module_num, cast(db_module_num as string) db_module_num, from_unixtime(unix_timestamp(),'yyyyMMdd') as dh_etl_date from a3
时间: 2024-02-14 09:33:43 浏览: 97
API 510-2022 E1A0-2023 Pressure Vessel Inspection Code, In-ser
这段代码是一个 SQL 查询语句,用于从表 dl_yf_seq.tt_hmzy_haier_mould_iot_fenqu 和 dh_yf.dim_udo_model_dim_asset 中获取数据,然后将数据处理后插入到 dh_yf.tg_dim_udo_model_scxldb 表中。
首先,使用子查询 a0 对表 dl_yf_seq.tt_hmzy_haier_mould_iot_fenqu 进行筛选,将 prodlinename 字段中的值为 '冷柜' 和 '冰箱' 的行的 industry 字段设为 '制冷',将 prodlinename 字段中的值为 '商空' 的行的 industry 字段设为 '楼宇',将 prodlinename 字段中的值为 '家空' 的行的 industry 字段设为 '空调',其余行的 industry 字段保持不变。然后从筛选后的结果中选取 mouldno、avgintervals 和 pt 字段。
接着,使用子查询 a1 对表 dh_yf.dim_udo_model_dim_asset 进行筛选,选取 model_code 和 ratedcycle 字段,并将 ratedcycle 字段中的非空非零值转换为 double 类型。
然后,使用子查询 a2 对 a0 和 a1 的结果进行左连接,选取 industry、mouldno、avgintervals、b.ratedcycle 和 pt 字段,并增加一个名为 db 的字段。如果 avgintervals 小于等于 ratedCycle,则 db 字段为 1,否则为 0。
最后,使用子查询 a3 对 a2 的结果进行聚合操作,选取 pt、industry、count(mouldno) 和 sum(db) 字段,并将结果插入到表 dh_yf.tg_dim_udo_model_scxldb 中,同时将 dh_etl_date 字段设为当前日期。
总体来说,这段代码的目的是为了统计不同行业、不同模具编号的设备的开机率和达标率。
阅读全文