本地数仓项目(三)—— 数据可视化和任务调度

news2025/1/18 7:28:29

1 背景

本文基于《本地数据仓库项目(一)——数仓搭建详细流程》和《本地数仓项目(二)——搭建系统业务数仓详细流程》数据为依托,实现数据可视化和任务调度

2 构造可视化数据

在mysql中新建ads_uv_count表

DROP TABLE IF EXISTS `ads_uv_count`;
CREATE TABLE `ads_uv_count`  (
  `dt` varchar(255) DEFAULT NULL COMMENT '统计日期',
  `day_count` bigint(200) DEFAULT NULL COMMENT '当日用户数量',
  `wk_count` bigint(200) DEFAULT NULL COMMENT '当周用户数量',
  `mn_count` bigint(200) DEFAULT NULL COMMENT '当月用户数量',
  `is_weekend` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'Y,N是否是周末,用于得到本周最终结果',
  `is_monthend` varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT 'Y,N是否是月末,用于得到本月最终结果'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '每日活跃用户数量' ROW_FORMAT = Dynamic;

插入数据

INSERT INTO `ads_uv_count` VALUES ('2022-03-01 14:10:04', 20, 30, 100, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-02 14:12:48', 35, 50, 100, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-03 14:14:07', 25, 640, 3300, 'Y', 'Y');
INSERT INTO `ads_uv_count` VALUES ('2022-03-04 14:14:14', 10, 23, 123, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-05 14:14:21', 80, 121, 131, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-06 14:14:38', 30, 53, 453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-07 14:33:27', 20, 31, 453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-08 14:33:39', 10, 53, 453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-09 14:33:47', 10, 34, 453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-10 14:33:54', 10, 653, 8453, 'Y', 'Y');
INSERT INTO `ads_uv_count` VALUES ('2022-03-11 14:34:04', 100, 453, 1453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-12 14:34:10', 101, 153, 134, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-13 14:34:16', 100, 286, 313, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-14 14:34:22', 100, 45, 453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-15 14:34:29', 100, 345, 3453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-16 14:34:35', 101, 453, 453, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-17 14:34:41', 100, 678, 9812, 'Y', 'Y');
INSERT INTO `ads_uv_count` VALUES ('2022-03-18 14:34:46', 100, 186, 193, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-19 14:34:53', 453, 686, 712, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-20 14:34:57', 452, 786, 823, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-21 14:35:02', 214, 58, 213, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-22 14:35:08', 76, 78, 95, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-23 14:35:13', 76, 658, 745, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-24 14:35:19', 76, 687, 9300, 'Y', 'Y');
INSERT INTO `ads_uv_count` VALUES ('2022-03-25 14:35:25', 76, 876, 923, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-26 14:35:30', 76, 456, 511, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-27 14:35:35', 76, 456, 623, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-28 14:35:41', 43, 753, 4000, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-29 14:35:47', 76, 876, 4545, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-30 14:35:57', 76, 354, 523, 'N', 'N');
INSERT INTO `ads_uv_count` VALUES ('2022-03-31 14:36:02', 43, 634, 6213, 'Y', 'Y');

2.1 留存率统计

2.1.1 建表

DROP TABLE IF EXISTS `ads_user_retention_day_rate`;
CREATE TABLE `ads_user_retention_day_rate`  (
  `stat_date` varchar(255)  DEFAULT NULL COMMENT '统计日期',
  `create_date` varchar(255) DEFAULT NULL COMMENT '设备新增日期',
  `retention_day` bigint(200) DEFAULT NULL COMMENT '截止当前日期留存天数',
  `retention_count` bigint(200) DEFAULT NULL COMMENT '留存数量',
  `new_mid_count` bigint(200) DEFAULT NULL COMMENT '当日设备新增数量',
  `retention_ratio` decimal(10, 2) DEFAULT NULL COMMENT '留存率'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '每日用户留存情况' ROW_FORMAT = Dynamic;

2.1.2 插入数据

INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-09','2022-03-08', 1,88,  99,  0.78);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-10','2022-03-08', 2,77,  88,  0.68);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-11','2022-03-08', 3,66,  77,  0.58);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-12','2022-03-08', 4,55,  66,  0.48);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-13','2022-03-08', 5,44,  55,  0.38);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-14','2022-03-08', 6,33,  44,  0.28);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-10','2022-03-09', 1,77,  88,  0.56);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-11','2022-03-09', 2,66,  77,  0.46);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-12','2022-03-09', 3,55,  66,  0.36);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-13','2022-03-09', 4,44,  55,  0.26);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-14','2022-03-09', 5,33,  44,  0.16);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-11','2022-03-10', 1,66,  77,  0.55);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-12','2022-03-10', 2,55,  66,  0.45);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-13','2022-03-10', 3,44,  55,  0.35);
INSERT INTO `ads_user_retention_day_rate` VALUES ('2022-03-14','2022-03-10', 4,33,  44,  0.25);

2.2 漏斗分析

2.2.1 建表

DROP TABLE IF EXISTS `ads_user_action_convert_day`;
CREATE TABLE `ads_user_action_convert_day`  (
  `dt` varchar(200) DEFAULT NULL COMMENT '统计日期',
  `total_visitor_m_count` bigint(20) DEFAULT NULL COMMENT '总访问人数',
  `order_u_count` bigint(20) DEFAULT NULL COMMENT '下单人数',
  `visitor2order_convert_ratio` decimal(10, 2) DEFAULT NULL COMMENT '购物车到下单转化率',
  `payment_u_count` bigint(20) DEFAULT NULL COMMENT '支付人数',
  `order2payment_convert_ratio` decimal(10, 2) DEFAULT NULL COMMENT '下单到支付的转化率'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '每日用户行为转化率统计' ROW_FORMAT = Dynamic;

2.2.2 导入数据

INSERT INTO `ads_user_action_convert_day` VALUES ('2022-04-28 19:36:18', 10000, 3000, 0.25, 2000, 0.15)

2.3 GMV统计

2.3.1 新建表

DROP TABLE IF EXISTS ads_gmv_sum_day;
CREATE TABLE ads_gmv_sum_day(
  `dt` varchar(200) DEFAULT NULL COMMENT '统计日期',
  `gmv_count` bigint(20) DEFAULT NULL COMMENT '当日gmv订单个数',
  `gmv_amount` decimal(16, 2) DEFAULT NULL COMMENT '当日gmv订单总金额',
  `gmv_payment` decimal(16, 2) DEFAULT NULL COMMENT '当日支付金额'
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '每日活跃用户数量' ROW_FORMAT = Dynamic;

2.3.2 插入数据

INSERT INTO `ads_gmv_sum_day` VALUES ('2022-03-01 22:51:37', 1000, 210000.00, 2000.00);
INSERT INTO `ads_gmv_sum_day` VALUES ('2022-05-08 22:52:32', 3434, 12413.00, 1.00);
INSERT INTO `ads_gmv_sum_day` VALUES ('2022-07-13 22:52:51', 1222, 324345.00, 1.00);
INSERT INTO `ads_gmv_sum_day` VALUES ('2022-09-13 22:53:08', 2344, 12312.00, 1.00);

2.4 全国商品销售

2.4.1 创建表

DROP TABLE IF EXISTS `ads_gmv_sum_province`;
CREATE TABLE `ads_gmv_sum_province`  (
  `province` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `gmv` bigint(255) DEFAULT NULL,
  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

2.4.2 插入数据

INSERT INTO `ads_gmv_sum_province` VALUES ('北京', 2000, '');
INSERT INTO `ads_gmv_sum_province` VALUES ('辽宁', 30000, '沈阳:21.1%,大连:20%,鞍山:35%');
INSERT INTO `ads_gmv_sum_province` VALUES ('浙江', 8002, '杭州:20%,舟山:50%');

3 web页面查看

1)运行spring-boot-echarts-master程序
运行前需要配置mysql地址
在这里插入图片描述

2)在web页面上查看显示结果
http://localhost:8080/active
springboot项目的jar包网盘内容如下:

链接:https://pan.baidu.com/s/1c5DlSiBwwuQf1UXb5bpBRQ
提取码:mya5

  1. 启动springboot项目后可看到如下简单图表展示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4 任务调度——Azkaban调度器

4.1 安装Azkaban调度器

4.1.1 解压tar包

tar -zxvf azkaban-executor-server-2.5.0.tar.gz
tar -zxvf azkaban-sql-script-2.5.0.tar.gz
tar -zxvf azkaban-web-server-2.5.0.tar.gz

4.1.2 创建azkaban数据库

进入mysql,创建azkaban数据库,并将解压的脚本导入到azkaban数据库。

mysql> create database azkaban;
Query OK, 1 row affected (0.00 sec)
mysql> use azkaban;
Database changed
mysql> source /root/soft/azkaban/azkaban-2.5.0/create-all-sql-2.5.0.sql;

4.1.3 生成密钥库

keytool -keystore keystore -alias jetty -genkey -keyalg RSA

Keytool:是java数据证书的管理工具,使用户能够管理自己的公/私钥对及相关证书。
-keystore:指定密钥库的名称及位置(产生的各类信息将不在.keystore文件中)
-genkey:在用户主目录中创建一个默认文件".keystore"
-alias:对我们生成的.keystore进行指认别名;如果没有默认是mykey
-keyalg:指定密钥的算法 RSA/DSA 默认是DSA

在这里插入图片描述

将keystore 拷贝到 azkaban web服务器根目录中

mv keystore /root/soft/azkaban/azkaban-web-2.5.0/

4.1.4 配置文件

4.1.4.1 web配置文件

  1. 进入azkaban web服务器安装目录 conf目录,打开azkaban.properties文件
    2)按照如下配置修改azkaban.properties文件
