ORACLE 19 C試食、新特性の混合パーティション表


ハイブリッドパーティション表
Oracleハイブリッド・パーティション・テーブルは、従来の内部パーティション・テーブルと外部パーティション・テーブルを組み合わせることで、ハイブリッド・パーティション・テーブルと呼ばれるより一般的なパーティションを形成します.
混合パーティション表を有効にすると、内部パーティションと外部パーティションを単一のパーティション表に統合しやすくなります.この機能により、非アクティブなパーティションを外部ファイルに容易に移動でき、ストレージソリューションのコストを削減できます.
混合パーティション表のパーティションはoracle表領域と外部ソースに存在することができ、カンマ区切り記号(CSV)で記録されたLinuxファイルやjavaサービスを使用したHDFS上のファイルなどの列があります.混合パーティション表は既存の外部表タイプの外部パーティションをサポートする:ORACLE_DATAPUMP,ORACLE_LOADER,ORACLE_HDFS,ORACLE_HIVE.外部パーティションの外部テーブルタイプは、次のアクセスドライバタイプを使用します:・ORACLE_DATAPUMP · ORACLE_LOADER · ORACLE_HDFS · ORACLE_HIVE対ORACLE_LOADERとORACLE_DATAPUMPの外部パーティションアクセスドライバタイプは、・データファイルが存在するディレクトリのREAD権限・ログファイルとエラーファイルが存在するディレクトリのWRITE権限・プリプロセッサが存在するディレクトリのEXECUTE権限をユーザに付与する必要がある
テーブル・レベルの外部パラメータは、ハイブリッド・パーティション・テーブルのすべてのパーティションに適用されます.たとえば、EXTERNAL PARTITION ATTRIBUTES文で定義されたDEFAULT DIRECTORY値は、データファイル、ログファイル、エラーファイルのデフォルトの場所です.デフォルトのディレクトリ位置は、パーティション文でDEFAULT DIRECTORYを使用して上書きできます.ORACLE_についてHIVEとORACLE_HDFSはドライバタイプの外部パーティションにアクセスし、DEFAULT DIRECTORYは指定したログファイルを保存するためにユーザーのみを使用します.
外部パーティションに格納されているデータでは、制約がテーブル全体に適用されるため、制約実行はサポートされません.たとえば、プライマリ・キーと外部キーの制約は、ブレンド・パーティション・テーブルで強制的に実行できません.NOT NULL、プライマリ・キー制約、一意制約、外部キー制約などの制約は、RELY DISABLEモードでのみサポートされます.これらの制約の動的最適化に基づいて、セッションパラメータQUERY_を設定する必要があります.REWRITE_INTEGRITY、TRUSTEDまたはSTALE_TOLERATED.
混合パーティション表は、内部パーティションと外部パーティションによってパーティションベースの最適化を使用できます.パーティションベースの最適化には、・Static partition pruning・Dynamic partition pruning・Bloom pruningの内部および外部データ・ソースが含まれます.
ハイブリッドパーティションテーブルは、内部パーティションと外部パーティションがデータを移動する機能を提供します.ただし、テーブルレベルでのADOの定義は、テーブルの内部パーティションに影響します.
ハイブリッドパーティションテーブルの操作をサポート
混合パーティション表でサポートされているアクションは、次のとおりです.
・単一レベルのRANGEとLISTパーティションを作成する方法・ALTER TABLEを使用する…DDLs列例えばADD、DROPとRENAMEパーティション・外部パーティションで外部データソースのパーティションレベルを変更する(翻訳の正確さが分からない)・既存の内部パーティション表を内部と外部の部分領域を含む混合パーティション表に変更する・既存の位置を空に変更する外部パーティションを空にする・内部パーティションにグローバル部分非一意インデックスを作成する・内部パーティションに物体化ビューを作成する・QUERY_REWRITE_INTEGRITY 、STALE TOLERATEモードで外部パーティションを含むマテリアライズド・ビューを作成・外部パーティションですべてのパーティションの完全リフレッシュをサポート・ミキシングパーティション表の内部パーティションでDMLフリップフロップ操作が可能・ミキシングパーティション表でANALYZE TABLEを使用…VALLIDATE STRUCTURE内のみチェック・既存の外部パーティションを持たないミキシングパーティション表を内のみに変更一部のパーティションのパーティション・テーブル・内部パーティションは、外部非パーティション・テーブルに変更できます.逆もまた然り.
ハイブリッドパーティションテーブルの制限(遅すぎて翻訳できません)
Restrictions on Hybrid Partitioned Tables The following are restrictions and limitations on hybrid partitioned tables. • Restrictions that apply to external tables also apply to hybrid partitioned tables unless explicitly noted • No support for REFERENCE and SYSTEM partitioning methods • Only single level LIST and RANGE partitioning are supported. • No unique indexes or global unique indexes. Only partial indexes are allowed and unique indexes cannot be partial. • Only single level list partitioning is supported for HIVE. • Attribute clustering (CLUSTERING clause) is not allowed. • DML operations only on internal partitions of a hybrid partitioned table (external partitions are treated as read-only partitions) • In-memory defined on the table level only has an effect on internal partitions of the hybrid partitioned table. • No column default value • Invisible columns are not allowed. • The CELLMEMORY clause is not allowed. • SPLIT, MERGE, and MOVE maintenance operations are not allowed on internal partitions. • LOB, LONG, and ADT types are not allowed. • Only RELY constraints are allowed
例:
SYSユーザーを使用したハイブリッドパーティションテーブルの作成
#ディレクトリの作成
SQL> CREATE DIRECTORY sales_data AS '/home/oracle/sales_data';

