Vertica 分區表設計(續)


在上篇Vertica 分區表設計中,已經提過了Vertica的分區表創建和分區刪除,但舉例上並不系統,
本篇文章將系統的對分區表設計及后續的刪除分區進行講解。

概述:Vertica分區表(天和月)創建以及刪除分區

1.分區表創建

Vertica分區表可以使用預定義函數創建,有特殊需求時,也可以自定義函數創建。 我這里測試均是以業務用戶test登錄建表: vsql -Utest

1.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM