开发指南—函数—拆分函数—YYYYWEEK

简介: 本文将介绍YYYYWEEK函数的使用方式。

描述

根据分库键时间值的年份与一年的周数计算哈希值,然后再按分库数进行取余。

例如,YYYYWEEK('2012-12-31 12:12:12')等价于按照(2013x54+1)%D(D是分库数目)公式计算出2012-12-31是2013年的第1周。

使用限制

  • 拆分键的类型必须是DATE、DATETIME或TIMESTAMP中的一种。
  • 使用YYYYWEEK函数前,需要先确定所需的总物理分表数,您可以通过确定循环周期(如2年)来确定总的物理分表数。因为YYYYWEEK函数仅支持为循环周期内的每一周创建一张独立分表。
  • 当周数经过一个循环周期后(如2012年第1周经过一个2年的循环周期后是2014年第1周),相同周数有可能被路由到同一个分库分表,具体被分到哪个分表受实际的分表数目影响。

使用场景

YYYYWEEK函数适用于需要按年份与一年的周数进行分库的场景。建议结合该函数与tbpartition by YYYYWEEK(ShardKey)命令一起使用。

使用示例

假设PolarDB-X里已经拥有8个物理库,现有如下需求:

  • 按年周进行分库。
  • 同一周的数据都能落在同一张分表,且两年以内的每一周都能单独对应一张分表。
  • 查询时带上分库分表键后能直接将查询落在某个物理分库的某个物理分表。

YYYYWEEK分库函数即可满足上述要求。上述需求中提到两年以内的每一周都需对应一张分表(即一周一张表),由于一年最多有53周,所以需要创建106(53x2=106)张物理分表才能满足上述需求。PolarDB-X已有8个分库,所以每个分库应该建14张物理分表(106/8=13.25,取整为14,分表数最好是分库数的整数倍)。

则您可以使用如下建表DDL:


create table test_yyyyweek_tb (    
    id int, 
    name varchar(30) DEFAULT NULL,  
    create_time datetime DEFAULT NULL,
    primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
dbpartition by YYYYWEEK(create_time) 
tbpartition by YYYYWEEK(create_time) tbpartitions 14;
相关文章
|
Ubuntu
Ubuntu Server 20.04 LTS下载及安装教程
Ubuntu Server 20.04 LTS下载及安装教程
4326 0
Ubuntu Server 20.04 LTS下载及安装教程
|
运维 安全 Ubuntu
`/var/log/syslog` 和 `/var/log/messages` 日志详解
`/var/log/syslog` 和 `/var/log/messages` 是Linux系统的日志文件,分别在Debian和Red Hat系发行版中记录系统事件和错误。它们包含时间戳、日志级别、PID及消息内容,由`rsyslog`等守护进程管理。常用命令如`tail`和`grep`用于查看和搜索日志。日志级别从低到高包括`debug`到`emerg`,表示不同严重程度的信息。注意保护日志文件的安全,防止未授权访问,并定期使用`logrotate`进行文件轮转以管理磁盘空间。
4558 1
|
传感器 IDE 开发工具
【史上最全面esp32教程】RGB彩灯篇
【史上最全面esp32教程】RGB彩灯篇
1167 0
|
Oracle 安全 Java
天了噜,Java 8 要停止维护了!
前些天的中兴事件,已经让国人意识到自己核心技术的不足,这次的 JDK 8 对企业停止免费更新更是雪上加霜。。 以下是 Oracle 官网提示的 JDK8 终止更新公告。
1404 0
|
3天前
|
人工智能 运维 安全
|
1天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
8天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
765 109