17.10 - Ferretパラメータの使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データベース ユーティリティ

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
構成
Publication ID
B035-1102-171K-JPN
Language
日本語 (日本)

Ferretの構文図におけるparameterという変数には、マルチトークン パラメータや、10進数および16進数の数値入力を含む、さまざまなタイプのパラメータが含まれます。

マルチトークン パラメータ

マルチトークン パラメータ(3つの値で入力されるサブテーブル識別子など)は、個々のトークンを1つ以上のスペースで区切って、単一の行に入力します。マルチトークン パラメータは、ハイフンで区切って入力することもできます。

例えば、サブテーブル識別子として以下のいずれかを受け入れることができます。

0 200 0
0-200-0

パラメータと パラメータ、または パラメータとコマンドは、空白またはカンマで区切ることができます。コマンド オプション(cmdoption)を指定する場合は、それをコマンド(cmd)と同じ行に入力する必要があります。

数値入力

数値は10進または16進のいずれかの形式で入力することができます。データ入出力用のデフォルトの基数は、入出力に対する基数の設定によります。

  • 入力の基数が10進の場合、数値入力は10進数値として解釈されます。例えば、45と入力されると、45という値として解釈します。
  • 入力の基数が16進の場合、数値入力は16進数値として解釈されます。例えば、45と入力されると、69という値として解釈します。

基数の初期設定は、入出力どちらも16進です。基数の設定については、RADIXコマンドの説明を参照してください。

次の特殊な数値形式の表記規則を使用すると、基数の設定に関係なく、入力した値を10進または16進として強制的に解釈させることができます。

  • 10進値は、0i または i という接頭辞を追加することで、または接尾辞として小数点を追加することで、指定できます。
    0i45 45. 0I45
  • 16進値は、0x または x という接頭辞を追加することで、または接尾辞として h を追加することで、指定できます。先行ゼロを付けるかどうかはオプションです。
    0x2D X2D 2Dh 002DH

有効な数値の範囲は、符号なしの16ビット値で0~65535 (0x0~0xFFFF)です。ただし、32ビットの整数に/Lまたは/Wを使ってパッチをあてている場合は除きます。この場合の有効な範囲は、0~4,294,967,295 (0x0~0xFFFFFFFF)です。

1行に2つの数値を指定する場合は、値を空白またはカンマで区切る必要があります。

サブテーブル識別子(tid)の指定

コマンドはサブテーブルを対象とし、テーブルを対象としません。テーブルはサブテーブルの集まりで、サブテーブルは物理行の集まりです。各サブテーブルには、特定のデータ型を格納する物理行があります。 例えば、基本およびフォールバック データ サブテーブルにはデータ行があり、基本およびフォールバック インデックス サブテーブルにはインデックス行があります。テーブル ヘッダー サブテーブルの物理行には、テーブル メタデータが含まれます。

各サブテーブルは、サブテーブル識別子(tid)で識別されます。tidは2つの部分で構成されます。最初の部分は、サブテーブルが属しているテーブルを識別します。同じテーブルの一部であるすべてのサブテーブルのtidには、同じテーブル識別子が含まれます。2番目の部分は、テーブルを構成するサブテーブルの1つを識別し、サブテーブルのタイプを示します。

tidは次のように定義されます。

{ table_unique | = } type_and_index

table_uniquetype_and_indexの組み合わせによりサブテーブルを固有に識別します。

構文要素

説明

table_unique 操作の対象となるテーブルの固有識別子。

テーブルは、次の2つの方法のいずれかで固有に識別できます。

  1. テーブルが属するデータベースの名前とテーブル名をピリオドで区切って指定します。名前は個別に、またはまとめて区切る必要があります。以下は有効な形式です。
    • " database_name . table_name"
    • " database_name "." table_name "
    • ' database_name . table_name'
    • ' database_name '.' table_name'
  2. テーブルの固有の数値の識別子を指定します。これは、スペースで区切られた2つの数値で構成されます。テーブル識別子は、TABLEIDコマンドで返される最初の2つの数値で構成されます。この2つの数値は、テーブルを構成するすべてのサブテーブルに共通です。
    入力番号の形式は基数の現在の設定によって異なり、この設定はRADIXコマンドで表示されます。
