IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 离线数仓DIM层,合并维度表技巧,表和字段命名规则 -> 正文阅读

[大数据]离线数仓DIM层,合并维度表技巧,表和字段命名规则

  • 1个维度表约30个字段
    3个维度表约100个字段
CREATE EXTERNAL TABLE `ods_a_full` (
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称'
) COMMENT 'a信息'
PARTITIONED BY (`ymd` STRING);

CREATE EXTERNAL TABLE `ods_b_full` (
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称',
  `a_id` STRING COMMENT '关联a.id'
) COMMENT 'b信息'
PARTITIONED BY (`ymd` STRING);

CREATE EXTERNAL TABLE `ods_c_full` (
  `id` STRING COMMENT '主键',
  `name` STRING COMMENT '名称',
  `b_id` STRING COMMENT '关联b.id'
) COMMENT 'c信息'
PARTITIONED BY (`ymd` STRING);

  • a一对多b一对多c

    c是最细维度

    c左联b左联a

  • 左联后
    命名取最细粒度c
    前缀dim,全量维度表后缀full,拉链表后缀zip
    则全名为dim_c_full

  • 建表
    1、完全复制3个表的字段,不同表要隔开,顺序cbac表主键字段排在字段第一
    2、不同维度表的字段名会重名(例如上面都有name),对此,所有字段前缀加上源表名,如:c_b_a_
    3、注释掉所有外键
    4、添加压缩和列式存储

CREATE EXTERNAL TABLE `dim_c_full` (
  -- ods_c_full
  `c_id` STRING COMMENT '主键',
  `c_name` STRING COMMENT '名称',
  -- `c_b_id` STRING COMMENT '关联b.id'
  -- ods_b_full
  `b_id` STRING COMMENT '主键',
  `b_name` STRING COMMENT '名称',
  -- `b_a_id` STRING COMMENT '关联a.id'
  -- ods_a_full
  `a_id` STRING COMMENT '主键',
  `a_name` STRING COMMENT '名称'
) COMMENT 'c维度'
PARTITIONED BY (`ymd` STRING)
-- 列式存储和snappy压缩
STORED AS ORC
TBLPROPERTIES('orc.compress'='snappy');
  • SQL
    1、WITH AS结构
    2、JOIN结构
    3、SELECT FROM WHERE结构
WITH
c AS (
  SELECT
  FROM ods_c_full
  WHERE ymd='{ymd}'
),
b AS (
  SELECT
  FROM ods_b_full
  WHERE ymd='{ymd}'
),
a AS (
  SELECT
  FROM ods_a_full
  WHERE ymd='{ymd}'
)
SELECT
  -- ods_c_full

  -- ods_b_full

  -- ods_a_full

FROM c
LEFT JOIN b ON b.`id`=c.`b_id`
LEFT JOIN a ON a.`id`=b.`a_id`;
  • 最终sql
WITH
c AS (
  SELECT
    `id`
    ,`name`
    ,`b_id`
  FROM ods_c_full
  WHERE ymd='{ymd}'
),
b AS (
  SELECT
    `id`
    ,`name`
    ,`a_id`
  FROM ods_b_full
  WHERE ymd='{ymd}'
),
a AS (
  SELECT
    `id`
    ,`name`
  FROM ods_a_full
  WHERE ymd='{ymd}'
)
INSERT OVERWRITE TABLE dim_c_full PARTITION(ymd='{ymd}')
SELECT
  -- ods_c_full
  c.`id` AS c_id
  ,c.`name` AS c_name
  -- ods_b_full
  ,b.`id` AS b_id
  ,b.`name` AS b_name
  -- ods_a_full
  ,a.`id` AS a_id
  ,a.`name` AS a_name
FROM c
LEFT JOIN b ON b.`id`=c.`b_id`
LEFT JOIN a ON a.`id`=b.`a_id`;
  • 联表后校验

    ods_c_full表为m行,联表后dim_c_fulln

    必须要满足m=n(若n>m,则说明笛卡儿积)

如果维度表只被用1次,可以试试视图?

CREATE OR REPLACE VIEW `view_dim_c_full` (
  -- ods_c_full
  `c_id` COMMENT '主键',
  `c_name` COMMENT '名称',
  -- ods_b_full
  `b_id` COMMENT '主键',
  `b_name` COMMENT '名称',
  -- ods_a_full
  `a_id` COMMENT '主键',
  `a_name` COMMENT '名称'
) COMMENT 'c维度' AS
WITH
c AS (
  SELECT
    `id`
    ,`name`
    ,`b_id`
  FROM ods_c_full
  WHERE ymd='{ymd}'
),
b AS (
  SELECT
    `id`
    ,`name`
    ,`a_id`
  FROM ods_b_full
  WHERE ymd='{ymd}'
),
a AS (
  SELECT
    `id`
    ,`name`
  FROM ods_a_full
  WHERE ymd='{ymd}'
)
SELECT
  -- ods_c_full
  c.`id` AS c_id
  ,c.`name` AS c_name
  -- ods_b_full
  ,b.`id` AS b_id
  ,b.`name` AS b_name
  -- ods_a_full
  ,a.`id` AS a_id
  ,a.`name` AS a_name
FROM c
LEFT JOIN b ON b.`id`=c.`b_id`
LEFT JOIN a ON a.`id`=b.`a_id`;
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:49:30  更:2022-04-18 17:50:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:39:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码