#默认web server存放web文件的目录
web.resource.dir=/root/soft/azkaban/azkaban-web-2.5.0/web
#默认时区,已改为亚洲/上海 默认为美国
default.timezone.id=Asia/Shanghai
#用户权限管理默认类(绝对路径)
user.manager.xml.file=/root/soft/azkaban/azkaban-web-2.5.0/conf/azkaban-users.xml
#global配置文件所在位置(绝对路径)
executor.global.properties=/root/soft/azkaban/azkaban-executor-2.5.0/conf/global.properties
#数据库连接IP
mysql.host=192.168.2.100
#数据库实例名
mysql.database=azkaban
#数据库用户名
mysql.user=root
#数据库密码
mysql.password=123456
#SSL文件名(绝对路径)
jetty.keystore=/root/soft/azkaban/azkaban-web-2.5.0/keystore
#SSL文件密码
jetty.password=123456
#Jetty主密码与keystore文件相同
jetty.keypassword=123456
#SSL文件名(绝对路径)
jetty.truststore=/root/soft/azkaban/azkaban-web-2.5.0/keystore
#SSL文件密码
jetty.trustpassword=123456

3)在azkaban web服务器安装目录 conf目录,按照如下配置修改azkaban-users.xml 文件,增加管理员用户

<user username="admin" password="admin" roles="admin" />

4.1.4.2 server配置

1) 按照如下配置修改azkaban.properties文件

#时区
default.timezone.id=Asia/Shanghai
executor.global.properties=/root/soft/azkaban/azkaban-executor-2.5.0/conf/global.properties
mysql.host=192.168.2.100
mysql.database=azkaban
mysql.user=root
mysql.password=123456

在这里插入图片描述

4.1.5 启动executor服务器

[root@wavehouse-1 bin]# pwd
/root/soft/azkaban/azkaban-executor-2.5.0/bin
[root@wavehouse-1 bin]# ./azkaban-executor-start.sh

在这里插入图片描述

4.1.6 启动web服务器

