SAP HANA HDB 分区管理 (一)

SAP HANA HDB 分区管理:

使用SAP HANA数据库的分区特性,可以把列存储的大数据表水平分割存储在不同的分区中。

SAP HANA的分区只能对列存储表使用,如果对行存储的表使用会出现语法错误。

错误信息:SAP DBTech JDBC: [257]: sql syntax error: not supported for row table

 

SAP HANA的分区表可以包含多个分区,每个分区都是独立的。

分区的有点:

负载均衡:使用表分区,各个分区的个体数据可以分布存储在不同的分布服务器中。对一张表进行查询时,不是由单一的服务器进行处理,而是分解到所有关联的主分区的服务器进行并行处理。同时数据分散到各个分区中,减少数据损坏。

并行性:操作并行性,操作并行使用几个执行线程对每张。对大表的查询、增加、修改等操作可以分解到表的不同分区来并行执行,可使运行速度更快

分区修剪:查询分析,看看是否匹配给定的分区规格一个如果找到匹配它有可能确定的实际分区(保存数据问题)使用这种方法可以减少系统的负载响应时间也更好的

明确的分区处理:SAP HANA数据库会主动控制分区,例如:增加分区来存储为即将到来的一个月的数据

限制一个非分区表不能存储超过2亿行数据,通过使用分区限制可以克服把表由分布到几个分区进行存储。但请注意每个分区不能超过2亿行数据。

性能: SAP HANA数据库增量合并的性能依赖于数据库主索引的大小,如果数据只有在一部分的分区中被修改,那么会有很少的一部分数据需要做增量合并,这样对数据库的性能更好。 

 

修改-删除分区:

ALTER TABLE mytab ADD PARTITION OTHERS
ALTER TABLE mytab DROP PARTITION OTHERS

查看表分区的情况:

 select * from sys.M_CS_PARTITIONS where table_name =  tablename

 

SAP HANA 提供的分区类型:

单级分区(single-level partitioning):   HASH, Range,Round-Robin.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

范围分区(Range partitioning):

范围分区可以用来创建一个专用的分区,范围可以是一个定值也可以使一个范围。您可以选择把每季度的数据放在一个分区内,也可为一年中每个月份都创建一个分区。

另外还可以选择使用范围分区主动管理的分区表,分区可以被创建或删除,如:数据库可以创建一个分区为即将到来的一个新的数据将被插入到新的分区中

如果插入一条数据没有匹配上任何一个分区的条件,SAP HANA会反馈一个错误信息,为了避免这种情况,在创建分区时,需要创建一个剩余分区(rest partition).

注意:范围分区适合负荷分配。

范围分区对数据类型的限制:仅仅对字符串整数,日期是可以使用的。

语法:进行分区的字段必须是主键的一部分

创建整数类型的分区:INT

CREATE COLUMN TABLE mytab (a INT, b INT, c INT, PRIMARY KEY (a,b))  PARTITION BY RANGE (a)
(PARTITION 1 <= VALUES < 5,
 PARTITION 5 <= VALUES < 20,
 PARTITION VALUE = 44,
 PARTITION OTHERS)

创建一个范围的分区用: PARTITION    <= VALUES < 

创建一个定值的分区用: PARTITION    VALUE =

创建一个剩余分区用:     PARTITION    OTHERS

删除一个范围的分区用:alter table mytab drop partition 1 <= VALUES < 5

删除一个定值的分区用:alter table mytab2 drop partition VALUE = 44

删除一个剩余分区用:    alter table mytab2 drop partition OTHERS

 

创建日期类型分区:Date

CREATE COLUMN TABLE TEST_RANGE_PARTITION_DATE (ID INT,NAME VARCHAR(20),BIRTHDAY DATE,PRIMARY KEY(ID,BIRTHDAY))
PARTITION BY RANGE(BIRTHDAY) (

PARTITION   '2011-12-31' <= VALUES < '2012-04-01',

PARTITION OTHERS)

 

创建字符串类型分区:String

CREATE COLUMN TABLE TEST_RANGE_PATITION_STRING (ID INT,CITY VARCHAR(20),DESCRIPTION VARCHAR(50), PRIMARY KEY(ID,CITY))
PARTITION BY RANGE(CITY)(
PARTITION  VALUES = '广州' ,
PARTITION  VALUES = '上海',
PARTITION  VALUES = '厦门',
PARTITION  OTHERS
)

 

分区的字段不是主键的一部分的情况:

CREATE COLUMN TABLE TEST_RANGE_PATITION_STRING_NOKEY (ID INT,CITY VARCHAR(20),DESCRIPTION VARCHAR(50),PRIMARY KEY(ID))
PARTITION BY RANGE(CITY)(
PARTITION  VALUES = '广州' ,
PARTITION  VALUES = '上海',
PARTITION  VALUES = '厦门',
PARTITION  OTHERS
)

错误信息:SAP DBTech JDBC: [435] (at 140): invalid expression: partition column should be included in primary key columns: CITY: line 2 col 20 (at pos 140)

 

没有创建剩余分区:(rest partition)

CREATE COLUMN TABLE mytab_test (a INT, b INT, c INT, PRIMARY KEY (a,b))  PARTITION BY RANGE (a)
(PARTITION 1 <= VALUES < 5,
 PARTITION 5 <= VALUES < 20,
 PARTITION VALUE = 44
)

INSERT INTO MYTAB_TEST VALUES (55,5,55);    a的值为55没有落在任何一个分区内。

错误信息:Could not execute 'insert into mytab_test values (55,5,55)'
SAP DBTech JDBC: [2048] (at 24): column store error: [2592] Error allocating rows to parts;Could not allocate value '55' for column 'A' to a part. The table has no rest part. Create a new partition for the value.

 

增加分区:对mytab_test 表增加  rest partition

ALTER TABLE MYTAB_TEST ADD PARTITION OTHERS; 

INSERT INTO MYTAB_TEST VALUES (55,5,55); 

执行信息:

Statement 'ALTER TABLE MYTAB_TEST ADD PARTITION OTHERS' successfully executed in 41 ms 439 µs  - Rows Affected: 0
Statement 'INSERT INTO MYTAB_TEST VALUES (55,5,55)' successfully executed in 58 ms 119 µs  - Rows Affected: 1

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SAP HANA HDB 分区管理 (二)                             http://blog.csdn.net/qptufly/article/details/7965305

你可能感兴趣的:(SAP)