实时数仓项目《二》-利用chatgpt prompt完成基础维表的创建

系列文章:

实时数仓项目《一》-实时数仓架构-CSDN博客

目录

5. ods->dwd:维表关联方案及维表加工、导入hbase

5.1 维表关联方案

5.2 退维后结果去向

5.3 创建维表:基础业务库表数据同步到hbase

5.3.1 cdc 读取mysql数据,生成临时映射表

5.3.2 将目标表映射到Hbase中,生成临时映射表

                ​​​​​​?面试题:

🧀为什么要用lookup join?

🧀为什么要把数据同步到hbase?

🧀为什么要保留一份数据在doris里面?

6. 常用术语解释

6.1 事实表

6.2 维度表

6.3 维度建模中的三种模型

星型模型

雪花模型

星座模型

                ?面试题:

🧀星型模型和雪花模型的区别


5. ods->dwd:维表关联方案及维表加工、导入hbase

5.1 维表关联方案

凡是维表是业务库中的表,关联时都可以用这个方案

先用cdc把业务库中的数据同步到hbase中,关联的时候用lookup去关联

5.2 退维后结果去向

退维后的数据落地到DWD层的存储系统Kafka中(提供给后续的流式计算),同时,也可以选择冗余一份明细数据写入doris(最近一周)

5.3 创建维表:基础业务库表数据同步到hbase

临时表以tmp_开头,后面参照DWD、DWS相应的命名规范。

名称的各部分之间以"_"(下划线)连接

DIM层命名规范

DIM层数据主要存储公共的维表和一些配置信息等,因此其命名规范如下:

1.表名命名:dim.<公共类型>_<维描述>

2.公共类型:dim代码类的维表

3.维描述:描述维度对象实体,如日期 、地域等。

举例:资源池表:dim.dim_resource_pool_info_df

 这里的flink代码可以用chatgpt prompt生成

