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.youkuaiyun.com/qptufly/article/details/7965305

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值