`

如何添加、查询、修改分区表中的数据(转)

    博客分类:
  • sql
 
阅读更多
在创建完分区表后,可以向分区表中直接插入数据,而不用去管它这些数据放在哪个物理上的数据表中。接上篇文章,我们在创建好的分区表中插入几条数据:

    从以上代码中可以看出,我们一共在数据表中插入了13条数据,其中第13条数据是插入到第1个物理分区表中的;第45条数据是插入到第2个物理分区 表中的;第68条数据是插入到第3个物理分区表中的;第911条数据是插入到第4个物理分区表中的;第1213条数据是插入到第5个物理分区表中 的。

    SQL语句中可以看出,在向分区表中插入数据方法和在普遍表中插入数据的方法是完全相同的,对于程序员而言,不需要去理会这13条记录研究放在哪个数 据表中。当然,在查询数据时,也可以不用理会数据到底是存放在哪个物理上的数据表中。如使用以下SQL语句进行查询:

[c-sharp]view plaincopy

  1. select * from Sale  

 

    查询的结果如下图所示:



 

    从上面两个步骤中,根本就感觉不到数据是分别存放在几个不同的物理表中,因为在逻辑上,这些数据都属于同一个数据表。如果你非想知道哪条记录是放在哪个 物理上的分区表中,那么就必须使用到$PARTITION函数,这个函数的可以调用分区函数,并返回数据所在物理分区的编号。

    说起来有点难懂,不过用起来很简单。$PARTITION的语法是:

    $PARTITION.分区函数名(表达式)

    假设,你想知道2010101日的数据会放在哪个物理分区表中,你就可以使用以下语句来查看。

[c-sharp]view plaincopy

  1. select $PARTITION.partfunSale ('2010-10-1')  

 

    在以上语句中,partfunSale()为分区函数名,括号中的表达式必须是日期型的数据或可以隐式转换成日期型的数据,如果要问我为什么,那么就回 想一个怎么定义分区函数的吧(CREATE PARTITION FUNCTION partfunSale (datetime))。在定义 partfunSale()函数时,指定了参数为日期型,所以括号中的表达式必须是日期型或可以隐式转换成日期型的数据。以上代码的运行结果如下图所示:



 

    在该图中可以看出,分区函数返回的结果为2,也就是说,2010101日的数据会放在第2个物理分区表中。

 

    再进一步考虑,如果想具体知道每个物理分区表中存放了哪些记录,也可以使用$PARTITION函数。因为$PARTITION函数可以得到物理分区表 的编号,那么只要将$PARTITION.partfunSale(SaleTime)做为where的条件使用即可,如以下代码 所示:

[c-sharp]view plaincopy

  1. select * from Sale where $PARTITION.partfunSale(SaleTime)=1  
  2. select * from Sale where $PARTITION.partfunSale(SaleTime)=2  
  3. select * from Sale where $PARTITION.partfunSale(SaleTime)=3  
  4. select * from Sale where $PARTITION.partfunSale(SaleTime)=4  
  5. select * from Sale where $PARTITION.partfunSale(SaleTime)=5  

 

    以上代码的运行结果如下图所示:



 

    从上图中我们可以看到每个分区表中的数据记录情况——和我们插入时设置的情况完全一致。同理可得,如果要统计每个物理分区表中的记录数,可以使用如下代码:

[c-sharp]view plaincopy

  1. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)  

 

    以上代码的运行结果如下图所示:



 

 

    除了在插入数据时程序员不需要去考虑分区表的物理情况之外,就是连修改数据也不需要考虑。SQL Server会自动将记录从一个分区表移到另一个分区表中,如以下代码所示:

[c-sharp]view plaincopy

  1. --统计所有分区表中的记录总数  
  2. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)  
  3. --修改编号为1的记录,将时间改为201911  
  4. update Sale set SaleTime='2019-1-1' where id=1  
  5. --重新统计所有分区表中的记录总数  
  6. select $PARTITION.partfunSale(SaleTime) as 分区编号,count(id) as 记录数 from Sale group by $PARTITION.partfunSale(SaleTime)  

 

    在以上代码中,程序员将其中一条数据的时间改变了,从分区函数中可以得知,这条记录应该从第一个分区表移到第五个分区表中,如下图所示。而整个操作过程,程序员是完全不需要干预的。



 

 

 

 

  • 大小: 37.7 KB
  • 大小: 3.8 KB
  • 大小: 49.7 KB
  • 大小: 7.9 KB
  • 大小: 14.1 KB
分享到:
评论

相关推荐

    修改hive表分区名称

    hive表修改分区数据

    SQL Server 2005利用分区处理海量数据

    超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算。而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长。...本文通过一个具体实例,介绍如何创建和修改分区表,以及如何查看分区表。

    硬盘分区表

    这时了解硬盘的数据组织结构就非常必要,通常的资料都非常庞杂琐碎,看半天也只有原理性的东西,对于具体差错没有太大帮助,这个资料可以则直接从数据层,偏移和数据含义解释分区表,方便调试和差错,可作为资料保存

    小米4分区工具

    认为有必要的备份好整个分区表和分区(极力推荐备份)。 也可以用我提供的备份(有些分区是各手机私有的不能用我的备份分别是ssd dbi bk1 bk2 modemst1 modemst2 fsc bk3 fsg bk4 bk5 这11个分区同时也是不可动的...

    SQL 2005 使用分区表来处理千万级行数据

    超大型数据库的大小常常达到数百GB,有时甚至要用TB来计算。而单表的数据量往往会达到上亿的记录,并且记录数会随着时间而增长。...本文通过一个具体实例,介绍如何创建和修改分区表,以及如何查看分区表。

    Disk_Genius_图文教程(重建分区表、逻辑坏道的修复等)

    经过近两年的潜心“修炼”,Disk Genius的“功力”确实不可当日而语,它不仅提供了基本的硬盘分区功能(如建立、激活、删除、隐藏分区),还具有强大的分区维护功能(如分区表备份和恢复、分区参数修改、硬盘主引导...

    易我分区表医生V3.1.0

    有必要在使用《易我分区表医生》之前创建数据备份。备份每日的数据是合理的,并且需要的! 因此, 任何损失或损害的责任和职责不能接受!在任何环境之下! 软件的供应不承担任何类型的担保。修改或追踪校正的任何权限...

    手工修复硬盘分区表

    可直接在该分区表中修改数据。光标移至任意处回车, 可显示该数据处的分区结构,并可通过F2和F6切换。后一个分区的STARTING LOCATION必然是前一个分区ENDING LOCATION的下一个扇区。NUMBER OF SECTORS可通过分区的...

    Oracle分区表和索引

     2、 包括历史数据的表,比如最新的数据放入到最新的分区中。典型的例子:历史表,只有当前月份的数据可以被修改,而其他月份只能read-only  ORACLE只支持以下分区:tables, indexes on tables, materialized ...

    oracle 表分区

    但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。(对于高效率查询是有影响,主要差别是对某一分区数据时行查询时和对整体数据进行查询)

    oracle 分区技术-大批量数据操作

    当分区表建立时,记录基于分区字段值被存储到相应分区。 分区字段值可以修改。(row movement enabled) 分区可以存储在不同的表空间 分区可以有不同的物理存储参数 分区支持IOT表,对象表,LOB字段,varrays等

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    操作系统实验内存管理

    3、在设计好的数据结构上设计一个主存分配算法,要求实现的基本功能操作有:寻找空闲分区,空闲分区表的修改,已分区表的修改。 4、在设计好的数据结构上设计一个主存回收算法。其中,若回收的分区有上邻空闲分区和...

    内存管理.docx

    3、在设计好的数据结构上设计一个主存分配算法,要求实现的基本功能操作有:寻找空闲分区,空闲分区表的修改,已分区表的修改。 4、在设计好的数据结构上设计一个主存回收算法。其中,若回收的分区有上邻空闲分区和...

    动态分区式存储管理的存储分配和回收

    1、建立空闲分区表数据文件,该文件包括两个字段:空闲区的起始地址和长度;该文件有若干个记录,表示目前系统有多个空闲分区; 2、建立已分配分区表数据文件,该文件包括三个字段:已分配分区的起始地址、长度、...

    Microsoft SQL Server 2008技术内幕:T-SQL查询

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    2019年中科院期刊分区.xlsx

    中科院期刊分区,是中科院《中国科学院文献情报中心期刊分区表》(简称期刊分区表)是中国科学院文献情报中心科学计量中心的科学研究成果。期刊分区表自2004年开始发布,延续至今;...期刊分区表数据每年10月份发布

    HIVE创建库创建表.docx

    疫情数据实现静态和动态加载数据到分区表 自己构建疫情数据实现多重分区表 使用美国疫情数据实现桶表 修改mysql数据库支持中文 location用于指定数据库在HDFS存储位置。 不使用location关键字:代表存放在默认/user...

    模拟操作系统内存管理

    3、在设计好的数据结构上设计一个主存分配算法,要求实现的基本功能操作有:寻找空闲分区,空闲分区表的修改,已分区表的修改。 4、在设计好的数据结构上设计一个主存回收算法。其中,若回收的分区有上邻空闲分区和...

    恢复磁盘分区

    1.diskgenius恢复分区表 将故障盘挂接到一台正常的电脑,或者是使用光盘U盘等带有diskgenius的启动盘开机,然后运行diskgenius数据恢复软件,点击菜单的工具-搜索已丢失的分区表(重建分区表),范围可选择整个硬盘...

Global site tag (gtag.js) - Google Analytics