Hive SQL 代码解析:dwd_mt_hive_dbs_df 表数据加载
Hive SQL 代码解析:dwd_mt_hive_dbs_df 表数据加载
insert overwrite table dwd_mt_hive_dbs_df partition(ds=${yyyyMMdd,-1d})
select
dbs.db_id
, 'desc'
, db_location_uri
, name
, owner_name
, owner_type
, create_time
, project.project_id as project_id
, project.project_name as project_name
from (
select *
from ods_hivemeta_dbs_df
where ds = ${yyyyMMdd,-1d}
) dbs
left join (
-- 关联simba_project维表
select
db_id
, project_id
, project_name
from (
-- 存在1个db被多个project使用的场景,进行去重
select
ROW_NUMBER() over (partition by db_id order by project_id desc) as row_num
, db_id
, project_id
, name as project_name
from dim_pub_simba_project where ds = ${yyyyMMdd,-1d} and db_id is not null and deleted = 0
)a where row_num = 1
) project on dbs.db_id=project.db_id
代码解析
这段代码主要完成了将 ods_hivemeta_dbs_df 表数据加载到 dwd_mt_hive_dbs_df 表,并关联 dim_pub_simba_project 维表进行数据清洗和整合。
1. insert overwrite table dwd_mt_hive_dbs_df partition(ds=${yyyyMMdd,-1d})
该语句用于将数据写入到 dwd_mt_hive_dbs_df 表中,并根据日期分区进行数据加载。ds=${yyyyMMdd,-1d} 表示加载前一天的数据。
2. select ... from ods_hivemeta_dbs_df
该子查询从 ods_hivemeta_dbs_df 表中提取数据,并进行筛选,只保留前一天的数据。
3. left join ... on dbs.db_id=project.db_id
该语句用于将 dbs 子查询结果与 project 子查询结果进行关联,其中 dbs.db_id 和 project.db_id 为关联字段。
4. project 子查询
该子查询用于提取 dim_pub_simba_project 维表中的数据,并进行以下操作:
- 去重: 由于存在一个 db 被多个 project 使用的情况,因此需要对 dim_pub_simba_project 表进行去重操作,保留每个 db 最新的 project 信息。
- 筛选: 只筛选出当前日期,db_id 不为空,且 deleted=0 的数据。
5. a 的含义
a 是 project 子查询中一个子查询的别名,用来引用该子查询的结果集。这个子查询对 dim_pub_simba_project 表进行了去重处理,a 表示经过去重处理后的结果集。
总结
这段 Hive SQL 代码实现了将 ods_hivemeta_dbs_df 表数据加载到 dwd_mt_hive_dbs_df 表,并通过关联 dim_pub_simba_project 维表进行数据清洗和整合,最终得到完整的数据库信息。
希望这份解析能够帮助您更好地理解这段代码。如果您有任何问题,欢迎在评论区留言。
原文地址: https://www.cveoy.top/t/topic/oGxT 著作权归作者所有。请勿转载和采集!