mysql分区表:日期分区

这篇具有很好参考价值的文章主要介绍了mysql分区表:日期分区。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.创建分区表

CREATE TABLE `api_log` (
  `requestId` varchar(64) NOT NULL COMMENT '调用的唯一标示',
  `systemCode` varchar(64) NOT NULL COMMENT '业务系统编码',
  `tongID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `tong_time`  timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `pt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '分区字段',
  PRIMARY KEY (`tongID`,`requestId`,`pt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='日志信息表'
/*!50100 PARTITION BY RANGE (TO_DAYS(pt))
(PARTITION p20230510 VALUES LESS THAN (739015) ENGINE = InnoDB,
 PARTITION p20230511 VALUES LESS THAN (739016) ENGINE = InnoDB) */;

2.查看分区

-- 01 查询单分区
 SELECT * from api_log partition (p20230510)

-- 02 查看所有分区

SELECT
    PARTITION_NAME,
    TABLE_ROWS 
FROM
    INFORMATION_SCHEMA.PARTITIONS 
WHERE
    TABLE_NAME = 'api_log';

3.添加分区

-- 添加分区
ALTER TABLE hz_api_log_delta add PARTITION (PARTITION p20230512 VALUES LESS THAN (TO_DAYS('2023-05-12')));

4.存储过程:分区删除与创建

delimiter //
CREATE  PROCEDURE `pro_create_del_pt`()
BEGIN
	#Routine body goes here...
## 01.新建后面两天的分区
## 02获取当前时间
SELECT CONCAT('p',DATE_FORMAT(DATE_ADD(NOW(),INTERVAL 2 DAY),'%Y%m%d')) into @pname;
SELECT DATE_ADD(NOW(),INTERVAL 2 DAY) into @pdate;
#删除的分区时间
SELECT  DATE_FORMAT(DATE_ADD(NOW(),INTERVAL -17 DAY) ,'%Y%m%d') into @ddate;
## 03新增分区
-- ALTER TABLE api_log add PARTITION (PARTITION p20230509 VALUES LESS THAN (TO_DAYS(DATE_ADD(NOW(),INTERVAL 1 DAY))));

		set @sql_add_p=concat("ALTER TABLE api_log add PARTITION (PARTITION ",@pname,"  VALUES LESS THAN (TO_DAYS('",@pdate,"')))");
	prepare sql_add_p from @sql_add_p;
	EXECUTE sql_add_p ;
	DEALLOCATE PREPARE sql_add_p;	
## 04 删除分区
#alter table api_log drop partition p20230507;
		set @sql_del_p=concat("ALTER TABLE api_log drop PARTITION p",@ddate);
	prepare sql_del_p from @sql_del_p;
	EXECUTE sql_del_p ;
	DEALLOCATE PREPARE sql_del_p;	
END
 //
delimiter ;

5.事件定时

-- 创建事件
delimiter $$
create event event_pro_create_del_pt
on schedule 
	every 1 DAY 
	STARTS '2023-05-10 20:00:00 '
	comment '每日20:00执行'
DO call pro_create_del_pt();
$$
delimiter ;
-- 查看事件
show events;
或者
select * from mysql.event;

6.触发器设计:子表每插入一行,总表获得一行

-- 创建事件
delimiter $$
CREATE  TRIGGER `trigger_api_log` AFTER INSERT ON `api_log` 
FOR EACH ROW BEGIN
insert into hz_api.api_log_all 
(requestId,systemCode,sjly_part) VALUES
 (NEW.requestId,NEW.systemCode,'区县');
end;
$$
delimiter ;

7.创建索引


--  创建普通索引:在tong_time字段

ALTER TABLE db_base.api_log ADD INDEX index_name ( tong_time );

-- 查看索引
show index from db_base.api_log;

8.添加枚举型字段

ALTER TABLE db_base.api_log add SJLY_PART enum('线上','线下') default null COMMENT '数据来源';

文章来源地址https://www.toymoban.com/news/detail-596271.html

到了这里,关于mysql分区表:日期分区的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql~关于mysql分区表的测试

    在MySQL 8.0中,可以通过创建自定义哈希函数来处理VARCHAR类型的字段,以便用作分区键。下面是一个简单的示例,演示如何在MySQL8.0中创建自定义哈希函数来处理VARCHAR类型的字段 分区后的表效果 创建自定义哈希函数: 在上面的示例中,我们创建了一个名为 custom_hash 的自定义

    2024年03月13日
    浏览(34)
  • MySQL分区表的正确使用方法,适用场景,建立分区的条件

    什么是MySQL分区? MySQL分区是将一张表分割成独立的子表的技术。每个子表被称为分区,它们有着相同的结构和字段,但存储着不同的数据。这项技术可以提高查询速度,减少日志文件和磁盘空间的使用。 建立分区的条件 要建立MySQL分区,需要满足以下几个条件: 1.所需的

    2024年02月07日
    浏览(46)
  • 用sqoop导出hive parquet 分区表到mysql

    确保你已经安装并配置好了Sqoop工具,并且可以连接到Hadoop集群和MySQL数据库。 创建一个MySQL表来存储导出的数据。请确保MySQL表的结构与Hive Parquet分区表的结构匹配。 使用Sqoop的export命令来执行导出操作。以下是一个示例命令: 替换 mysql_host、database_name、mysql_username 和 mysq

    2024年02月14日
    浏览(40)
  • 【mysql表分区系】mysql创建分区表提示A PRIMARY KEY must include all columns in the table‘s partitioning function

    首先声明下我这边使用的mysql版本是5.7.29版本,当然下面的问题我这边也是基于这个版本。这里因为没有考证其他版本是否也会有这些问题,可自行官方文档来查阅资料 一个唯一键必须包含表分区函数所有的列,根据这个错误提示我们大概就知道怎么处理,但是why?我们还是沉

    2024年02月06日
    浏览(91)
  • Hive 分区表 (Partitioned Tables) 『 创建分区表 | CRUD分区 | 修复分区 | 数据导入(静态分区、动态分区) | 查询数据/表结构』

    条件:假如现有一个角色表 t_all_hero ,该表中有6个清洗干净的互不干扰的数据文件:射手、坦克、战士、法师、刺客、辅助 要求:查找出名字为射手且生命值大于6000的角色人数 惯性解决方法:按照MySQL思维很容易想到 问:如何提高效率?这样虽然能够解决问题,但是由于要

    2024年02月04日
    浏览(77)
  • hive分区表 静态分区和动态分区

    现有数据文件 data_file 如下: 2023-08-01,Product A,100.0 2023-08-05,Product B,150.0 2023-08-10,Product A,200.0 需要手动指定分区 现有源数据表如下: CREATE TABLE sales_source (     sale_date STRING,     product STRING,     amount DOUBLE ); INSERT INTO sales_source VALUES     (\\\'2023-08-01\\\', \\\'Product A\\\', 100.0),     (\\\'2023-08-

    2024年02月10日
    浏览(52)
  • Hive分区表实战 - 多分区字段

    本实战教程通过一系列Hive SQL操作,演示了如何在大数据环境下创建具有省市分区的大学表,并从本地文件系统加载不同地区的学校数据到对应分区。首先,创建名为 school 的数据库并切换至该数据库;接着,在数据库中定义一个名为 university 的分区表,其结构包括ID和名称两

    2024年01月15日
    浏览(48)
  • HIVE创建分区表

    partitioned by ( c2 string ) # 创建分区 c1跟c2都是字段,但是创建的时候不能写在t2里面,只能写在分区里面(同时select查询的时候,c2的字段也要写在最后面) 要加载数据到分区表,只需在原来的加载数据的语句上增加partition,同时指定分区的字段值即可。 注意:当你退出

    2024年02月15日
    浏览(43)
  • HiveSQL分区的作用及创建分区表案例演示(图解)

    目录 一、分区的作用 二、单级分区表 1.准备工作 2.创建数据表 3.查询数据 4.创建分区数据表 5.添加数据 5.1添加方式1:静态分区(需要指定分区字段和值) 5.2添加方式2:动态分区(只需指定分区字段,分区字段相同的数据自动分配到同一个区) 三、多级分区表 1.准备工作 2.创建分区

    2024年01月17日
    浏览(54)
  • oracle分区表创建(自动按年、月、日分区)实战

    前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性。 oracle 11g 支持自动分区,不过得在创建表时就设置好分区。 如果已经存在的表需要改分区表,就需要将

    2024年02月02日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包