基于“Doris”的type2拉链表的Mysql实现

news2024/11/15 13:25:38

基于“Doris”的type2拉链表的Mysql实现

需求说明

基于Doris实现Type2、拉链表。主要对上游系统里的面积字段进行监控,如果发现变化则跟踪记录到维度表里。

解决方案

type2相关概念见如下链接:

SCD缓慢变化维拉链表

这里特别需要注意的是:

1、因为Doris不支持多表关联的update和delete且在type2实现时需要保证错位的endtime和starttime一致,因此直接在Doris里实现不现实。

2、该方法实际的type2实现是在mysql里,通过同步的方式再回到Doris内。

实施步骤

编写Type2存储过程

#Step1 在Mysql里编写Type2的存储过程

CREATE PROCEDURE `type2pro`()
BEGIN
  DECLARE currtime datetime default now();
	
	DROP TABLE IF EXISTS tmp_stationdate;
	CREATE TABLE `tmp_stationdate`
	(
  `src` varchar(30),
  `stationid` varchar(100) COLLATE utf8_bin DEFAULT NULL,
  `stationname` varchar(100) COLLATE utf8_bin DEFAULT NULL,
  `heatingarea` decimal(12,2) DEFAULT NULL,
  `normalheatingarea` decimal(12,2) DEFAULT NULL,
  `extraheatingarea` decimal(12,2) DEFAULT NULL,
  `constructionarea` decimal(12,2) DEFAULT NULL,
  `chargearea` decimal(12,2) DEFAULT NULL,
  `ispush` varchar(10) COLLATE utf8_bin DEFAULT NULL,
  `iscalculate` varchar(10) COLLATE utf8_bin DEFAULT NULL,
  `participationcalculation` varchar(10) COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

 -- # 插入临时表,保存之前最新的记录
 INSERT INTO tmp_stationdate
 			SELECT 'hefei',C.stationid,C.stationname,C.heatingarea,C.normalheatingarea,C.extraheatingarea,C.constructionarea,C.chargearea, 
			C.ispush,C.iscalculate,C.participationcalculation
			FROM dim_station C 
			LEFT JOIN g_station B
			ON B.uniqueid = C.stationid AND B.heatingarea = C.heatingarea AND B.normalheatingarea = C.normalheatingarea
			WHERE  (B.heatingarea IS NULL OR B.normalheatingarea IS NULL) AND C.iscurrent = 1;
 
	
    -- # 更新之前的维度变换的数据,即iscurrent=1的endtime更新为当前修改时间
	UPDATE dim_station C 
	LEFT JOIN g_station B
	ON B.uniqueid = C.stationid AND B.heatingarea = C.heatingarea AND B.normalheatingarea = C.normalheatingarea
	SET C.endtime = currtime,C.iscurrent = 0
	WHERE  (B.heatingarea IS NULL OR B.normalheatingarea IS NULL)  AND C.iscurrent = 1;

	
	-- # 插入维度变换的数据,并置最新的iscurrent为1
	INSERT INTO dim_station(
	stationid , stationname,starttime,endtime,iscurrent,heatingarea,normalheatingarea,extraheatingarea,constructionarea,chargearea,ispush,iscalculate,participationcalculation
	)
	SELECT E.uniqueid AS stationid,D.stationname,currtime starttime,STR_TO_DATE('9999-12-31 23:59:59','%Y-%m-%d %H:%i:%s') endtime,1 iscurrent,E.heatingarea,E.normalheatingarea,E.extraheatingarea,E.constructionarea,E.chargearea,E.ispush,E.iscalculate,E.participationcalculation
	FROM tmp_stationdate D
	JOIN g_station E
	ON D.stationid = E.uniqueid;
	
	-- # 插入新增的维度数据并置iscurrent为1
	INSERT INTO dim_station(
	stationid , stationname,starttime,endtime,iscurrent,heatingarea,normalheatingarea,extraheatingarea,constructionarea,chargearea,ispush,iscalculate,participationcalculation
	)
	SELECT A.uniqueid AS stationid,A.name stationname,currtime starttime,STR_TO_DATE('9999-12-31 23:59:59','%Y-%m-%d %H:%i:%s') endtime,1 iscurrent,A.heatingarea,A.normalheatingarea,A.extraheatingarea,A.constructionarea,A.chargearea,A.ispush,A.iscalculate,A.participationcalculation 
	FROM g_station A
	LEFT JOIN dim_station B
	ON A.uniqueid = B.stationid
	WHERE B.stationid IS NULL;
END

编写调用Shell脚本

#Step2 定义Type2调用及数据同步的Shell

#!/bin/bash
port="9030"
username="root"
passwd="Mysql#2023" 
dbname="businessdb"
hostname="192.168.2.50"
labelval=`date  "+%Y%m%d-%H%M%S"`


# 1 Doris数据入本地文件
mysqldump -h192.168.2.50 -P9030 -uroot -p888888 --no-create-info --no-tablespaces --databases dorisdb --tables station > '/root/workspace/station.sql'
mysqldump -h192.168.2.50 -P9030 -uroot -p888888 --no-create-info --no-tablespaces --databases dorisdb --tables dim_station > '/root/workspace/dim_station.sql'

# 2 Mysql清空原有表数据
mysql -uroot -p$passwd -D$dbname -e 'TRUNCATE TABLE station;'
mysql -uroot -p$passwd -D$dbname -e 'TRUNCATE TABLE dim_station;'

# 3 Mysql本地文件入库
mysql -uroot -p$passwd -D$dbname < '/root/workspace/station.sql'
mysql -uroot -p$passwd -D$dbname < '/root/workspace/dim_station.sql'

# 4 Mysql执行存储过程生成Type2
mysql -uroot -p$passwd -D$dbname -e 'call type2pro()'

# 5 删除已经存在的本地文件
rm -rf /var/lib/mysql-files/dim_station.txt

# 6 Mysql导出本地文件,默认字段分割符是制表符"\t"
mysql -uroot -p'Runa#2020' -D$dbname -e "SELECT * FROM  dim_station INTO OUTFILE '/var/lib/mysql-files/dim_station.txt'";

# 7 清空Doris库表数据(修改dim_station表结构,不再进行表清空操作)
mysql -h192.168.2.50 -P9030 -uroot -p888888 -Ddorisdb -e "TRUNCATE TABLE dim_station;"

# 8 load到Doris库里,这里的%09代表制表符"\t"
curl --location-trusted -u root:888888 -T /var/lib/mysql-files/dim_station.txt http://192.168.2.50:8030/api/zaozhuang/dim_station/_load?label=dim_station_$labelval&column_separator=%09

编辑Crontab调度

#Step3 Crontab里定义调度

crontab -e新增调度,这里是每隔2个小时执行一次。

0 */2 * * * /root/type2 >/root/type2.log2>&1

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

scrapy_redis原理分析并实现断点续爬以及分布式爬虫

scrapy_redis原理分析并实现断点续爬以及分布式爬虫 学习目标 了解 scrapy实现去重的原理了解 scrapy中请求入队的条件掌握 scrapy_redis基于url地址的增量式单机爬虫掌握 scrapy_redis分布式爬虫 1. 下载github的demo代码 clone github scrapy-redis源码文件 git clone http…

WPF TotalSummary汇总栏设置鼠标点击事件和显示格式修改

文章目录最开始的提示汇总有两种Summary Panel的设置参考这里Fixed Summary Panel的设置参考这里代码中都用到了DXBinding多个汇总项&#xff0c;对某一项进行控制设置鼠标点击事件整体的xaml代码如下总结最开始的提示 WPF毕竟是微软的东西&#xff0c;且用的人不多&#xff0…

虚函数的复杂(继承)内存布局

文章目录单继承&#xff08;无虚函数覆盖&#xff09;单继承&#xff08;有虚函数覆盖&#xff09;多继承&#xff08;无虚函数覆盖&#xff09;多继承&#xff08;有虚函数覆盖&#xff09;菱形继承&#xff08;有虚函数覆盖&#xff09;菱形虚拟继承&#xff08;有虚函数覆盖…

浅析git

目录 git 的历史 git 的感性认识 git 在Linux下的操作 git三板斧 git 的历史 雷纳斯托瓦兹&#xff0c;想必大家对这个名字并不陌生&#xff0c;他是Linux内核的最早作者&#xff0c;随后发起了这个开源项目&#xff0c;担任Linux内核的首要架构师与项目协调者&#xff0c…

Kafka入门(一)

1、Kafka简介 Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域&#xff08;hadoop集群&#xff09;、物联网领域。其主要设计目标如下&#xff1a; 以时间复杂度为O(1)的方式提供消息持久化能…

华为路由器Talent服务配置

前言 Telnet&#xff1a;console是通过本地进行设备管理&#xff0c;还有一种是通过远程登录的方式进行设备管理&#xff0c;也就是虚拟终端。通过发送信息进行控制&#xff0c;不受终端和服务器的位置限制&#xff08;只要可以通信&#xff0c;服务器启用了Telnet功能即可&am…

Python 的基础语法

第一个 Python 程序交互式编程交互式编程不需要创建脚本文件&#xff0c;是通过 Python 解释器的交互模式进来编写代码。linux上你只需要在命令行中输入 Python 命令即可启动交互式编程,提示窗口如下&#xff1a;$ pythonPython 2.7.6 (default, Sep 9 2014, 15:04:36)[GCC 4.2…

LinkedHashSet源码阅读理解

概述 1、底层&#xff1a;HashSet LinkedHashMap 2、创建节点时将节点插入链表&#xff0c;因此有序 3、线程不安全 源码理解 demo&#xff1a; public class LinkedHashSetDemo {public static void main(String[] args) {test();}public static void test(){LinkedHas…

CDMP认证考试考前你需要了解的那些事

对国内的数据从业人员来说&#xff0c;CDMP算比较新的考试&#xff0c;目前相关介绍很少&#xff0c;小编整理了CDMP考试先关的一些内容&#xff0c;希望对正在考虑考取CDMP认证的你有所帮助&#xff01;CDMP认证有几个等级&#xff1f;4个。A级&#xff08;基础级&#xff09;…

为什么Google优化排名前期要做长尾关键词?谷歌seo怎么做?

本文主要分享关于谷歌长尾词对于外贸网站获取流量和排名的重要性。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这种行为吧。 Google优化排名是指在Google 搜索结果中&#xff0c;使外贸站的排名更高。 长尾关键词是指长度较长的&#xff0c;不…

((蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第2天】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有65天

&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6; 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&a…

【计算机网络】Linux下路由配置总结

文章目录路由的基础知识Linux内核路由表使用route -n命令查看Linux内核路由表三种路由类型说明(Flags)配置路由route的命令设置包转发静态路由配置参考路由的基础知识 1&#xff09;路由概念 路由&#xff1a; 跨越从源主机到目标主机的一个互联网络来转发数据包的过程路由器…

多线程代码案例之单例模式

目录 单例模式 饿汉模式 懒汉模式 问题一 问题二 问题三 单例模式 单例模式&#xff0c;是设计模式的一种。在有些特定场景中&#xff0c;有的特定的类&#xff0c;只能创建出一个实例&#xff0c;不应该创建多个实例。单例模式就可以保证这样的需求。例如JDBC中的Data…

OpenMMLab AI实战营笔记前两次课

文章目录1计算机视觉算法基础与 OpenMMLabCV引入OpenMMLab基础知识&#xff1a;2 计算机视觉之图像分类算法基础传统方法--设计图像特征AlexNet VGG 等神经网络搜索&#xff08;2016&#xff09;Vision/Swin Transformer轻量化卷积神经网络注意力机制 Attention Mechanism模型学…

文档存储Elasticsearch系列--3分布式存储和搜索过程

前言&#xff1a;ES 作为分布式文档的存储&#xff0c;它的存储过程是怎样的&#xff0c;它的分布式检索过程又是怎样的&#xff1b; 1 分布式存储过程&#xff1a; 为了说明目的, 我们 假设有一个集群由三个节点组成。 它包含一个叫 blogs 的索引&#xff0c;有两个主分片&a…

linux查看/设置某个进程运行的CPU核

目录 1.ps -eF 2.top命令 3.pidstat命令 4.使用taskset指令 5.使用taskset指定进程运行在CPU核 1.ps -eF #查看fwd进程运行在哪个cpu核上 [rootCENTOS57 rpm]# ps -eF | grep fwd 2.top命令 (1)top (2)按f键可以选择下面配置选项 P Last Used Cpu (SMP) (3)Es…

【深度学习】YOLO系列(v1-v3+tinyv3)解析

YOLOv1 正负样本选取 如果目标的中心落在cell中,那么这个cell就负责预测这个类别。 由于每个cell预测两个bbox,那么选择与GT IOU大的bbox来预测这个目标,也就是这一个框的 1 i j o b j = 1 , 1 i j n o b j

通过Python的pptx库操作ppt-替换文本和图片-批量生成任意自定义图片

通过Python的pptx库操作ppt-替换文本和图片-批量生成任意自定义图片 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、前言 这是一个全部的脚本&#xff0c;我们知道&#xff0c;…

阿里巴巴最全Java、架构师、大数据、算法PPT技术栈图册

我只截图不说话&#xff0c;PPT大全&#xff0c;氛围研发篇、算法篇、大数据、Java后端架构&#xff01;除了大家熟悉的交易、支付场景外&#xff0c;支撑起阿里双十一交易1682亿元的“超级工程”其实包括以下但不限于客服、搜索、推荐、广告、库存、物流、云计算等。 Java核心…

第二章 Linux系统安装

第一节 安装计划 基本思路是使用VMWare这样的虚拟机软件创建一个“虚拟计算机”&#xff0c;在虚拟机上安装Linux系统。 安装vm软件通过vm软件来创建一个虚拟机空间通过vm软件来在创建好的虚拟空间上&#xff0c;安装我们的Centos操作系统使用Centos 第二节 vmware下载安装 和…