[root@wavehouse-1 azkaban-web-2.5.0]# pwd
/root/soft/azkaban/azkaban-web-2.5.0
[root@wavehouse-1 azkaban-web-2.5.0]# bin/azkaban-web-start.sh

在这里插入图片描述

4.1.7 jps查看启动进程

在这里插入图片描述

4.1.8 登录页面验证

启动完成后,在浏览器(建议使用谷歌浏览器)中输入https://服务器IP地址:8443,即可访问azkaban服务了。在登录中输入刚才在azkaban-users.xml文件中新添加的户用名及密码,点击 login。
在这里插入图片描述至此azkaban安装完成

4.2 Azkanba使用示例

4.2.1 单一job

  1. 创建frist.job
#first.job
type=command
command=echo 'this is my first job'
  1. 将job资源文件打包成zip文件
    注意:Azkaban上传的工作流文件只支持xxx.zip文件。zip应包含xxx.job运行作业所需的文件和任何文件(文件名后缀必须以.job结尾,否则无法识别)。作业名称在项目中必须是唯一的。
  2. 通过azkaban的web管理平台创建project并上传job的zip包
    在这里插入图片描述
    4)启动任务
    在这里插入图片描述
  3. 查看输出
    在这里插入图片描述

4.2.2 多job工作流

分别指定start.job ➡ step1.job ➡ step2.job ➡ end.job
start.job

#!/bin/bash
#start.job
type=command
command=touch /root/soft/azkaban/test/azkaban.txt

step1.job

#!/bin/bash
#step1.job
type=command
dependencies=start
command=echo "this is step1 job" >> /root/soft/azkaban/test/azkaban.txt

这里的dependencies字段指定依赖,即需要start.job启动完成后才会启动step1.job
step2.job

#!/bin/bash
#step2.job
type=command
dependencies=start
command=echo "this is step2 job" >> /root/soft/azkaban/test/azkaban.txt

end.job

#!/bin/bash
#end.job
type=command
dependencies=step1,step2
command=echo "this is end job" >> /root/soft/azkaban/test/azkaban.txt

压缩并上传zip包,可以看到任务执行逻辑
在这里插入图片描述
执行任务并查看日志
在这里插入图片描述

4.2.3 java操作任务

  1. 编写java程序并将依赖打成jar包
    注:如果java程序引入了其他依赖需要将所有依赖打成一个jar包,或将依赖的jar包上传到Azkaban的lib目录下并重启Azkaban服务。
  2. 编写job,并压缩成zip文件
    java.job
#!/bin/bash
type=javaprocess
java.class=com.atguigu.appclient.AppMain ${param1} ${param2}
classpath=/root/log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar

这里的${param1}表示传参参数,在Azkaban指定参数,这里的参数名需要和前面定义的名保持一致
在这里插入图片描述
3) 启动job并查看结果
在这里插入图片描述

4.2.4 HDFS操作任务

1)创建hdfs.job
hdfs.job

#hdfs job
type=command
command=/root/soft/hadoop-2.7.2/bin/hadoop fs -mkdir /azkaban

2)压缩并上传zip
3) 执行并查看结果在这里插入图片描述
查看hdfs文件是否成功创建,可以看到已经成功创建了
在这里插入图片描述

4.2.5 MR任务

  1. 创建mr.job
#mapreduce job
type=command
command=/root/soft/hadoop-2.7.2/bin/hadoop jar /root/soft/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wordcount /wordcount/output

2)压缩并提交zip
3)执行查看结果
在这里插入图片描述
4) 查看mr生成的结果
在这里插入图片描述

4.2.6 Hive任务

  1. 编写hive.sql和hive.job
    hive.job
#!/bin/bash
# hiva job
type=command
command=/root/soft/azkaban/test/hive.sql

hive.sql

use default;
drop table student;
create table student(id int, name string)
row format delimited fields terminated by '\t';
load data local inpath '/root/soft/azkaban/test/datas/student.txt' into table student;
insert overwrite local directory '/root/soft/azkaban/test/datas/student'
row format delimited fields terminated by '\t'
select * from student;

