すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:テーブルの管理

最終更新日:Sep 29, 2024

AnalyticDB for PostgreSQLテーブルは、リレーショナルデータベースのテーブルと似ていますが、テーブル行が計算ノードに分散されている点が異なります。 テーブル内の行の分布は、テーブルの分布ポリシーによって決まります。

標準テーブルの作成

CREATE TABLEステートメントを使用して、テーブルを作成できます。 テーブルを作成するときは、次の項目を定義できます。

CREATE TABLEステートメントを実行して、テーブルを作成します。 次の構文が使用されます。

CREATE TABLE table_name ( 
[ { column_name data_type [ DEFAULT default_expr ]   -- Define a column for the table.
   [column_constraint [ ... ]                        -- Define a constraint for the column.
] 
   | table_constraint                                -- Define a constraint for the table.                            
   ])
   [ WITH ( storage_parameter=value [, ... ] )       -- Define the storage model for the table.
   [ DISTRIBUTED BY (column, [ ... ] ) | DISTRIBUTED RANDOMLY ]  -- Define a distribution key for the table.          
   [ partition clause]                               -- Define a partitioning strategy for the table.
                

例:

この例では、trans_idが配布キーとして使用され、日付ベースの範囲分割が指定されています。

CREATE TABLE sales (
  trans_id int,
  date date, 
  amount decimal(9,2), 
  region text)
  DISTRIBUTED BY (trans_id)  
  PARTITION BY RANGE(date)    
  (start (date '2018-01-01') inclusive
   end (date '2019-01-01') exclusive every (interval '1 month'),
   default partition outlying_dates);

一時テーブルの作成

一時テーブルは、一時データと中間データを格納するために使用されます。 ユーザー定義の設定に基づいて、セッションの最後に自動的に削除されるか、現在のトランザクションの最後に削除されます。 次のステートメントを使用して、一時テーブルを作成できます。

CREATE TEMPORARY TABLE table_name(...)
    [ON COMMIT {PRESERVE ROWS | DELETE ROWS | DROP}]
説明

ON COMMIT句を使用して、現在のトランザクションの最後にテーブルに対して実行する操作を決定できます。

  • PRESERVE ROWS: データは現在のトランザクションの最後に保持されます。 これはデフォルトの操作です。

  • DELETE ROWS: 現在のトランザクションの最後にすべての行が削除されます。

  • DROP: 現在のトランザクションの最後に一時テーブルが削除されます。

例:

現在のトランザクションの最後に削除する一時テーブルを作成します。

CREATE TEMPORARY TABLE temp_foo (a int, b text) ON COMMIT DROP;

制約の定義

テーブルまたは列の制約を定義して、テーブル内のデータを制限できます。 制約を定義するときは、次の項目に注意してください。

  • CHECK制約は、制約が定義されているテーブル内の列のみを参照できます。

  • UNIQUEおよびPRIMARY KEY制約には、配布キーを含める必要があります。 このような制約は、追加最適化 (AO) テーブルまたは列指向テーブルでは使用できません。

  • FOREIGN KEY制約は許可されますが、強制されません。

  • テーブルの1つのパーティションで定義した制約は、テーブルの他のパーティションにも使用されます。 制約定義を個々のパーティションに限定することはできません。

次の構文が使用されます。

UNIQUE ( column_name [, ... ] )
   | PRIMARY KEY ( column_name [, ... ] ) 
   | CHECK ( expression )
   | FOREIGN KEY ( column_name [, ... ] )
            REFERENCES table_name [ ( column_name [, ... ] ) ]
            [ key_match_type ]
            [ key_action ]
            [ key_checking_mode ]

制約をチェック

CHECK制約を使用して、ブール式を満たす列を指定できます。 例:

CREATE TABLE products
            ( product_no integer,
              name text,
              price numeric CHECK (price > 0) );

NOT NULL制約

NOT NULL制約を使用して、NULL値を含まない列を指定できます。 例:

CREATE TABLE products
       ( product_no integer NOT NULL,
         name text NOT NULL,
         price numeric );

ユニークな制約

UNIQUE制約を使用すると、テーブル内の列または列のグループに含まれるデータが、テーブル内のすべての行の中で一意になるようにすることができます。 UNIQUE制約を含むテーブルはハッシュ分散されている必要があり、制約列には配布キーが含まれている必要があります。 例:

CREATE TABLE products
       ( product_no integer UNIQUE,
         name text,
         price numeric)
      DISTRIBUTED BY (product_no);

主要なキーの制約

PRIMARY KEY制約は、UNIQUE制約およびNOT NULL制約からなる。 PRIMARY KEY制約を含むテーブルはハッシュ分散されている必要があり、制約列には配布キーが含まれている必要があります。 既定では、テーブルに主キーがある場合、主キー列はテーブルの配布キーとして使用されます。 例:

CREATE TABLE products
       ( product_no integer PRIMARY KEY,
         name text,
         price numeric)
      DISTRIBUTED BY (product_no);