常用的兩種資料分區方法(以Teradata為例)

來源:互聯網
上載者:User

海量資料效能最佳化的一個基本的原則就是“分區”也有叫“分區”的)。分區思想其實就是日常工作生活中的抽屜原理:我們把自己的物品按照某種邏輯歸置到多個小抽屜中,一般會比混在一個大抽屜中好找;但是小抽屜太多了、或者邏輯混亂了,也可能效果適得其反。

Teradata的分區文法較為簡潔,其中常用的是按時間分區,如下例只要添加到create table語句末尾就可以實現2013年全年一天一個分區了為了省事,可以一次分5-10年)

 
  1. PARTITION BY RANGE_N(  

  2.     Rcd_Dt BETWEEN DATE '2013-01-01' AND DATE '2013-12-31'

  3.     EACH INTERVAL '1' DAY, NO RANGE

  4. ); 

另外一個常用但是不容易掌握)的是按字串取值分區。在上述按時間分區中我們可以看到RANGE_N關鍵字。按值分區採用CASE_N關鍵字,如下例所示:

 
  1. PARTITION BY CASE_N(   

  2.  (CASE WHEN (my_field='A') THEN (1) ELSE (0) END)=1,    

  3.  (CASE WHEN (my_field='B') THEN (2) ELSE (0) END)=2,    

  4.  (CASE WHEN (my_field='C') THEN (3) ELSE (0) END)=3,    

  5. NO CASE OR UNKNOWN);

更進一步,其中如下面的文法元素:

 
  1. my_field='A'

可以修改為類似於這樣的形式:

 
  1. SUBSTR(my_field,1,1) IN ('E','F','G') 

在現實中,因為訪問資料從全表掃描變成了分區掃描的原因,某些步驟可以達成10-100倍的效能提升。對於複雜的耗時較長的大作業,也總是能夠縮短一半以上的已耗用時間。非常有意思的現象是,即使是經驗豐富的開發人員,對資料分區的掌握也不一定很好。資料分區理念是超越具體資料庫的,無論是Teradata還是別的什麼資料庫,在我過去將近十年的職業生涯中,大多數效能問題都可以通過資料分區得以妥善解決。

本文出自 “iData” 部落格,請務必保留此出處http://idata.blog.51cto.com/4581576/1188058

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.