= 保存された最新の値をtable_uniqueに使用することを指定します。
type_and_index テーブルを構成するサブテーブルのグループ内でサブテーブルを固有に識別します。type_and_indexは、サブテーブルのタイプと個別のサブテーブル自体の両方を識別します。

type_and _indexの構文は以下のとおりです。

{ type [ / index [ / variant ] ] | number }
構文要素 説明
type サブテーブルのタイプ。
typeは、次のいずれかを指定します。
説明
* このテーブルのすべてのサブテーブル
H テーブル ヘッダー サブテーブル

テーブル ヘッダー サブテーブルには1行しかなく、セカンダリ インデックスや作業サブテーブルもないため、H型の後に続くすべてのインデックスとvariant(変形)の指定は無視されます。

P プライマリ データ サブテーブル
F number numberによって指定するフォールバック データ サブテーブル。デフォルト値は1です。
F * すべてのフォールバック サブテーブル
index 検査するインデックス サブテーブル。 インデックス サブテーブルの値を指定しない場合、デフォルトでデータ サブテーブルが使用されます。 インデックス1は最初のセカンダリ インデックスを表わします。 インデックス2は2番目のセカンダリ インデックスを表わし、以下同様です。

indexは、次のいずれかを指定します。

index 説明
number セカンダリ インデックス。X numberを指定する代わりに使用できます。numberを数字で入力する場合、4の倍数でなければなりません。次のように解釈されます。
  • 0は、X0を入力した場合と同じです。
  • 4は、X1を入力した場合と同じです。
  • 8は、X2を入力した場合と同じです。
  • 12は、X3を入力した場合と同じです。
以下同様です。
* テーブルのすべてのインデックス
D プライマリ データ インデックス(X0または0と同じ)
X number numberによって指定するセカンダリ インデックス。デフォルト値は1です。
X * 0で始まる、すべてのセカンダリ インデックス
variant 可能なサブテーブル
variantは、次のいずれかを指定します。
variant 説明
* 可能なすべてのバリアント サブテーブル。
0 variant値が指定されていない場合、デフォルトが使用されます。
1 ソートまたはテーブルの修正操作中の値。
2 未使用。
3 未使用。
number サブテーブルのタイプ(ヘッダー、基本データ、またはフォールバック データ)、物理行を配列する場合に使用するインデックス(基本データ インデックスまたはセカンダリ インデックスの1つ)、およびvariant(変形)を内部的に表わす単一の数値。テーブル ヘッダーのtype_and_index番号はゼロです。これらの番号の例を以下にリストします。

次のテーブルに、type_and _indexフィールドの例を示します。