Directory created.

#  
SQL> GRANT READ,WRITE ON DIRECTORY sales_data TO hr;

Grant succeeded.

#    2
SQL> CREATE DIRECTORY sales_data2 AS '/home/oracle/sales_data2';

Directory created.

SQL> GRANT READ,WRITE ON DIRECTORY sales_data2 TO hr;

Grant succeeded.

SQL> CREATE DIRECTORY sales_data3 AS '/home/oracle/sales_data3';

Directory created.

SQL> GRANT READ,WRITE ON DIRECTORY sales_data3 TO hr;

Grant succeeded.

SQL> CREATE DIRECTORY sales_data_acfs AS '/home/oracle/acfs1';

Directory created.

SQL> GRANT READ,WRITE ON DIRECTORY sales_data_acfs TO hr;

Grant succeeded.

通常のRANGEパーティションテーブルの作成
SQL> conn hr/hr;
Connected.

CREATE TABLE hybrid_partition_table
  ( prod_id       NUMBER        NOT NULL,
    cust_id       NUMBER        NOT NULL,
    time_id       DATE          NOT NULL,
    channel_id    NUMBER        NOT NULL,
    promo_id      NUMBER        NOT NULL,
    quantity_sold NUMBER(10,2)  NOT NULL,
    amount_sold   NUMBER(10,2)  NOT NULL
  )
    EXTERNAL PARTITION ATTRIBUTES (
      TYPE ORACLE_LOADER 
      DEFAULT DIRECTORY sales_data
       ACCESS PARAMETERS(
         FIELDS TERMINATED BY ','
         (prod_id,cust_id,time_id DATE 'dd-mm-yyyy',channel_id,promo_id,quantity_sold,amount_sold)
       ) 
      REJECT LIMIT UNLIMITED
     ) 
    PARTITION BY RANGE (time_id)
    (PARTITION sales_2014 VALUES LESS THAN (TO_DATE('01-01-2015','dd-mm-yyyy')),
     PARTITION sales_2015 VALUES LESS THAN (TO_DATE('01-01-2016','dd-mm-yyyy')),
     PARTITION sales_2016 VALUES LESS THAN (TO_DATE('01-01-2017','dd-mm-yyyy')) EXTERNAL 
          LOCATION ('sales2016_data.txt'),
     PARTITION sales_2017 VALUES LESS THAN (TO_DATE('01-01-2018','dd-mm-yyyy')) EXTERNAL 
          DEFAULT DIRECTORY sales_data2 LOCATION ('sales2017_data.txt'),
     PARTITION sales_2018 VALUES LESS THAN (TO_DATE('01-01-2019','dd-mm-yyyy')) EXTERNAL 
          DEFAULT DIRECTORY sales_data3 LOCATION ('sales2018_data.txt'),
     PARTITION sales_2019 VALUES LESS THAN (TO_DATE('01-01-2020','dd-mm-yyyy')) EXTERNAL
          DEFAULT DIRECTORY sales_data_acfs LOCATION ('sales2019_data.txt')
   );

Table created.

#範囲パーティションテーブルhybrid_partition_tableに外部パーティションを追加
ALTER TABLE hybrid_partition_table 
      ADD PARTITION sales_2020 VALUES LESS THAN (TO_DATE('01-01-2021','dd-mm-yyyy'))    
      EXTERNAL DEFAULT DIRECTORY sales_data_acfs  LOCATION ('sales2020_data.txt');

Table altered.

未完待機