Greenplum介紹-PartitionedTable
GP支援分割槽表,主要用來存放大表,如fact table
目的:
1. 把大資料切片,便於查詢
2. 便於資料庫維護
分割槽建立時,每個分割槽會自帶一個Check約束,來限定資料的範圍。Check約束也用於 執行查詢時定位分割槽。
支援分割槽型別:
1. 範圍分割槽 range partition
2. 列表分割槽 list partition
3. 組合分割槽
——-partition 和 distribution的區別——
distribution — 物理上拆分表資料、能並行執行查詢
partition — 邏輯上拆分大表資料提高查詢效能、利於資料倉儲維護工作
——表分割槽策略——
@ 表是否足夠大?
大事實表可以選擇分割槽。如果一個表有幾百萬或10億資料量,你可以看到效能上的優勢。
如果只是幾千行或者更小的表的話,dba將在維護分割槽花費大量的精力,小表不要建分割槽,直接full table scan。
@ 是否對現有效能不滿意?
當表的查詢響應時間比預期要慢的話,可以考慮用分割槽表
@ 是否能夠判斷查詢可以使用固定範圍或固定值來做限定條件?
where子句中是否使用分割槽欄位。
例如:經常按日誌來查詢,可以按月或周來範圍分割槽。或按地區來查的話,可以按地區來做列表分割槽。
@ 是否需要維護你資料倉儲中的大量歷史記錄?
分割槽設計另外一個考量是根據業務要求來決定歷史資料的儲存。
例如:資料倉儲只要保留過去12個月的資料。如果是按月分割槽的話,你很容易刪掉歷史分割槽並載入資料到當前幾個月份中。
@ 是否能基於一些定義規則將資料分成等份?
你應該選擇儘可能的將資料等分。如果分割槽中包含等數量記錄,則查詢效能提升基於已建立的分割槽數量。
例如:一個大表被分成10個分割槽,執行一個查詢將比非分割槽錶快10倍。
——建立分割槽表——
[時間範圍分割槽]
2中建立方式:
==》CREATE TABLE sales (id int, date date, amt decimal(10,2))
DISTRIBUTED BY (id)
PARTITION BY RANGE (date)
( START (date `2008-01-01`) INCLUSIVE
END (date `2009-01-01`) EXCLUSIVE
EVERY (INTERVAL `1 day`) ); –時間間隔
==> CREATE TABLE sales (id int, date date, amt decimal(10,2))
DISTRIBUTED BY (id)
PARTITION BY RANGE (date)
( PARTITION Jan08 START (date `2008-01-01`) INCLUSIVE ,
PARTITION Feb08 START (date `2008-02-01`) INCLUSIVE ,
PARTITION Mar08 START (date `2008-03-01`) INCLUSIVE ,
PARTITION Apr08 START (date `2008-04-01`) INCLUSIVE ,
PARTITION May08 START (date `2008-05-01`) INCLUSIVE ,
PARTITION Jun08 START (date `2008-06-01`) INCLUSIVE ,
PARTITION Jul08 START (date `2008-07-01`) INCLUSIVE ,
PARTITION Aug08 START (date `2008-08-01`) INCLUSIVE ,
PARTITION Sep08 START (date `2008-09-01`) INCLUSIVE ,
PARTITION Oct08 START (date `2008-10-01`) INCLUSIVE ,
PARTITION Nov08 START (date `2008-11-01`) INCLUSIVE ,
PARTITION Dec08 START (date `2008-12-01`) INCLUSIVE
END (date `2009-01-01`) EXCLUSIVE ); –在最後要寫個end
[數字範圍分割槽]
==>CREATE TABLE rank (id int, rank int, year int, gender
char(1), count int)
DISTRIBUTED BY (id)
PARTITION BY RANGE (year)
( START (2001) END (2008) EVERY (1),
DEFAULT PARTITION extra );
[列表分割槽]
==>CREATE TABLE rank (id int, rank int, year int, gender
char(1), count int )
DISTRIBUTED BY (id)
PARTITION BY LIST (gender) –可以使用多列
( PARTITION girls VALUES (`F`),
PARTITION boys VALUES (`M`),
DEFAULT PARTITION other );
——多級分割槽——
==>CREATE TABLE sales (id int, year int, month int, day int,
region text)
DISTRIBUTED BY (id)
PARTITION BY RANGE (year)
SUBPARTITION BY RANGE (month)
SUBPARTITION TEMPLATE (
START (1) END (13) EVERY (1),
DEFAULT SUBPARTITION other_months )
SUBPARTITION BY LIST (region)
SUBPARTITION TEMPLATE (
SUBPARTITION usa VALUES (`usa`),
SUBPARTITION europe VALUES (`europe`),
SUBPARTITION asia VALUES (`asia`),
DEFAULT SUBPARTITION other_regions )
( START (2002) END (2010) EVERY (1),
DEFAULT PARTITION outlying_years );
——普通表 轉 分割槽表 ——-
==>CREATE TABLE sales2 (LIKE sales)
PARTITION BY RANGE (date)
( START (date `2008-01-01`) INCLUSIVE
END (date `2009-01-01`) EXCLUSIVE
EVERY (INTERVAL `1 month`) );
==>INSERT INTO sales2 SELECT * FROM sales;
==>DROP TABLE sales;
==>ALTER TABLE sales2 RENAME TO sales;
==>GRANT ALL PRIVILEGES ON sales TO admin;
==>GRANT SELECT ON sales TO guest;
——選擇性分割槽掃描的一些限制—–
限制條件:
1. 條件中使用簡單直接的限制操作符(如:= < <= > >= <>),可以選擇性掃描分割槽
2. 不能識別變化性函式,只能是固定值
例如:where語句中 date > current_date可以做範圍掃描。 但是time > timeofday則不行。
3. 不確定的值是無法做runtime評估,必須要指定明確的值
例如:SELECT * from partition_table PT, other_table OT WHERE
PT.id=OT.id and OT.some_column = `value`;
–value必須指定值
——檢視錶分割槽——-
pg_partitions – 檢視建立分割槽資訊
pg_partition_templates – 檢視是用subpartition模板建立的子分割槽
pg_partition_column – 檢視分割槽欄位
關於修改表分割槽的語法,參考官方文件。
原文網址:http://blog.sina.com.cn/s/blog_90474a9201013k74.html
相關文章
- 【greenplum】greenplum叢集搭建
- 介紹
- 《Greenplum構建實時資料倉儲實踐》簡介
- LAMP架構介紹、MYSQL介紹、安裝LAMP架構MySql
- php介紹PHP
- CSRedisCore 介紹Redis
- BitMap介紹
- GeoServer介紹Server
- RabbitMQ 介紹MQ
- 模式介紹模式
- Pyzmq介紹MQ
- Java介紹Java
- css介紹CSS
- kafka介紹Kafka
- 【RESTEasy 介紹】REST
- Kafka 介紹Kafka
- PostgreSQLHooK介紹SQLHook
- nginx介紹Nginx
- 埠介紹
- MongoDB介紹MongoDB
- docker 介紹Docker
- TypeScript介紹TypeScript
- Smbclient介紹client
- JVM 介紹JVM
- Spark介紹Spark
- MQT介紹MQQT
- HttpClient介紹HTTPclient
- Mongoose介紹Go
- JCache 介紹
- Yocto 介紹
- Docker介紹Docker
- GO 介紹Go
- GraphRAG介紹
- github介紹Github
- Ceph介紹
- MySql介紹MySql
- 公文介紹
- Ninja介紹