サブテーブルの説明 番号 タイプ 型/インデックス 型/インデックス/バリアント
テーブル ヘッダー 0 H    
プライマリ データ サブテーブル 1024 (0x0400) P P/D  
最初のセカンダリ インデックス 1028 (0x0404)   P/X1  
最初のフォールバック テーブル 2048 (0x0800) F1 F1/D  
3番目のフォールバック テーブルの2番目のセカンダリ インデックス 4104 (0x1008)   F3/X2  
すべてのプライマリ サブテーブル     P/*  
すべてのプライマリ セカンダリ インデックス     P/X*  
すべてのフォールバック サブテーブル   F*    
このテーブルのすべてのサブテーブル   *    
最初のセカンダリ インデックスのソート テーブル 1029 (0x0405)     P/X1/1
最初のセカンダリ インデックスのソート中の、両方のテーブル       P/X1/ *

例えば、データベースMYDBに含まれるテーブルT4のtable_numberが「0 1198」であるとします。また、入力が16進形式で受け入れられるとします。

T4テーブルのプライマリ サブテーブルのtidとして、以下の例が有効です。

  • "MYDB.T4" 400
  • "MYDB.T4" 1024.
  • "MYDB"."T4" P
  • u 'MYDB'.'T4' 400 h
  • 0 1198 400
  • 0 1198 P

テーブルのクラス

Vantageは次の5つのテーブルのクラスを区別します。アクションのSCOPEパラメータを定義するときに、テーブルの区分を指定することができます。

テーブルのタイプ 説明
永久ジャーナル(PJ)テーブル システム再始動を行なってもそのまま保存されるテーブルですが、これにはユーザーの目に見えるデータは含まれていません。

それぞれのPJテーブルには、Vantageにより内部的に生成されるデータが含まれます。PJデータは通常、ジャーナル処理されたテーブルを、所定のチェックポイントの状態まで回復するために使用されます。これは、トランザクションをテーブルのアーカイブ コピーからロールフォワード、またはロールバックすることによって行ないます。

永久テーブル 実データを含んだテーブルで、システムの再始動後も残ることができます。
一時テーブル グローバル一時テーブルまたは揮発テーブルとして存在できるテーブルで、次のように定義されます。
  • グローバル一時テーブルは、それらが使用されるSQLセッションの存続期間だけ存在します。
  • 揮発テーブルはメモリ内に存在し、システムを再始動すると失われます。後述のスプール テーブルと同等に扱われます。
スプール テーブル 非永久データが含まれるテーブルです。これは、持続する範囲に応じていくつかのクラスに分けられます。
中間結果スプール テーブルには、単一のSQL問合わせ処理中の一時的な結果が保持されます。これはその処理の期間中しか持続しません。応答スプール テーブルには、問合わせからの最終的な応答が保持されます。限られた数の応答スプールを、同一セッション内のその後の問合わせにも持続させることができます(オプション)。スプール テーブルは次の場合に破棄されます。
  • 通常は、そのスプールが必要なくなったとき。
  • トランザクションのアボートまたはセッションのログオフに伴う、特定のリソースのクリーンアップの一環として。
  • システム再始動の度に行なわれる、一般的なリソースのクリーンアップの一環として。
  • 揮発表の行はスプール領域に置かれ、トランザクションの最後またはセッションの最後に(表オプションまたはDROP TABLE文に応じて)破棄されます。
  • 揮発表定義はメモリ内に存在し、システムを再始動すると失われます。
持続スプール テーブル スプール テーブルと同等に扱われ、システムを再始動しても残ります。

テーブルの各クラスに関連した属性はシステム性能に影響を与えることがあります。属性はそれぞれ個別に設定され、テーブルの各クラスはそれぞれ異なる目的で使用されるからです。

例えば、永久テーブルとPJテーブルだけをパックしておくこともできます。それで、PACKDISKコマンドのSCOPEを定義する際に、これらのテーブルを指定することもできます。

行と行範囲

すべての物理行は、行IDによって固有に識別されます。ridspecまたはrowspecとも呼ばれる行IDの指定は、パーティション番号、行ハッシュまたはハッシュ バケット番号、および固有性値を含む値です。1つの物理行には、最大16バイトまでの行IDを指定できます:
  • パーティション番号は、テーブルに定義されるパーティションの番号が65535までの場合は2バイトとして格納され、これよりも大きい場合は8バイトとして格納されます。テーブルがパーティション化されない場合、行IDにはパーティション指定のための領域は予約されません。ゼロ値を設定すると、テーブルはパーティション化されません。
  • 行IDの残りの部分の指定は、テーブルにプライマリ インデックスが含まれているかどうかによって異なります。
    • PIテーブルには、4バイトの行ハッシュ値と、さまざまな物理行の行ハッシュ シノニムが存在する場合に固有性を強制するための4バイトの固有性値があります。
    • プライマリ インデックスを持たないテーブル(NoPIテーブル)および基本AMPインデックスを持つテーブル(PAテーブル)には、16ビットまたは20ビットのハッシュ バケット値と44ビットの固有性値があります。16ビットのハッシュ バケット値を使用するシステムの場合、ハッシュ バケット値と固有性値の間の4ビットは未使用です。
      RowIDの残りの部分を2つの4バイト値として扱い、それらをhashおよびuniqフィールドとして表示します。
      hash0 hash1 uniq0 uniq1
      ----- ----- ----- ----- 
      FFA9  CB78  0000  0002
                  

      表示または操作されるNoPIテーブルおよびPAテーブルの場合、hash0およびhash1は実際には20ビットのハッシュ バケット値および上位12ビットの固有性値を表わし、uniq0およびuniq1は下位32ビットの固有性値を表示します。NoPIテーブルおよびPAテーブルの詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。

行の範囲はridrangeとも呼ばれ、開始行と終了行のridspecで指定されます。

start_rid_spec [ TO end_rid_spec ]

入力という目的では、ridspecの必須およびオプションのコンポーネントは、物理行を含むテーブルがパーティション化されているかどうかによって決まります。

テーブルのタイプ Ridspecの構文
パーティション partitioned_ridspec:
{ row_partition | = } [ { row_hash | = } [ row_unique | = ] ]
非パーティション nonpartitioned_ridspec:
{ partitioned_ridspec |
  [ row_partition | = ] { row_hash | = } [ row_unique | = ] 
}
構文要素 説明
row_partition 物理行のパーティション番号。パーティション番号は単一の数値であり、ファイル システムで使用される内部パーティション番号です。値は、0~9223372036854775807 (16進数表記では、0~7FFFFFFFFFFFFFFF)の間にする必要があります。

複数レベルでパーティション化されるテーブルでは、各物理パーティションは、パーティション列の特定の値セットに対するPARTITION BY句のパーティション式すべての組み合わせから生じます。これにより、単一の固有な組み合わせパーティション番号が提供されます。この番号は、内部パーティション番号にマッピングされます。パーティション範囲がパーティション レベルに対して削除または追加された場合、パーティションの組み合わせパーティション番号は変更されることがありますが、内部パーティション番号は変更されません。

非パーティション テーブルの行の場合、パーティション番号は(指定する場合は)ゼロでなければならず、ridspecでは省略できます。

row_hash 物理行の行ハッシュ値。行ハッシュは、物理行が配置されるAMPを決定します。行ハッシュは2つの数値で構成され、通常、出力画面ではhash0およびhash1という列見出しの下に表示されます。
start_rid_specの場合:
  • row_hashは、デフォルトで0x0000 0x0000になります。
end_rid_specの場合:
  • row_hashのデフォルトは、start_rid_specで指定されているrow_hashの値になります。start_rid_specrow_hashの値が指定されていない場合、end_rid_specでのrow_hashは、デフォルトで0xFFFF 0xFFFFになります。
row_uniq 物理行を固有に識別する行ハッシュ値とともに使用されるシステム生成による固有性値。固有性値は2つの数値で構成され、通常、出力画面ではu0およびu1という列見出しの下に表示されます。
start_rid_specの場合:
  • row_uniqを省略し、end_rid_specを指定しないと、row_hashのすべての行が選択されます。
  • row_uniqを省略し、end_rid_specを指定すると、row_uniqは、デフォルトで0x0000 0x0000になります。
end_rid_specの場合:
  • row_uniqのデフォルトは、start_rid_specで指定されているrow_uniqの値になります。start_rid_specrow_uniqの値が指定されていない場合、end_rid_specでのrow_uniqは、デフォルトで0xFFFF 0xFFFFになります。
= プログラムは、row_partitionrow_hash、またはrow_uniqに、保存された最新の値を使用する。

row_partitionrow_hash、およびrow_uniqに指定された最新の値が保存されます。start_rid_specおよびend_rid_specrow_partitionrow_hash、またはrow_uniqに対しては個別の値が格納されます。保存されたstart_rid_specまたはend_rid_specの値がパーティション テーブルに使用されているにもかかわらず、現在のコマンドで参照されているテーブルがパーティション化されていない場合、およびその逆の場合、エラーが報告されます。

Teradataファイル システムと物理行の詳細については、Teradataファイル システムを参照してください。

テーブルの行構造の詳細は、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

vproc番号

Ferretでは、vproc番号(vproc_number)をSCOPEコマンドで使用することにより、ユーティリティのアクション(再構成、またはディスク領域の表示など)の実行対象となるAMP、またはAMPの範囲を指定します。

有効なAMP vprocは、0~16199の範囲の数値です。

マップの名前

マップには、1つ以上のAMP vprocが含まれます。Ferret SCOPEコマンドでマップ名を指定する場合は、名前を二重引用符で囲む必要があります。対象範囲は、Ferretの対象範囲を指定したマップに含まれる個々のvprocにした場合と実質的に同じです。