5.3.1 cdc 读取mysql数据,生成临时映射表
这是mysql建表语句
CREATE TABLE `ums_member` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `member_level_id` bigint DEFAULT NULL,
  `username` varchar(64) DEFAULT NULL COMMENT '用户名',
  `password` varchar(64) DEFAULT NULL COMMENT '密码',
  `nickname` varchar(64) DEFAULT NULL COMMENT '昵称',
  `phone` varchar(64) DEFAULT NULL COMMENT '手机号码',
  `status` int DEFAULT NULL COMMENT '帐号启用状态:0->禁用;1->启用',
  `create_time` datetime DEFAULT NULL COMMENT '注册时间',
  `icon` varchar(500) DEFAULT NULL COMMENT '头像',
  `gender` int DEFAULT NULL COMMENT '性别:0->未知;1->男;2->女',
  `birthday` date DEFAULT NULL COMMENT '生日',
  `city` varchar(64) DEFAULT NULL COMMENT '所做城市',
  `job` varchar(100) DEFAULT NULL COMMENT '职业',
  `personalized_signature` varchar(200) DEFAULT NULL COMMENT '个性签名',
  `source_type` int DEFAULT NULL COMMENT '用户来源',
  `integration` int DEFAULT NULL COMMENT '积分',
  `growth` int DEFAULT NULL COMMENT '成长值',
  `luckey_count` int DEFAULT NULL COMMENT '剩余抽奖次数',
  `history_integration` int DEFAULT NULL COMMENT '历史积分数量',
  `modify_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_username` (`username`),
  UNIQUE KEY `idx_phone` (`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8 COMMENT='会员表';

这是映射表的示例代码:
// 建表,映射业务库mysql中的用户注册信息表
tenv.executeSql(
        " create table  ums_member_mysql(            "+
                " id bigint,                         "+
                " member_level_id bigint,            "+
                " username string,                   "+
                " phone string,                      "+
                " status int,                        "+
                " create_time timestamp(3) ,         "+
                " gender int,                        "+
                " birthday date ,                    "+
                " city string,                       "+
                " job string,                        "+
                " source_type int,                   "+
                " integration int,                   "+
                " growth int,                        "+
                " luckey_count int,                  "+
                " history_integration int,           "+
                " modify_time timestamp(3),          "+
                " primary key (username) not enforced "+
                " ) with (                          "+
                "     'connector' = 'mysql-cdc',    "+
                "     'hostname' = 'hadoop01',       "+
                "     'port' = '3306',              "+
                "     'username' = 'root',          "+
                "     'password' = '123456',          "+
                "     'database-name' = 'realtimedw',   "+
                "     'table-name' = 'ums_member'   "+
                " )                                 "
);
以上是MySQL建表语句映射为Flink的建表SQL语句。
请学习并理解它,接下来我会向你反馈一个新的mysql建表语句,请依据此帮我生成对应的Flink建表SQL语句。
~mysql DDL~
请注意:
1. 映射表名设置为在mysql表名的基础上加上在前面加上tmp_,在后面加上_mysql
2. connector,hostname,username,password,database-name和我提供的样例保持一致,table-name为刚刚我提供的mysql表名
3. primary key请帮我设置为username
4. mysql DDL中的comment不需要映射进映射表建表语句中
5. 请帮我生成完整的sql 映射代码,包括tenv.executeSql()以及双引号格式等
5.3.2 将目标表映射到Hbase中,生成临时映射表
这是mysql映射表
tenv.executeSql(
        " create table  ums_member_mysql(            "+
                " id bigint,                         "+
                " member_level_id bigint,            "+
                " username string,                   "+
                " phone string,                      "+
                " status int,                        "+
                " create_time timestamp(3) ,         "+
                " gender int,                        "+
                " birthday date ,                    "+
                " city string,                       "+
                " job string,                        "+
                " source_type int,                   "+
                " integration int,                   "+
                " growth int,                        "+
                " luckey_count int,                  "+
                " history_integration int,           "+
                " modify_time timestamp(3),          "+
                " primary key (username) not enforced "+
                " ) with (                          "+
                "     'connector' = 'mysql-cdc',    "+
                "     'hostname' = 'hadoop01',       "+
                "     'port' = '3306',              "+
                "     'username' = 'root',          "+
                "     'password' = '123456',          "+
                "     'database-name' = 'realtimedw',   "+
                "     'table-name' = 'ums_member'   "+
                " )                                 "
);

// 建表,映射hbase中的用户注册信息维表
tenv.executeSql(
        " CREATE TABLE ums_member_hbase (        "+
                "  username STRING,                      "+
                "  f ROW<                                "+
                "   id bigint,                           "+
                "  member_level_id bigint,              "+
                "  phone string,                        "+
                "  status int,                          "+
                "   create_time timestamp(3),            "+
                "  gender int,                          "+
                "  birthday date,                       "+
                "  city string,                         "+
                "  job string,                          "+
                "  source_type int,                     "+
                "  integration int,                     "+
                "  growth int,                          "+
                "  luckey_count int,                    "+
                "  history_integration int,             "+
                "  modify_time timestamp(3)>,           "+
                "   primary key(username) not enforced  "+
                " ) WITH (                               "+
                "  'connector' = 'hbase-2.2',            "+
                "  'table-name' = 'dim_ums_member',      "+
                "  'zookeeper.quorum' = 'hadoop01:2181'   "+
                " )                                      "
);

// 插入sql
tenv.executeSql(
        " INSERT INTO ums_member_hbase                                     "+
                " SELECT                                                           "+
                "    username,                                                     "+
                "    row(id,member_level_id,phone,status,create_time,              "+
                "       gender,birthday,city,job,source_type,integration,          "+
                "    growth,luckey_count,history_integration,modify_time) as f    "+
                " FROM ums_member_mysql                                            "
);

以上是MySQL映射表建表语句和Hbase的映射表语句,我们需要将从mysql中读出来的数据映射进Hbase中进行存储
请学习并理解它,接下来我会向你反馈一个新的MySQL映射表建表语句,请依据此帮我生成对应的Hbase的映射表语句,以及inser sql语句。
~mysql 映射表建表语句~
请注意:
1. 映射表名设置为在mysql表名的基础上将_mysql替换为_hbase
2. connector,zookeeper.quorum和我提供的样例保持一致,table-name为MySQL映射表建表语句中的table-name前面加上dim_
3. 此外,在这张表中,primary key对应的username为行键,需要单独声明一下,而其余的列将作为f列族中的各个列。
5. 请帮我生成完整的sql 映射代码,包括tenv.executeSql()以及双引号格式等
6. 其中primary key(usename)行键声明时不要忘记后面加上 not enforced

?面试题:

🧀为什么要用lookup join?

因为业务库中的表只会被监听一次,而用户行为则会反复发生,不适合用双流join。如果用双流join的话,就必须把数据放在状态里,但是用户行为数据量很大,系统支撑不了

🧀为什么要把数据同步到hbase?

业务库需要负载公司的业务功能,如果直接去关联业务表的话,会给业务系统的联机库带来巨大的查询压力,这是显然不合适的

🧀为什么要保留一份数据在doris里面?

doris中的数据,主要是我们做好的各类轻度聚合数据,并提供给分析师进行各类灵活实时分析;但是,只要是聚合过的数据,就一定会有信息的丢失;难么就有可能出现分析师的某些需求无法从聚合数据中计算得出,必须要查询明细数据;所以,我们才在此冗余一份明细数据写入doris,来应对这种场景;但是这种场景通常只会查询最近一段时期的数据,所以,我们在此最多保留最近近一个月的明细)

6. 常用术语解释

6.1 事实表

事实表描述业务过程的度量、以可加数据为主题,每一行代表一个可以观察的实体或事件.。例如事实表可以记录每一笔销售交易的具体细节,比如销售金额、销售数量、销售日期、销售地点等。

6.2 维度表

维度表描述事实所处的环境、面向分析,代表针对事实的一种分类。也就是说,维度表就是用来描述事实的,例如,在零售业务中,维度表可以包括产品维度、时间维度、地点维度、客户维度等,用来描述销售交易发生的环境和相关属性。,这些信息组合在一起就是维度表

6.3 维度建模中的三种模型

本项目采用星型模型

星型模型

由一个事实表和一堆维度表组成:维表只和事实表关联,维表之间没有关系;每个维表都有一个维作为主键,所有这些维的主键组合成

事实表的主键;以事实表为核心,维表围绕事实表呈星型分布;多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一

定的冗余;例如:在资源池维度表中,存在区域-西南,大区-西南大区的省份西藏,以及区域-西南,大区-西南大区的省份四川两条记录,那么区域-西南和大区-西南大区的信息分别存储了两次,即存在冗余。

雪花模型

一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展;它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 " 层次 " 区域,这些被分解的表

都连接到主维度表而不是事实表;例如将资源池维表又分解为区域,大区,省份等维表。通过最大限度地减少数据存储量以及联合较小的维表来改

善查询性能。雪花型结构去除了数据冗余。

星座模型

一个复杂的应用往往会在数据仓库中存放多个事实表,这时就会出现多个事实表共享某一个或多个维表的情况,这就是事实星座。

?面试题:

🧀星型模型和雪花模型的区别

星型模式是以事实表为中心,所有的维度表直接连接在事实表上,像星星一样。

雪花模型是对星型模型的扩展,一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,就像多个雪花连接在一起。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/489637.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C/C++笔记-make编译时需要注意的问题(编译可执行程序时链接的so出现未定义的引用)

背景 环境是这样的&#xff0c;一个复杂的C项目&#xff0c;本来在A机器上能编译过去的&#xff0c;但放到B机器上编译可执行程序时链接的so出现未定义的引用。这就有点莫名奇妙了。 原因 我这边造成这个现象的原因有以下几点&#xff1a; ① 在makefile中所有的-I&#xff…

【LeetCode热题100】230. 二叉搜索树中第K小的元素(二叉树)

一.题目要求 给定一个二叉搜索树的根节点 root &#xff0c;和一个整数 k &#xff0c;请你设计一个算法查找其中第 k 个最小元素&#xff08;从 1 开始计数&#xff09;。 二.题目难度 中等 三.输入样例 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,null,2], k 1…

newOJ 1099: 输油管道问题

目录 题目链接&#xff1a; 思路&#xff1a; 代码&#xff1a; 题目链接&#xff1a; P1099 - 输油管道问题 - New Online Judge (ecustacm.cn) 思路&#xff1a; 因为主输油管道是由东向西的&#xff0c; 而每口油井要有一条输油管道和主输油管道连接&#xff08;或南或北…

[DDD] ValueObject的一种设计落地及应用

目录 前言一、ValueObject二、设计2.1 接口2.2 单一值ValueObject2.3 单一字符串ValueObject 三、实现3.1 示例3.1.1 PhoneNumber3.1.2 SocialCreditCode 四、使用4.1 异常处理4.2 Json 反/序列化4.2.1 请求体4.2.2 HTTP接口4.2.3 用例 4.3 JPA/MyBatis4.3.1 Converter或TypeHa…

Harmony(鸿蒙)Stage模型综述

设计思想 ​Stage模型的设计&#xff0c;是为了提供给开发者一个更好的开发方式&#xff0c;更好的适用于多设备、分布式场景。 ​Stage模型的设计思想如下图所示。 ​Stage模型的设计基于如下三个出发点&#xff1a; 应用进程的有序管理 随着设备的内存越来越大&#xff0…

SM4加密是什么?SM4算法在国密HTTPS协议中的作用

SM4加密算法是一种分组密码标准&#xff0c;由国家密码管理局于2012年3月21日发布&#xff0c;相关标准为“GM/T 0002-2012《SM4分组密码算法》&#xff0c;与国际上广泛使用的AES等算法类似&#xff0c;SM4同算法样用于保护数据的机密性&#xff0c;确保信息在传输过程中不被未…

罗德与施瓦茨 RS®FSV3000 信号与频谱分析仪

R&SFSV3000 信号与频谱分析仪 罗德与施瓦茨 R&SFSV3000 信号与频谱分析仪一键即可测量&#xff0c;可以通过基于事件的操作捕获信号&#xff0c;并使用 SCPI 记录器轻松编写脚本程序&#xff0c;从而快速设置复杂测量。分析仪还具有出色的测量速度&#xff0c;可实…

学习鸿蒙基础(8)

一、BuilderParam装饰器 当开发者创建了自定义组件&#xff0c;并想对该组件添加特定功能时&#xff0c;例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法&#xff0c;将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题&#xff0c;ArkUI引…

关于「技术开发技能」课程

本课程分为三个部分&#xff0c;带您了解如何使用大模型平台、如何训练与部署大模型及生成式AI产品应用与开发&#xff0c;您将能了解各类服务的优势、功能、典型使用案例、技术概念和成本。 学习任选的两个课程模块&#xff0c;并通过测验者&#xff0c;将授予「技术开发技能…

【C++】哈希应用之布隆过滤器

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.布隆过滤器的提出…

vue基础——java程序员版(vue路由)

1、引入路由 在控制台执行vue ui&#xff0c;在插件市场里可以找到vue-router并导入。 ​ 一般情况下&#xff0c;vue会自动在main,js中引入vue-router&#xff0c;如下&#xff1a; import Vue from vue import App from ./App.vue import ./plugins/element.js import rou…

springboot整合aop实现自定义注解-方法运行异常重试demo

1.依赖引入 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId> </dependency>2.自定义注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retentio…

简易电路设计,PW1605芯片实现24V/30V/48V限流过压保护功能

一般描述 PW1605 是一款电流限制开关&#xff0c;具有可编程输入过压保护和输出电压箝位功能。集成保护 N 沟道 FET 具有极低的 RDS&#xff08;ON&#xff09; 功能&#xff0c;PW1605有助于降低正常工作期间的功率损耗。可编程软启动时间控制启动期间输出电压的压摆率。独立的…

【LV15 day14 中断处理:按键驱动程序编写】

一、什么是中断 一种硬件上的通知机制&#xff0c;用来通知CPU发生了某种需要立即处理的事件 分为&#xff1a; 内部中断 CPU执行程序的过程中&#xff0c;发生的一些硬件出错、运算出错事件&#xff08;如分母为0、溢出等等&#xff09;&#xff0c;不可屏蔽外部中断 外设发…

一、SpringBoot3 介绍

本章概要 SpringBoot3 简介系统要求快速入门入门总结 1.1 SpringBoot3 简介 此处使用 SpringBoot 版本&#xff1a;3.0.5 https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html 无论使用XML、注解、Java配置类还是他们的混合用法&#xff0…

C语言学习--字符串和整型的转换

目录 整型→字符串 方法1&#xff1a;利用‘0’将单个数字转字符 方法2&#xff1a;利用sprintf函数 方法3&#xff1a;利用itoa函数 字符串→整型 方法1&#xff1a;利用-‘0’直接转换 方法2&#xff1a;利用atoi函数 整型→字符串 整形数据变成字符串&#xff0c;最…

数据结构从入门到精通——归并排序

归并排序 前言一、归并排序的基本思想二、归并排序的特性总结三、归并排序的动画展示四、递归实现归并排序的具体代码展示五、非递归实现归并排序 前言 归并排序是一种分治策略的排序算法。它将一个序列分为两个等长&#xff08;几乎等长&#xff09;的子序列&#xff0c;分别…

百度百科审核不通过全攻略,一看就会!

在撰写百度百科词条时&#xff0c;遇到审核不通过的情况可能会让人感到沮丧。然而&#xff0c;我们并不需要灰心&#xff0c;而是要通过一些方法来改善文章质量&#xff0c;使其符合百度百科的要求。腾轩科技传媒分享百度百科审核不通过全攻略&#xff0c;一看就会&#xff01;…

Docker Stack(堆栈) 部署多服务集群,多服务编排

1、Docker Stack简介 Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建 介绍的 Docker Swarm 只能实现对单个服务的简单部署&#xff0c;于是就引出了Docker Stack。 上面我们介绍到 docker-compose&#xff1a;可以在一台机器上使用…

出差补助怎么发放更高效省心?这套攻略快看看

交补、餐补、话补等各类补助场景分散&#xff0c;无法实现一站式统筹管理。不仅如此&#xff0c;补贴核算也总是需要员工提供各类凭证&#xff0c;经过财务反复核实才能发放……出差发放补助原本是为了传递企业关怀&#xff0c;鼓励员工积极出差&#xff0c;由于发放和管理不当…
最新文章