当前位置: 首页 > news >正文

mysql 8.0 时间维度表生成(可运行)

文章目录

  • mysql 8.0 时间维度表生成实例
    • 时间维度表的作用
    • 时间维度表生成
    • 技术细节
    • 使用时间维度表的好处

mysql 8.0 时间维度表生成实例

时间维度表的作用

dim_times(时间维度表)在数据仓库(Data Warehouse)中的作用至关重要。作为维度表,dim_times 主要提供与时间相关的详细信息,帮助用户按照时间维度对事实数据进行查询、分析和聚合。以下是时间维度表在数据仓库中的主要作用:

  • 提供一致的时间表示
    dim_times 表提供一致且标准化的时间表示。时间维度表通常包括从秒、分钟、小时、天、星期、月、季度、年份等不同的时间层级信息,确保数据分析中所有与时间相关的操作都使用同一套时间标准,避免时间计算中的不一致。

时间维度表生成

  • 创建时间维度表
CREATE TABLE `dim_time` (`time_key` int NOT NULL COMMENT '唯一的时间键,表示一天中的秒数 (0 - 86399)',`time_value` time DEFAULT NULL COMMENT '一天中的具体时间值,格式为HH:MM:SS',`hour24` tinyint DEFAULT NULL COMMENT '24小时制的小时数 (0 - 23)',`hour12` tinyint DEFAULT NULL COMMENT '12小时制的小时数 (1 - 12)',`minutes` tinyint DEFAULT NULL COMMENT '分钟 (0 - 59)',`seconds` tinyint DEFAULT NULL COMMENT '秒数 (0 - 59)',`am_pm` char(2) DEFAULT NULL COMMENT '时间的上午/下午标识 (AM/PM)',PRIMARY KEY (`time_key`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='时间维度表,记录一天中每秒的时间信息';
  • 创建生成时间维度过程

```sql
CREATE PROCEDURE generate_dim_time()
begin-- SET SESSION cte_max_recursion_depth = 100000;-- 清空表,确保数据为全新的DELETE FROM dim_time;-- 使用递归CTE生成一天中的秒数(0 到 86399)INSERT INTO dim_time (time_key, time_value, hour24, hour12, minutes, seconds, am_pm)select time_key, time_value, hour24, hour12, minutes, seconds, am_pm from  (
WITH RECURSIVE time_cte AS (SELECT 0 AS seconds_of_dayUNION ALLSELECT seconds_of_day + 1FROM time_cteWHERE seconds_of_day < 86399  -- 一天 24 小时有 86400 秒(0-86399)
)
SELECT seconds_of_day AS time_key,                     -- time_key为秒数SEC_TO_TIME(seconds_of_day) AS time_value,      -- 使用SEC_TO_TIME函数将秒数转为时间HOUR(SEC_TO_TIME(seconds_of_day)) AS hour24,    -- 24小时制的小时数IF(HOUR(SEC_TO_TIME(seconds_of_day)) = 0 OR HOUR(SEC_TO_TIME(seconds_of_day)) = 12, 12, HOUR(SEC_TO_TIME(seconds_of_day)) % 12) AS hour12,  -- 12小时制的小时数MINUTE(SEC_TO_TIME(seconds_of_day)) AS minutes, -- 分钟SECOND(SEC_TO_TIME(seconds_of_day)) AS seconds, -- 秒IF(HOUR(SEC_TO_TIME(seconds_of_day)) < 12, 'AM', 'PM') AS am_pm  -- AM/PM
FROM time_cte ) time_cte;END

执行以后得截图
在这里插入图片描述

技术细节

  • 技术点1

由于 默认 mysql 8.0 递归有限制1000层, 需要修改

SET SESSION cte_max_recursion_depth = 100000;

注意事项
调整递归深度限制时,务必谨慎,因为递归层数过多可能会消耗大量的内存和 CPU,影响数据库性能。
在大多数情况下,默认的 1000 层递归深度已经足够,如果不需要非常复杂的递归操作,尽量避免大幅提升这个限制。

  • 技术点2

1天=24小时 ,1小时 =60分钟 。1分钟=60秒
所以 是 246060=86400秒

  • 技术点3
    我这里是从 0开始 递归 ,根据每个公司的需求也可以从 1开始
//如果从1开始 
WITH RECURSIVE time_cte AS (SELECT 1 AS seconds_of_dayUNION ALLSELECT seconds_of_day + 1FROM time_cteWHERE seconds_of_day < 86400  -- 一天 24 小时有 86400 秒(0-86399)
)
  • 技术点4
    维度表引擎建议用 MyISAM ,因为生成一次后,一般不会在修改
ENGINE=MyISAM

使用时间维度表的好处

  • 时间维度表的定义

dim_time 表是数据仓库中的一个重要维度表,用来存储一天中每秒的时间信息,并提供标准化的时间表示。该表通过 time_key 唯一标识每一秒,并为其提供多层级的时间信息,如 24 小时制、12 小时制、分钟、秒和 AM/PM 标识等。

  • 表结构概述

time_key:以秒为单位的唯一标识,范围从 0 到 86399,表示一天中的每一秒。
time_value:秒数对应的具体时间(HH:MM:SS 格式)。
hour24:24 小时制的小时数,用于与时间相关的精确分析。
hour12:12 小时制的小时数,配合 AM/PM 标识支持更常见的时间展示。
minutes 和 seconds:分别表示分钟和秒数,提供精确的时间粒度。
am_pm:表示当前时间为上午(AM)或下午(PM),方便时间分段分析。

  • 时间维度表的作用

标准化时间表示:dim_time 提供了一致的时间表示,避免在数据分析中因时间格式不统一而导致的混淆。
支持多层级时间聚合:能够在不同时间粒度上进行聚合分析,例如按小时、天、月、季度或年等进行业务汇总。
简化时间查询:提供与时间相关的字段,支持复杂的时间计算,如按 AM/PM、工作日、周末、节假日等分类进行分析。
提高查询效率:通过关联事实表中的 time_key,大幅提高与时间相关的数据查询性能,避免实时计算时间字段。
历史趋势分析:时间维度表是执行历史数据分析、同比、环比等时间比较的基础,帮助用户进行数据趋势洞察和预测。

  • 性能优化

时间维度表中使用了整数型的 time_key 作为主键,便于事实表高效地与时间维度表进行关联查询。这种方式减少了复杂时间字段的存储和计算压力,同时提高了查询响应速度。

  • 数据仓库建模中的关键角色

在星型或雪花型数据仓库模型中,时间维度表是所有与时间相关的分析、汇总和计算的基础。它为事实表提供了完整的时间维度支持,使得业务分析能够在不同的时间层级和时间段上展开。

  • 应用场景

销售分析:按小时、日、月、季度、年等时间维度聚合销售数据,分析销售趋势。
用户行为分析:分析用户的访问时间分布,比如按小时、工作日与周末、节假日进行比较。
财务报表:生成按时间维度汇总的财务报表,支持时间段对比,如去年同期或上季度的财务表现。

相关文章:

mysql 8.0 时间维度表生成(可运行)

文章目录 mysql 8.0 时间维度表生成实例时间维度表的作用时间维度表生成技术细节使用时间维度表的好处 mysql 8.0 时间维度表生成实例 时间维度表的作用 dim_times&#xff08;时间维度表&#xff09;在数据仓库&#xff08;Data Warehouse&#xff09;中的作用至关重要。作为…...

打造高效实时数仓,从Hive到OceanBase的经验分享

本文作者&#xff1a;Coolmoon1202&#xff0c;大数据高级工程师&#xff0c;专注于高性能软件架构设计 我们的业务主要围绕出行领域&#xff0c;鉴于初期采用的数据仓库方案面临高延迟、低效率等挑战&#xff0c;我们踏上了探索新数仓解决方案的征途。本文分享了我们在方案筛选…...

15.3 JDBC数据库编程

15.3 JDBC数据库编程 15.3.1 创建数据库和表 创建一个名为webstore的数据库&#xff0c;并向其中添加数据&#xff0c;代码如下: 1.创建数据库 CREATE TABLE products( id int PRIMARY KEY, pname VARCHAR(20) brand VARCHAR(20), price FLOAT(7,2), stock SMALLINT, ) …...

SSH公私钥后门从入门到应急响应

目录 1. SSH公私钥与SSH公私钥后门介绍 1.1 SSH公私钥介绍 1.1.1 公钥和私钥的基本概念 1.1.2 SSH公私钥认证的工作原理(很重要) 1.2 SSH公私钥后门介绍 2. 如何在已拿下控制权限的主机创建后门 2.1 使用 Xshell 生成公钥与私钥 2.2 将公钥上传到被需要被植入后门的服务…...

服务器数据恢复—Linux操作系统环境下网站数据的恢复案例

服务器数据恢复环境&#xff1a; 一台linux操作系统服务器上跑了几十个网站&#xff0c;服务器上只有一块SATA硬盘。 服务器故障&#xff1a; 服务器突然宕机&#xff0c;尝试再次启动失败。将硬盘拆下检测&#xff0c;发现存在坏扇区。找当地一家数据恢复公司处理后&#xff…...

开放式耳机是怎么样的?开放式耳机的优缺点分析?

开放式耳机作为一种独特的耳机类型&#xff0c;因其独特设计和使用体验受到了许多用户的喜爱。了解开放式耳机的优缺点有助于大家更好地选择适合自己需求的耳机。以下是开放式耳机的一些主要优点和缺点分析&#xff1a; 优点 l 舒适度高 开放式耳机的设计通常更加轻盈&#…...

HDMI色块移动——FPGA学习笔记13

一、方块移动原理 二、实验任务 使用FPGA开发板上的HDMI接口在显示器上显示一个不停移动的方块&#xff0c;要求方块移动到边界处时能够改变移动方向。显示分辨率为800*480&#xff0c;刷新速率为90hz。&#xff08;480p分辨率为800*480&#xff0c;像素时钟频率Vga_clk 800x4…...

MySQL中去除重复

除去相同的行 SELECT DISTINCT 列名 FROM 表名; 示例&#xff1a;查询employees表&#xff0c;显示唯一的部门ID select distinct department_id from employees;...

【C++】vector容器的基本使用

一、vector是什么 vector是STL第一个正式的容器&#xff0c;它的底层其实就是动态数组&#xff0c;插入数据时当容量满了会自动扩容&#xff0c;它和string差不多&#xff0c;不同的之处之一在于vector本身是一个模板&#xff0c;它这个容器中可以存放各种各样的类型的数据&am…...

【强化学习系列】Gym库使用——创建自己的强化学习环境2:拆解官方标准模型源码/规范自定义类+打包自定义环境

目录 一、 官方标准环境的获取与理解 二、根据官方环境源码修改自定义 1.初始化__init__() 2.重置环境 reset() 三、打包环境 1.注册与创建自定义环境 2.环境规范化 在本文的早些时候&#xff0c;曾尝试按照自己的想法搭建自定义的基于gym强化学习环境。 【强化学习系列】Gy…...

PyQt5实现按钮选择文件夹及文件夹

目录 1、选择文件夹并显示 2、选择文件 3、选择多个文件 4、设置保存文件路径 1、选择文件夹并显示 from PyQt5 import QtWidgetsdirectory QtWidgets.QFileDialog.getExistingDirectory(None, "选取文件夹", "./") # 起始路径 print(directory) 2…...

Gin渲染

HTML渲染 【示例1】 首先定义一个存放模板文件的 templates文件夹&#xff0c;然后在其内部按照业务分别定义一个 posts 文件夹和一个 users 文件夹。 posts/index.tmpl {{define "posts/index.tmpl"}} <!DOCTYPE html> <html lang"en">&…...

前端——JS基础

定义变量&#xff1a;let / var 字符串 字符串拼接&#xff1a; 字符串和数字拼&#xff1a;您.... 25 ; 这个25会转成字符串再拼接 字符串和数组拼&#xff1a;10以内的质数有&#xff1a; [2,3,5,7] > 10以内的质数有&#xff1a;2,3,5,7 字符串长度&#xff1a;leng…...

MATLAB入门教程

MATLAB安装教程可参考链接&#xff1a;matlab怎么安装 matlab安装教程-电脑软件-PHP中文网 1.MATLAB的工作环境 &#xff08;1&#xff09;命令窗(command window) 是对MATLAB进行操作的主要载体。默认情况下&#xff0c;启动MATLAB时就打开命令窗。MATLAB的所有所数…...

muduo - 概要简述

作者&#xff1a;陈硕 编程语言&#xff1a;C 架构模式&#xff1a;Reactor 代码链接&#xff1a;GitHub - chenshuo/muduo: Event-driven network library for multi-threaded Linux server in C11 设计自述&#xff1a;https://www.cnblogs.com/Solstice/archive/2010/08…...

Selenium点击元素的方法

前言 点击方法在web自动化测试中经常用到,下面就来介绍一下selenium常用和不常用的点击方法; 1、常用方法 1.1、使用 click() 方法: 这是最简单和最常用的方法。通过选中要点击的元素,然后使用 click() 方法来触发点击事件。 示例代码: element = self.driver.find_e…...

kali里面搭建docker容器

注意事项&#xff1a;kali版本&#xff0c;镜像源 &#xff08;1&#xff09;权限为管理员&#xff1a; sudo su (2) 更新软件包列表并升级已安装的软件包 apt-get update apt-get upgrade 出错了&#xff0c;应该是更新源出问题了。 &#xff08;3&#xff09;更换镜像源&am…...

WebGL系列教程八(GLSL着色器基础语法)

目录 1 前言2 基本原则3 基本数据类型4 顶点着色器和片元着色器4.1 声明4.2 初始化项目4.3 赋值 5 结构体5.1 声明5.2 赋值 6 函数6.1 基本结构6.2 自定义函数6.3 常用内置函数 7 精度8 其他9 总结 1 前言 通过前七讲&#xff0c;我们已经见过了WebGL中的部分基础语法&#xff…...

go多线程

1、简单使用&#xff08;这个执行完成&#xff0c;如果进程执行比较久&#xff0c;这里不会等待它们结束&#xff09; package mainimport "time"func main() {go func() {println("Hello, World!")}()time.Sleep(1 * time.Second) }2、wg.Add(数量)使用&…...

【话题】如何看待IBM中国研发部裁员?

&#xff08;一&#xff09;背景 在全球化的大趋势下&#xff0c;跨国公司的业务布局一直处于动态调整之中。IBM 作为全球知名的 IT 企业&#xff0c;在中国市场已经运营多年&#xff0c;其在中国的研发中心曾经为公司的全球业务发展做出了重要贡献。近年来&#xff0c;全球经…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

基于数字孪生的水厂可视化平台建设:架构与实践

分享大纲&#xff1a; 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年&#xff0c;数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段&#xff0c;基于数字孪生的水厂可视化平台的…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

USB Over IP专用硬件的5个特点

USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中&#xff0c;从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备&#xff08;如专用硬件设备&#xff09;&#xff0c;从而消除了直接物理连接的需要。USB over IP的…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...