2) 压缩zip文件并上传
3) 查看任务日志
在这里插入图片描述
另外Azkanban还可以自定义执行时间、基于Azkaban功能可以实现业务数仓需求的各种调用,并实现自动化调度。
在这里插入图片描述
新增调度之后可以在Scheduling栏可以看到预调度的任务
在这里插入图片描述

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

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

相关文章

机器学习的一般框架

数据科学开发工具 anaconda&#xff1a;管理开发环境 jupyter&#xff1a;编写整个数据处理流程 pycharm&#xff1a;远程编写调试代码 ipdb&#xff1a;pycharm dubug时偶尔出现一些bug&#xff0c;可以用结合ipdb补充解决 数据开发六步 data 数据的获得、清洗、特征工程等…

1.数据结构(栈 队列 数组 链表)

栈 先进后出 后进先出 队列 先进先出 后进后出

告别2022,寄语2023(论一个普通大学牲的2022年能有多奇葩)

今天是2022年12月31日&#xff08;当然文章发出应该是2023年1月啦&#xff0c;因为我阳了&#xff0c;/(ㄒoㄒ)/~~&#xff09;&#xff0c;原来时间过得这么快&#xff0c;作为中国地质带专的一名普通计算机学牲&#xff0c;也是趁着跨年之际&#xff0c;写一篇属于自己的年末…

Springcloud elasticsearch基础介绍

哈喽~大家好&#xff0c;这篇来看看Springcloud elasticsearch基础介绍。 &#x1f947;个人主页&#xff1a;个人主页​​​​​ &#x1f948; 系列专栏&#xff1a; 【微服务】 &#x1f949;与这篇相关的文章&#xff1a; SpringClou…

jdk-HashMap(1.8)源码学习

hashMap介绍hashMap是我们日常用得最多的一种并发包其中之一了&#xff0c;hashMap是线程不安全的&#xff0c;不安全主要体现在高并发的场景下&#xff0c;1.8是用数组链表红黑树实现&#xff0c;1.8之前用数组链表&#xff0c;可能会导致死锁及数据丢失。红黑树结构&#xff…

牛啊!长这么大还是头一次见24W字的SpringBoot从入门到实战文档

牛啊&#xff01;长这么大还是头一次见24W字的SpringBoot从入门到实战文档&#xff01; 不服还真不行&#xff0c;因为这份文档包含的内容是又全又新&#xff0c;而且还特别高深&#xff0c;从入门到实战的内容全都有&#xff01;&#xff01; 继续往下看&#xff1a; 本文档从…

数据仓库基础知识(维度建模)

一、数据仓库概述1.1 数据仓库定义数据仓库&#xff1a;Data Warehouse&#xff0c;是为企业所决策制定过程&#xff0c;提供所有支持类型的数据集合。用于分析性报告和决策支持。数仓是一个面向主题、集成的、相对稳定、反应历史变化的数据集合&#xff0c;随着大数据技术的发…

[MySQL实战环境部署](超详细版)

MySQL实战环境部署1.部署CentOS1.1部署CenOS虚拟机步骤&#xff08;1&#xff09;基于VirtualBox&#xff08;2&#xff09;下载CentOS1.2环境部署过程2.部署MySQL1.部署CentOS 1.1部署CenOS虚拟机步骤 &#xff08;1&#xff09;基于VirtualBox 下载网址&#xff1a; Virtu…

java初学(仅供自己复习)

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目…

【电子通信如何建立数字信任】

在网络钓鱼攻击兴起之后&#xff0c;多数企业会定期开展针对员工的钓鱼邮件培训&#xff0c;只不过这样的培训效果不尽人意&#xff0c;在一份针对企业的钓鱼报告中&#xff0c;钓鱼邮件的攻击频率在过去几年中成倍增加&#xff0c;反钓鱼工作组甚至观察到了有记录以来的最剧烈…

react hook 源码完全解读

