17.05 - 例: CASE_Nベースの行パーティション式の変更 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 構文規則および例

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-175K-JPN
Language
日本語 (日本)

式がCASE_N関数に基づく場合、ADDオプションおよびDROPオプションを使用して、テーブルに対するパーティション式を変更することはできません。例えば、以下のテーブルを作成します。

     CREATE SET TABLE hyp_prd_tbls.dps_sum, NO FALLBACK,
       NO BEFORE JOURNAL, NO AFTER JOURNAL,CHECKSUM = DEFAULT (
       hyp_month                  INTEGER NOT NULL,
       hyp_year                   INTEGER NOT NULL,
       churn_ctgry VARCHAR(30)    CHARACTER SET LATIN NOT CASESPECIFIC 
                                  NOT NULL,
       scenario VARCHAR(6)        CHARACTER SET LATIN NOT CASESPECIFIC 
                                  NOT NULL,
       in_contract_term           VARCHAR(30) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       promo_type VARCHAR(50)     CHARACTER SET LATIN NOT CASESPECIFIC 
                                  NOT NULL,
       access_tier_lvl1           VARCHAR(50) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       arpu_tier_lvl1             VARCHAR(50) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       hrchy_segmt                VARCHAR(50) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       channel_type               VARCHAR(40) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       ps_mkt_cd                  VARCHAR(6) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       tenure                     VARCHAR(12) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       tot_pplan_access_amt       DECIMAL(15,2),
       tot_feat_access_amt        DECIMAL(15,2),
       tot_occ_amt                DECIMAL(15,2),
       tot_airtime_call_amt       DECIMAL(15,2),
       churn_tot_pplan_access_amt DECIMAL(15,2),
       churn_tot_feat_access_amt  DECIMAL(15,2),
       churn_tot_occ_amt          DECIMAL(15,2),
       churn_tot_airtime_call_amt DECIMAL(15,2))
     PRIMARY INDEX (hyp_month, hyp_year, churn_ctgry, scenario,                     in_contract_term, promo_type, access_tier_lvl1,
                    arpu_tier_lvl1, hrchy_segmt, channel_type,                     ps_mkt_cd, tenure)
     PARTITION BY CASE_N(hyp_month = 200901, hyp_month = 200902,
                         hyp_month = 200903, hyp_month = 200904,
                         hyp_month = 200905, hyp_month = 200906,
                         hyp_month = 200907, hyp_month = 200908,
                         hyp_month = 200909, hyp_month = 200910,
                         hyp_month = 200911, hyp_month = 200912,
                         NO CASE);

DROPオプションおよびADDオプションは、RANGE関数に基づく行パーティション式にだけ使用できます。CASE_N関数に基づくパーティション式を変更するには、PARTITION BY句を指定する必要があります。

例えば、CASE_Nオプション(hyp_month = 201001、hyp_month = 201002、hyp_month = 201003、hyp_month = 201004)を表hyp_prd_tbls.dps_sumに追加するには、PARTITION BY句を使用して次のALTER TABLEリクエストを使用します。

     ALTER TABLE hyp_prd_tbls.dps_sum 
     PARTITION BY CASE_N(hyp_month = 200901, hyp_month = 200902,
                         hyp_month = 200903, hyp_month = 200904,
                         hyp_month = 200905, hyp_month = 200906,
                         hyp_month = 200907, hyp_month = 200908,
                         hyp_month = 200909, hyp_month = 200910,
                         hyp_month = 200911, hyp_month = 200912,
                         hyp_month = 201001, hyp_month = 201002,
                         hyp_month = 201003, hyp_month = 201004,
                         NO CASE);

このメソッドを使用してパーティションを変更する場合、テーブルには行が含まれていてはなりません。例えば、CREATE TABLE…AS…WITH DATAリクエストを使用して、そのテーブルを新しい テーブル定義にコピーするか、新しいテーブルを作成してからINSERT…SELECTまたはMERGEリクエストを使用して古いテーブルの行を新しいテーブルにコピーすることが必要になります。<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>の「CREATE TABLE (AS句)」を参照してください。

次の列パーティション テーブルとしてhyp_prd_tbls_sumを作成したとします。

     CREATE SET TABLE hyp_prd_tbls.dps_sum, NO FALLBACK,
            NO BEFORE JOURNAL, NO AFTER JOURNAL, CHECKSUM=DEFAULT (
       hyp_month                  INTEGER NOT NULL,
       hyp_year                   INTEGER NOT NULL,
       churn_ctgry VARCHAR(30)    CHARACTER SET LATIN NOT CASESPECIFIC 
                                  NOT NULL,
       scenario VARCHAR(6)        CHARACTER SET LATIN NOT CASESPECIFIC 
                                  NOT NULL,
       in_contract_term           VARCHAR(30) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       promo_type VARCHAR(50)     CHARACTER SET LATIN NOT CASESPECIFIC 
                                  NOT NULL,
       access_tier_lvl1           VARCHAR(50) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       arpu_tier_lvl1             VARCHAR(50) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       hrchy_segmt                VARCHAR(50) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       channel_type               VARCHAR(40) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       ps_mkt_cd                  VARCHAR(6) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       tenure                     VARCHAR(12) CHARACTER SET LATIN 
                                  NOT CASESPECIFIC NOT NULL,
       tot_pplan_access_amt       DECIMAL(15,2),
       tot_feat_access_amt        DECIMAL(15,2),
       tot_occ_amt                DECIMAL(15,2),
       tot_airtime_call_amt       DECIMAL(15,2),
       churn_tot_pplan_access_amt DECIMAL(15,2),
       churn_tot_feat_access_amt  DECIMAL(15,2),
       churn_tot_occ_amt          DECIMAL(15,2),
       churn_tot_airtime_call_amt DECIMAL(15,2))
     NO PRIMARY INDEX
     PARTITION BY (COLUMN,
                  CASE_N(hyp_month = 200801, hyp_month = 200802,
                         hyp_month = 200803, hyp_month = 200804,
                         hyp_month = 200805, hyp_month = 200806,
                         hyp_month = 200807, hyp_month = 200808,
                         hyp_month = 200809, hyp_month = 200810,
                         hyp_month = 200811, hyp_month = 200812,
                         NO CASE);

RANGE_NまたはCASE_N関数に基づき、行パーティションに対してDROPオプションとADDオプションを使用する同じルールが適用されます。

例えば、CASE_N関数に基づき、2番目のレベルの行パーティションを使用して、列パーティションのバージョンのhyp_prd_tbls.dps_sum内の既存の行パーティション式を変更し、CASE_Nパーティション(hyp_month = 201001、hyp_month = 201002、hyp_month  = 201003、hyp_month = 201004)を表hyp_prd_tbls.dps_sumに追加するには、次のALTER TABLEリクエストを使用します。

     ALTER TABLE hyp_prd_tbls.dps_sum 
     MODIFY
     PARTITION BY (COLUMN,
                   CASE_N(hyp_month = 200901, hyp_month = 200902,
                          hyp_month = 200903, hyp_month = 200904,
                          hyp_month = 200905, hyp_month = 200906,
                          hyp_month = 200907, hyp_month = 200908,
                          hyp_month = 200909, hyp_month = 200910,
                          hyp_month = 200911, hyp_month = 200912,
                          hyp_month = 201001, hyp_month = 201002,
                          hyp_month = 201003, hyp_month = 201004,
                          NO CASE));