在上篇Vertica 分區表設計中,已經提過了Vertica的分區表創建和分區刪除,但舉例上並不系統,
本篇文章將系統的對分區表設計及后續的刪除分區進行講解。
概述:Vertica分區表(天和月)創建以及刪除分區
1.分區表創建
Vertica分區表可以使用預定義函數創建,有特殊需求時,也可以自定義函數創建。 我這里測試均是以業務用戶test登錄建表: vsql -Utest1.1 使用預定義函數創建分區表
按天分區(doy)
--按天分區(doy)
create table t_jingyu_doy(
col1 int,
col2 varchar,
col3 timestamp not null)
PARTITION BY (date_part('doy', col3));
按月分區(month)
--按月分區(month)
create table t_jingyu_month(
col1 int,
col2 varchar,
col3 timestamp not null)
PARTITION BY (date_part('month', col3));
1.2 使用自定義函數創建分區表
按天分區
--按天分區
create table t_day(
col1 int,
col2 varchar,
col3 timestamp not null)
PARTITION BY (EXTRACT(year FROM col3)*10000
+ EXTRACT(month FROM col3)*100 +
EXTRACT(day FROM col3));
按月分區
--按月分區
create table t_month(
col1 int,
col2 varchar,
col3 timestamp not null)
PARTITION BY (EXTRACT(year FROM col3)*100 +
EXTRACT(month FROM col3));
2.查詢業務表的基本信息
查詢業務表的基本信息: ``` --所有表 select table_schema, owner_name, table_name, partition_expression from tables; --未分區的表 select table_schema, owner_name, table_name, partition_expression from tables where partition_expression=''; --分區的表 select table_schema, owner_name, table_name, partition_expression from tables where partition_expression <> ''; ```3.Vertica入庫測試數據
入庫須知: • 數據庫字符集utf-8 • 入庫文件編碼格式: utf-8無BOM格式編碼 • 主機系統字符集: zh_CN.UTF-8 • CRT軟件字符集: utf-8我們這里入庫2年(每天1條)的測試數據供后面講解刪除分區數據用。 col3時間列是2年中每一天的時間。
入庫具體方法可以參見:Vertica 業務用戶指定資源池加載數據
4.刪除歷史分區數據
## 4.1 刪除歷史分區數據(使用預定義函數創建的分區表) ## ``` --按天分區(doy),刪除”2015-08-01”這一時間的分區數據 SELECT DROP_PARTITION('test.t_jingyu_doy', EXTRACT('doy' FROM '2015-08-01'::date)); test=> SELECT DROP_PARTITION('test.t_jingyu_doy', EXTRACT('doy' FROM '2015-08-01'::date)); DROP_PARTITION ------------------- Partition dropped (1 row) 測試結論:實際刪除2天的數據, 2015和2016年的這一天數據都被刪除, 而且第二年不一定就是8月1日。--按月分區(month),刪除”2015-08”這一個月的分區數據
SELECT DROP_PARTITION('test.t_jingyu_month', EXTRACT('month' FROM '2015-08-01'::date));
test=> SELECT DROP_PARTITION('test.t_jingyu_month', EXTRACT('month' FROM '2015-08-01'::date));
DROP_PARTITION
Partition dropped
測試結論:實際刪除2個月的數據, 2015和2016年的8月份的數據。
## 4.2 刪除歷史分區數據(使用自定義函數創建的分區表) ##
--按天分區,刪除2015-08-01這一時間的分區數據
SELECT DROP_PARTITION('test.t_day', 20150801);
test=> SELECT DROP_PARTITION('test.t_day', 20150801);
DROP_PARTITION
Partition dropped
(1 row)
--按月分區,刪除2015-08這一個月的分區數據
SELECT DROP_PARTITION('test.t_month', 201508);
test=> SELECT DROP_PARTITION('test.t_month',201508);
DROP_PARTITION
Partition dropped
<h1 id="5">Reference</h1>
本篇內容其實之前在我給公司項目組的培訓中已經提過,但未在博客中整理,現在更新到博客。
附當時培訓視頻和資料的雲盤地址:https://pan.baidu.com/s/1c2LuZSW