IBM PureData System for Analytics, バージョン 7.1

CREATE TABLE AS

CREATE TABLE AS コマンドは、SELECT 文の結果に基づいて表を作成するために使用します。このコマンド名は、CTAS に省略されることがあります。

CREATE TABLE AS コマンドには以下の特徴があります。
一般的なタスク
CREATE TABLE AS コマンドは、表を作成し、select コマンドからのデータを以下のように挿入します。
  • 表列には、SELECT コマンドの出力列に関連付けられた名前とデータ型を割り当てます。ただし、新規列名のリストを明示的に指定されている場合は、これらの列名を優先します。
  • CREATE TABLE AS コマンドは、表を作成し、照会を一度評価した結果を使用してこの新規表を初期化します。新規表は、それ以降に照会のソース表が変更されても追従しません。一方、ビューを照会する場合には、常に、基本となる SELECT コマンドが再評価されます。
小規模な CTAS の自動統計の停止
CTAS 処理実行時に、通常 IBM® Netezza® は CTAS 処理の後に GENERATE STATISTICS を実行し、作成された表の統計情報を収集します。しかし、表の照会が短ければ、CTAS 処理そのものよりも GENERATE STATISTICS 処理の方に時間がかかる場合があります。

CTAS 処理が実行されると、表の作成と挿入処理が行われます。挿入処理の間、Netezza はすべての列の最小値、最大値、ゾーン・マップを計算します。挿入処理を行う行数が構成されたしきい値 (ctas_auto_stats_min_rows) よりも少なければ、Netezza は統計情報の生成処理をスキップします。

この機能を制御する postgresql.conf ファイル設定には以下の 2 つがあります。
  • enable_small_ctas_autostats は、小規模表の自動統計を停止する機能を有効または無効にします。デフォルトでは有効になっています。
  • ctas_autostats_min_rows は小規模表のしきい値を指定します。このしきい値を下回る表については、Netezza によって統計情報が計算されません。 デフォルト値は 10000 です。
分散キーの取り扱い
明示的な分散キーを定義しない場合、CTAS 表は親表から分散キーを継承します。一般に、ターゲット表の分散は、プランの最終ノードによって定義されます。最終ノードに有効な分散がある場合、システムはその分散を CTAS のターゲットに割り当てます。最終プランのノードに分散がない場合 (ホストでのノードと同様) のみ、システムは表の最初の列をデフォルトに設定します。

分散キーのデフォルトは最初の列であり (ハッシュ分散)、ここでは認識可能な分散キーがないか、CTAS 表に対するソース・ストリームがラウンドロビン分散となっています。

t_one 表は f_one から分散キーを継承します(最初の列にはデフォルト設定されていません)。
CREATE TABLE t_one AS SELECT … FROM tbl …;
t_two 表は、(tbl_one+tbl_two) の結合表 (これらの結合キー) から分散キーを継承するとします。
CREATE TABLE t_two AS SELECT … FROM tbl_one,tbl_two … WHERE
tbl_one.b1 = tbl_two.b2 …
t_three 表は、グループ化ノード (b1、b2、b3) から分散キーを継承するとします。
CREATE TABLE t_three AS SELECT … FROM tbl_one, tbl_two, tbl_three…
WHERE … GROUP BY b1,b2,b3;
表分散のシステム・デフォルト
postgresql.conf の設定 enable_random_table_distribute は、表作成時のデフォルトの分散動作を制御します。 デフォルト値 0 (使用不可) は以下の動作を指定します。これは、以前のリリースで表が作成される際のデフォルトの動作です。
  • CREATE TABLE の動作:
    • DISTRIBUTE ON が指定されている場合は、指定された分散メカニズムを使用します。
    • DISTRIBUTE ON が指定されていない場合は、最初の列をデフォルトの分散キーとして使用します。
  • CREATE TABLE AS (CTAS) の動作:
    • DISTRIBUTE ON が指定されている場合は、指定された分散メカニズムを使用します。
    • DISTRIBUTE ON が指定されていない場合は、プランから分散キーを継承します。 プランナーがプランから分散を判定できない場合は、最初の列をデフォルト・キーとして使用します。
enable_random_table_distribute=1 (使用可能) と指定すると、システムの動作が以下のように変わります。
  • CREATE TABLE の動作:
    • DISTRIBUTE ON が指定されている場合は、指定された分散メカニズムを使用します。
    • DISTRIBUTE ON が指定されていない場合は、分散方式としてランダムを使用します。
  • CREATE TABLE AS (CTAS) の動作:
    • DISTRIBUTE ON が指定されている場合は、指定された分散メカニズムを使用します。
    • DISTRIBUTE ON が指定されていない場合は、プランから分散キーを継承します。 プランナーがプランから分散を判定できない場合は、分散方式としてランダムを使用します。
場合によっては、プランナーがプランから分散を判定できないことがあります。 例:
  • ホストで最終結合が行われると、その結合の結果の分散が非決定論的になります。
  • <select-list> で分散列が欠落している場合は、分散が非決定論的になります。
  • 最終結果ノードの分散がランダムである場合は、分散が非決定論的と見なされます。
  • 最終結合が全外部結合である場合も、分散が非決定論的になります。

この変更により、従来のリリースでこの動作を制御していた NZ_DISABLE_SKEW_DEFENSE 環境変数が廃止されました。 リリース 4.6 へのアップグレード時にはこの変数の存在が検査され、これが設定されている場合は、その値に対応する値を使用して enable_random_table_distribute が設定されます。

postgresql.conf 変数を変更するには、以下の手順に従います。
  1. 標準エディターを使用して、構成ファイル nz/data/postgresql.conf を開きます。
  2. enable_random_table_distribute = 0 が指定されている行を検索します。
  3. 変数を 0 から 1 に変更し、変更を保存します。
  4. 変更を有効にするために、Netezza システムを再始動します。

構文

CREATE TABLE AS コマンドの構文
CREATE [ TEMPORARY | TEMP ] TABLE <table> [ (<col>[,<col>…] ) ]
AS <select_clause> [ DISTRIBUTE ON ( <dist_col>[,<dist_col>…] ) ]

入力

CREATE TABLE AS コマンドの入力は以下のとおりです。
表 1. CREATE TABLE AS の入力
入力 説明
TEMPORARY または TEMP 一時表を作成します。
<table> 作成する表の名前。一時表には、既に存在している永続表と同じ名前を付けられますが、他のテーブル名は、データベースのスコープ内で固有でなければなりません。
<col> 新しい表内の列の名前。列名を指定しない場合、名前は select 節の出力列名から取得されます。
<select_clause> SELECT (行の取り出し用) で説明されている SELECT コマンド。
<dist_col> 分散列の名前。分散列について詳しくは、特権の『分散キーの取り扱い』を参照してください。

出力

出力メッセージの一覧については、CREATE TABLE コマンドおよび SELECT コマンドを参照してください。

特権

admin ユーザーか、データベースかスキーマの所有者であるか、Create Table 特権を持っている必要があります。SELECT 文で使用する表に対する Select 特権も必要です。

使用方法

以下に使用例を示します。



フィードバック | Copyright IBM Corporation 2014 | 最終更新日: 2014-02-28