庫(kù)表管理函數(shù)
Hologres兼容PostgreSQL,當(dāng)前支持查看表和數(shù)據(jù)庫(kù)存儲(chǔ)大小,以及設(shè)置數(shù)據(jù)庫(kù)和表的屬性。
函數(shù) | 功能 |
用于設(shè)置數(shù)據(jù)庫(kù)的Table Group和Shard Count屬性。 | |
支持查看表的明細(xì)存儲(chǔ),包括數(shù)據(jù)、Binlog等存儲(chǔ)明細(xì)。 | |
查看當(dāng)前連接的數(shù)據(jù)庫(kù)和該數(shù)據(jù)庫(kù)下內(nèi)部表的存儲(chǔ)規(guī)格大小。 | |
查看表的存儲(chǔ)大小。 | |
用于設(shè)置表的屬性,包括索引、分布列、行存儲(chǔ)、列存儲(chǔ)以及生命周期等屬性。 |
HG_UPDATE_DATABASE_PROPERTY
描述:用于設(shè)置數(shù)據(jù)庫(kù)的Table Group和Shard Count屬性。
CALL HG_UPDATE_DATABASE_PROPERTY ('property', 'value');
使用限制
僅實(shí)例的Superuser和數(shù)據(jù)庫(kù)的Owner可以調(diào)用
HG_UPDATE_DATABASE_PROPERTY
函數(shù)。參數(shù)說(shuō)明
property:屬性名稱。當(dāng)前僅支持default_table_group和shard_count兩個(gè)屬性,屬性說(shuō)明如下:
default_table_group:設(shè)置某個(gè)Table Group為默認(rèn)Table Group。
說(shuō)明僅Hologres V0.10及以上版本支持使用此參數(shù)。如果您的實(shí)例是V0.10以下版本,您可以進(jìn)行實(shí)例升級(jí)或加入Hologres釘釘交流群反饋,詳情請(qǐng)參見(jiàn)如何獲取更多的在線支持?。
shard_count:設(shè)置默認(rèn)Table Group的Shard Count(不建議使用)。
value:屬性值。
示例
設(shè)置默認(rèn)Table Group為
TG120
的Table Group,語(yǔ)句如下。CALL HG_UPDATE_DATABASE_PROPERTY ( 'default_table_group', 'TG120' );
HOLOGRES.HG_RELATION_SIZE
描述:支持查看表的明細(xì)存儲(chǔ),包括數(shù)據(jù)、Binlog等存儲(chǔ)明細(xì)。
SELECT HOLOGRES.HG_RELATION_SIZE('schema.table'[, 'type']) ;
使用限制
僅Hologre V2.1及以上版本支持使用該函數(shù)。
說(shuō)明如果您的實(shí)例是V2.1以下版本,您可以進(jìn)行實(shí)例升級(jí)或加入Hologres釘釘交流群反饋,詳情請(qǐng)參見(jiàn)如何獲取更多的在線支持?。
參數(shù)說(shuō)明
schema.table:表的Schema名稱和表名稱。
type:可選,取值說(shuō)明如下:
data:查看表數(shù)據(jù)的存儲(chǔ)大小。
binlog:查看表Binlog的存儲(chǔ)大小。
mv:如果為該表創(chuàng)建了物化視圖,查看物化視圖占用的存儲(chǔ)大小。
all:查看表的總存儲(chǔ)量。
示例
以下示例使用通用聚合函數(shù)的示例數(shù)據(jù)。
示例1:查看單表的數(shù)據(jù)存儲(chǔ)。
SELECT HOLOGRES.HG_RELATION_SIZE ('public.example_table', 'data');
示例2:查看單表的Binlog存儲(chǔ)大小。
SELECT HOLOGRES.HG_RELATION_SIZE ('public.example_table', 'binlog');
示例3:查看數(shù)據(jù)庫(kù)下所有表的存儲(chǔ)大小。
SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(hologres.hg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name),'data')) AS data_size, hologres.hg_relation_size(quote_ident(table_schema) || '.' || quote_ident(table_name),'data') AS order_size FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog','information_schema','hologres','hologres_statistic') ORDER BY order_size DESC;
PG_DATABASE_SIZE
描述:查看當(dāng)前連接的數(shù)據(jù)庫(kù)和該數(shù)據(jù)庫(kù)下內(nèi)部表的存儲(chǔ)規(guī)格大小。
SELECT PG_DATABASE_SIZE('database_name');
參數(shù)說(shuō)明
database_name:必填,當(dāng)前數(shù)據(jù)庫(kù)名稱。
返回值說(shuō)明
返回當(dāng)前數(shù)據(jù)庫(kù)下面所有表的大小和數(shù)據(jù)庫(kù)下面產(chǎn)生的WAL(Write-Ahead Log)日志大小。
示例
SELECT PG_SIZE_PRETTY(PG_DATABASE_SIZE(CURRENT_DATABASE()));
PG_RELATION_SIZE
描述:查看表的存儲(chǔ)大小。
SELECT PG_RELATION_SIZE('table_name');
PG_RELATION_SIZE
函數(shù)統(tǒng)計(jì)的是表的存儲(chǔ)量,監(jiān)控指標(biāo)采集的是實(shí)例在整個(gè)Pangu目錄的文件存儲(chǔ)量,Pangu文件包括表的存儲(chǔ)量、元數(shù)據(jù)文件以及因?qū)懭搿⒏隆h除產(chǎn)生的臨時(shí)文件等,因此監(jiān)控指標(biāo)的存儲(chǔ)量會(huì)稍微多于使用PG_RELATION_SIZE
函數(shù)查詢的結(jié)果。使用限制
僅Hologres V1.3.24及以上版本支持使用該函數(shù)查看已經(jīng)開(kāi)啟Hologres Binlog表的Binlog存儲(chǔ)量。
說(shuō)明如果您的實(shí)例是V1.3.24以下版本,您可以進(jìn)行實(shí)例升級(jí)或加入Hologres釘釘交流群反饋,詳情請(qǐng)參見(jiàn)如何獲取更多的在線支持?。
僅支持查看內(nèi)部表的存儲(chǔ)規(guī)格大小,不支持直接查看分區(qū)父表,需要指定分區(qū)子表進(jìn)行查看。
參數(shù)說(shuō)明
table_name:待查看的表名稱。
返回值說(shuō)明
返回的數(shù)據(jù)為該表此刻的內(nèi)存所占空間和物理磁盤(pán)空間,返回的數(shù)據(jù)類型為字符串類型。
未指定分區(qū)子表,直接查看分區(qū)父表,則返回0。
如果查詢到表的存儲(chǔ)規(guī)格大小是0,則返回空值。
示例
以下示例使用通用聚合函數(shù)的示例數(shù)據(jù)。
查看單表存儲(chǔ)
--查看單表存儲(chǔ) SELECT PG_SIZE_PRETTY(PG_RELATION_SIZE('example_table'));
查看所有表的存儲(chǔ)大小
SELECT table_schema || '.' || table_name AS table_full_name, PG_SIZE_PRETTY(PG_RELATION_SIZE(QUOTE_IDENT(table_schema) || '.' || QUOTE_IDENT(table_name))) AS table_size, PG_RELATION_SIZE(QUOTE_IDENT(table_schema) || '.' || QUOTE_IDENT(table_name)) AS order_size FROM information_schema.tables WHERE table_schema NOT IN ('pg_catalog','information_schema','hologres') ORDER BY order_size DESC;
SET_TABLE_PROPERTY
描述:用于設(shè)置表的屬性,包括索引、分布列、行存儲(chǔ)、列存儲(chǔ)以及生命周期等屬性。
CALL SET_TABLE_PROPERTY ('table_name', 'property', 'value') WHERE PROPERTY IN orientation clustering_key segment_key bitmap_columns dictionary_encoding_columns time_to_live_in_seconds distribution_key
說(shuō)明如果您需要對(duì)創(chuàng)建的表進(jìn)行修改、更新和刪除,具體操作請(qǐng)參見(jiàn)ALTER TABLE或DROP TABLE。
參數(shù)說(shuō)明
參數(shù)
描述
table_name
表名稱。您也可以使用Schema限定表名稱。
說(shuō)明表名稱只能是小寫(xiě)英文字母
a~z
、大寫(xiě)英文字母A~Z
、數(shù)字以及下劃線(_)
的組合,并且以字母開(kāi)頭。如果表名稱有特殊字符,則需要使用雙引號(hào)
""
轉(zhuǎn)義。由于系統(tǒng)對(duì)大小寫(xiě)不敏感,大寫(xiě)字母A~Z
會(huì)被認(rèn)為是小寫(xiě)字母a~z
。
property
屬性名稱。
orientation
用于指定數(shù)據(jù)庫(kù)的表在Hologres中是列存儲(chǔ)、行存儲(chǔ)還是行列共存。
說(shuō)明該參數(shù)僅支持和
CREATE TABLE
在同一事務(wù)中執(zhí)行。clustering_key
用于在指定的列建立聚簇索引。
說(shuō)明該參數(shù)僅支持和
CREATE TABLE
在同一事務(wù)中執(zhí)行。segment_key
用于指定某些列作為分段鍵,例如,指定時(shí)間列作為分段鍵。當(dāng)查詢條件包含分段列時(shí),查詢可以通過(guò)分段鍵快速找到相應(yīng)數(shù)據(jù)對(duì)應(yīng)的存儲(chǔ)位置。
說(shuō)明該參數(shù)僅支持和
CREATE TABLE
在同一事務(wù)中執(zhí)行。bitmap_columns
用于在指定列構(gòu)建比特編碼,快速過(guò)濾分段內(nèi)部的數(shù)據(jù)。
說(shuō)明該參數(shù)可單獨(dú)使用數(shù)。
dictionary_encoding_columns
用于為指定列的值構(gòu)建字典映射。
說(shuō)明字典編碼可以轉(zhuǎn)換字符串的比較為數(shù)字的比較,加速Group By、Filter等查詢。您可以單獨(dú)使用該參數(shù)。
distribution_key
用于指定數(shù)據(jù)庫(kù)中表的分布策略。
說(shuō)明該參數(shù)僅支持和
CREATE TABLE
在同一事務(wù)中執(zhí)行。time_to_live_in_seconds
表數(shù)據(jù)的生命周期,取值為:非負(fù)數(shù)、整數(shù)或浮點(diǎn)數(shù),單位為秒(s)。
說(shuō)明該參數(shù)可單獨(dú)使用數(shù)。
value
屬性值,如果該參數(shù)包含列名,并且列名包含大寫(xiě)字母,則需要添加雙引號(hào)
""
。示例
BEGIN; CREATE TABLE ORDERS ( O_ORDERKEY INTEGER NOT NULL, O_CUSTKEY INTEGER NOT NULL, O_ORDERSTATUS TEXT NOT NULL, O_TOTALPRICE DECIMAL(15,2) NOT NULL, O_ORDERDATE DATE NOT NULL, O_ORDERPRIORITY TEXT NOT NULL, O_CLERK TEXT NOT NULL, O_SHIPPRIORITY INTEGER NOT NULL, O_COMMENT TEXT NOT NULL); CALL SET_TABLE_PROPERTY ('ORDERS', 'clustering_key', 'O_ORDERKEY:asc,O_CUSTKEY:asc'); CALL SET_TABLE_PROPERTY ('ORDERS', 'segment_key', 'O_ORDERDATE'); CALL SET_TABLE_PROPERTY ('ORDERS', 'bitmap_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY'); CALL SET_TABLE_PROPERTY ('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY'); CALL SET_TABLE_PROPERTY ('ORDERS', 'time_to_live_in_seconds', '172800'); COMMIT;