mysql~关于mysql分区表的测试

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

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

  • 分区后的表效果
    mysql~关于mysql分区表的测试

方法一,可能无效

步骤:

  1. 创建自定义哈希函数:
DELIMITER //

CREATE FUNCTION custom_hash(str VARCHAR(255)) RETURNS INT
DETERMINISTIC
BEGIN
    DECLARE hash_val INT;
    SET hash_val = 0;
    
    -- 计算字符串的哈希值
    SET hash_val = CRC32(user_id) % 3;
    RETURN hash_val;
END//

DELIMITER ;

在上面的示例中,我们创建了一个名为custom_hash的自定义哈希函数,接受一个VARCHAR类型的参数,并返回一个整数类型的哈希值。这里使用了MD5算法计算字符串的哈希值,并将其转换为有符号整数。

  1. 使用自定义哈希函数进行分区:
CREATE TABLE user_attribute (
    user_id VARCHAR(50),
    attribute_name VARCHAR(50),
    attribute_value VARCHAR(255),
    PRIMARY KEY (user_id, attribute_name)
) PARTITION BY HASH(custom_hash(user_id)) PARTITIONS 4;

在上面的示例中,我们创建了一个名为user_attribute的表,并使用自定义哈希函数custom_hashuser_id字段进行哈希计算,然后将结果用作分区键进行分区。

通过以上步骤,你可以自定义一个哈希函数来处理VARCHAR类型的字段,并将其应用于分区表的设计中。请注意,在实际应用中,需要根据具体需求和数据特征来设计和调整哈希函数的逻辑。希朼这个示例能够帮助你解决问题。如果有任何其他问题,请随时告诉我。

方法二,虚拟字段

 ALTER TABLE user_attribute_pattern ADD COLUMN user_id_hash2    generated always  varchar(512) AS (CRC32(user_id) % 3)  VIRTUAL;

对已经有表分区

ALTER TABLE user_attribute_pattern
PARTITION BY hash(user_id_hash) PARTITIONS 4;

查看分区信息

SELECT table_name, partition_ordinal_position, partition_method, partition_expression
FROM information_schema.partitions
WHERE table_name = 'users';

方法一和方法二产生的问题和错误

  1. 需要hash分区时,分区字段必须是整型
  2. 分区字段必须是主键字段,多主键时,分区字符是其中一个主键
# 虚拟字段的建立
drop table user_attribute_pattern;
CREATE TABLE `user_attribute_pattern` (
  `NAME` varchar(255) ,
  `VALUE` varchar(255),
  `USER_ID` varchar(36) ,
  `ID` varchar(36),
	`user_id_hash` int(11)  generated always  AS (CRC32(user_id) % 4) virtual,
  PRIMARY KEY (`ID`) USING BTREE,
  INDEX `IDX_USER_ATTRIBUTE2`(`USER_ID`) USING BTREE,
  INDEX `IDX_NAME2`(`NAME`) USING BTREE,
  INDEX `IDX_VALUE2`(`VALUE`) USING BTREE
) 
 

最后相互矛盾,没有实现

  • 因为我的主键是varchar的,而hash分区表的键需要是int的
  • 所以我要把它添加一个虚拟字段取主键的hash值
  • 然后经过这些步骤之后,又需要把这个虚拟key添加为主键,当mysql又提示了,虚拟字段不能设为主键

最后可能需要把VIRTUAL这个虚拟的键变成STORE存储的键才行了

最后直接用KEY的方式,它是支持字符串的

事实上,它是mysql内部对这个varchar进行了hash的计算,咱们上面的测试多次一举了!

ALTER TABLE user_attribute_copy1
PARTITION BY KEY(ID) PARTITIONS 5;

根据你提供的代码,针对表 user_attribute_copy1 进行了分区设置。在这段代码中,使用的是 KEY(ID) 来定义分区规则,其中 ID 是主键。根据这个规则,表 user_attribute_copy1 将会以主键 ID 作为分区字段进行分区,共分为5个分区。

在MySQL中,使用 KEY 关键字指定主键作为分区键,表示根据主键的值来进行分区。具体地说,MySQL会根据主键的哈希值或者范围值来将数据行分配到不同的分区中。在这种情况下,如果主键 IDvarchar 类型,MySQL会根据该字段的值进行哈希或范围分区,将数据均匀地分布到5个分区中。

总的来说,这个分区规则会根据表的主键 ID 的值来进行分区,将数据分散存储到5个不同的分区中,有助于提高查询效率和管理大量数据。如果需要进一步了解分区规则的具体实现和效果,可以查看表的分区信息或执行相应的查询来验证数据是否按照预期分布到各个分区中。文章来源地址https://www.toymoban.com/news/detail-839390.html

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

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

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

相关文章

  • 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日
    浏览(78)
  • 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日
    浏览(49)
  • HIVE创建分区表

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

    2024年02月15日
    浏览(44)
  • 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)
  • Hive分区表修改(增删)列

    环境:CDH6.3.0,Hive 2.1.1-cdh6.3.0 基础数据分区表test1,包含a,b,c,d共4列加分区列p_day,向其中插入两行数据 表中数据及parquet文件信息如下: test2表直接使用test1表的文件: 修复分区并查询数据 删除test2表的a列,看起来只有通过replace columns实现,但是运行报错,根据官方文档,只

    2023年04月26日
    浏览(88)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包