HANA 三种表分区

       SAP HANA提供了三种分区方式:Hash分区、Range分区以及Roundrobin分区。前两者是针对某个或联合字段进行分区,区别在于hash分区是对字段的哈希值进行分区,而range分区则是定义了字段的取值范围。一般来说,如果涉及到年月日时间字段的数据,可以考虑通过Range分区,将数据划分到月或日的区间内;如果例如客户ID号这样的字段数据,可以考虑Hash分区,在真实系统中,ID号这样的自增数字字段,按照Hash值划分在可以达到较好的均匀分布。Roundrobin则是针对整张表记录进行随机划分,将数据按记录条数均匀分配到分区之中。

Range Partitioning 范围分区

按时间分区,字段是主键

ALTER TABLE  schema.tablename

PARTITION BY RANGE ("DAY_ID")

(PARTITION '20170101' <= VALUES < '20180101',

  PARTITION '20180101' <= VALUES < '20190101',

  PARTITION '20190101' <= VALUES < '20200101',

  PARTITION '20200101' <= VALUES < '20210101',

  PARTITION '20210101' <= VALUES < '20220101',

  PARTITION '20220101' <= VALUES < '20230101',

  PARTITION OTHERS)

--修改-删除分区:

ALTER TABLE mytab ADD PARTITION OTHERS

ALTER TABLE mytab DROP PARTITION OTHERS

查看表分区情况:

select * from sys.M_CS_PARTITIONS where table_name = ''

哈希分区(HASH partitioning):

CREATE COLUMN TABLE TEST_HASH_PARTITION_2 (a INT, b INT, c INT, PRIMARY KEY (a,b)) PARTITION BY HASH (a, b)    PARTITIONS 4;

select * from sys.m_cs_partitions where table_name='TEST_HASH_PARTITION_2';

分区数是由数据库引擎在运行时根据其配置来决定:

CREATE COLUMN TABLE TEST_HASH_PARTITION (A INT, B INT, C INT, PRIMARY KEY (A,B)) PARTITION BY HASH (A, B)

PARTITIONS GET_NUM_SERVERS() ;

select * from sys.m_cs_partitions where table_name='TEST_HASH_PARTITION';

alter table "MES"."ZBCT001" PARTITION BY HASH (ZHM)

PARTITIONS GET_NUM_SERVERS() ;

用这个 参数 让HASH自动决定分区的数量

循环分区(Round-robin partitioning):

CREATE COLUMN TABLE mytab (a INT, b INT, c INT)  PARTITION BY ROUNDROBIN PARTITIONS 4;

select * from sys.m_cs_partitions where table_name='mytab';

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 废话少说,直接讲分区语法。 Oracle表分区分为四种:范围分区,散列分区,列表分区和复合分区。 一:范围分区 就...
    明明德撩码阅读 4,697评论 0 3
  • mysql分区 Mysql支持水平分区,并不支持垂直分区;水平分区:指将同一表中不同行的记录分配到不同的物理文件中...
    Gundy_阅读 4,485评论 0 2
  • 面试问题: 1)什么场景,应该用什么分区策略? 2)怎么选择分区字段和相关算法? 3)怎么解决不均匀和扩容问题? ...
    hedgehog1112阅读 4,106评论 0 6
  • MYSQL在创建表时使用PATITION BY子句定义每个分区存放的数据。在执行查询时,优化器会过滤那些没有我们需...
    阿长_一个程序员阅读 3,907评论 0 0
  • 一,什么是数据库分区前段时间写过一篇关于mysql分表的的文章,下面来说一下什么是数据库分区,以mysql为例。m...
    MrKai平凡之路阅读 4,902评论 0 5

友情链接更多精彩内容