前言 从React Hooks发布以来&#xff0c;整个社区都以积极的态度去拥抱它、学习它。期间也涌现了很多关于React Hooks 源码解析的文章。本文就以笔者自己的角度来写一篇属于自己的文章吧。希望可以深入浅出、图文并茂的帮助大家对React Hooks的实现原理进行学习与理解。本文将…

基于Apache Hudi 和 Apache Spark Sql 的近实时数仓架构之宽表建设

前言 无论是在 lamda 架构还是 kappa 架构中&#xff0c;实时计算通常是使用 flinkmq 来实现的&#xff0c;而在这些场景中涉及到多张表 join 时&#xff0c;一般我们的使用方法是多张流表 join 如&#xff1a;Regular Join、Interval Join&#xff0c;或者流表 维表的方式 j…

Rust入门(十):项目发布

发布配置 在 Rust 中 发布配置是预定义的、可定制的带有不同选项的配置&#xff0c;他们允许程序员更灵活地控制代码编译的多种选项。 运行 cargo build 发布时采用的 dev 配置&#xff0c;其更适合开发。 运行 cargo build --release 时采用 release 配置&#xff0c;其是更…

Linux常用命令——netstat命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) netstat 查看Linux中网络系统状态信息 补充说明 netstat命令用来打印Linux中网络系统的状态信息&#xff0c;可让你得知整个Linux系统的网络情况。 语法 netstat(选项)选项 -a或--all&#xff1a;显示所有连…

ASP.NET Core 3.1系列(23)——使用AutoMapper实现实体之间的相互转换

1、前言 在之前的博客中&#xff0c;我们通过EFCore的Scaffold-DbContext命令一键生成数据库实体类。但在实际业务中&#xff0c;实体类并不能很好地应对所有情况。例如前端页面只需要展示某张表中部分字段的信息&#xff0c;这时如果直接将实体类集合返回给前端界面&#xff…

【C进阶】指针和数组综合题

家人们欢迎来到小姜的世界&#xff0c;<<点此>>传送门 这里有详细的关于C/C/Linux等的解析课程&#xff0c;家人们赶紧冲鸭&#xff01;&#xff01;&#xff01; 客官&#xff0c;码字不易&#xff0c;来个三连支持一下吧&#xff01;&#xff01;&#xff01;关注…

设计模式-工厂模式(Java)

工厂方法模式 工厂方法模式&#xff1a;Factory Method 事物是发展的&#xff0c;随着事物的不断发展&#xff0c;原有的对象会随着发展不断变化&#xff0c;或增或减。 工厂方法模式提供的一种封装机制&#xff0c;隔离出了那些易变动的对象。这个时候需求的变动不再影响之前…

Mybatis-Plus中的条件查询-DQL编程

条件构造器 | MyBatis-Plus 当需要进行一些复杂的条件查询时&#xff0c;则需使用wrapper&#xff0c;来编辑这些条件 1、条件查询 ①allEq() 即是where后面的等于"",该方法的后的所有参数都会被以"and"的形式进行连接 QueryWrapper qw1 new QueryWra…

Go语言设计与实现 -- 栈空间管理

寄存器 图片来自于面向信仰编程 Go 语言的汇编代码包含 BP 和 SP 两个栈寄存器&#xff0c;它们分别存储了栈的基址指针和栈顶的地址&#xff0c;栈内存与函数调用的关系非常紧密&#xff0c;我们在函数调用一节中曾经介绍过栈区&#xff0c;BP 和 SP 之间的内存就是当前函数的…

数智化转型进入“精装时代”,容联云助力千行百业加速上云用数赋智

随着产业数字化向前推进&#xff0c;企业引入数字技术的需求和热情十分充足&#xff0c;但要把技术下沉到市场中&#xff0c;还存在一个关键的矛盾&#xff1a;交付能力。千行百业&#xff0c;尤其是传统实体经济从业者&#xff0c;对数智化所需要的5G、IOT、AI、大数据、云计算…