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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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_day
    UNION ALL
    SELECT seconds_of_day + 1
    FROM time_cte
    WHERE 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_day
    UNION ALL
    SELECT seconds_of_day + 1
    FROM time_cte
    WHERE seconds_of_day < 86400  -- 一天 24 小时有 86400 秒(0-86399)
)
  • 技术点4
    维度表引擎建议用 MyISAM ,因为生成一次后,一般不会在修改
ENGINE=MyISAM

使用时间维度表的好处

  • 时间维度表的定义

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

  • 表结构概述

ime_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数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
存储 JSON 关系型数据库
轻松入门MySQL:MySQL字段类型精解,优化存储结构,助力系统高效运行(2)
轻松入门MySQL:MySQL字段类型精解,优化存储结构,助力系统高效运行(2)
|
29天前
|
存储 自然语言处理 关系型数据库
mysql 8.0 日期维度表生成(可运行)
mysql 8.0 日期维度表生成(可运行)
42 2
|
4月前
|
消息中间件 关系型数据库 MySQL
实时计算 Flink版操作报错合集之运行mysql to doris pipeline时报错,该如何排查
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
3月前
|
SQL 关系型数据库 MySQL
MySQL运行在docker容器中会损失多少性能
MySQL运行在docker容器中会损失多少性能
|
4月前
|
存储 SQL Cloud Native
云原生数据仓库使用问题之运行MySQL命令发现中文内容变成了问号,该如何解决
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
5月前
|
Ubuntu 关系型数据库 MySQL
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
77 0
ubuntu apt 安装wordpress所需所有的 一键脚本 扩展您的PHP似乎没有安装运行WordPress所必需的MySQL扩展。
|
5月前
|
关系型数据库 MySQL API
实时计算 Flink版操作报错合集之同步MySQL数据到另一个MySQL数据库,第一次同步后源表数据发生变化时目标表没有相应更新,且Web UI中看不到运行的任务,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
189 0
|
6月前
|
关系型数据库 MySQL
如何解决cmd命令窗口无法运行mysql命令的问题
如何解决cmd命令窗口无法运行mysql命令的问题
208 0
|
8天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
22 4
|
6天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
19 1