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_idproject.db_id 为关联字段。

4. project 子查询

该子查询用于提取 dim_pub_simba_project 维表中的数据,并进行以下操作:

  • 去重: 由于存在一个 db 被多个 project 使用的情况,因此需要对 dim_pub_simba_project 表进行去重操作,保留每个 db 最新的 project 信息。
  • 筛选: 只筛选出当前日期,db_id 不为空,且 deleted=0 的数据。

5. a 的含义

aproject 子查询中一个子查询的别名,用来引用该子查询的结果集。这个子查询对 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录