この手順では、Oracleを例として使用して、別のデータベースで作成されたテーブルをTeradataに変換する方法を示します。
- Oracleの各スキーマ/ユーザーと、各スキーマに含まれるすべてのデータベース オブジェクト(例えば、テーブル、インデックス、ビュー、およびマテリアライズド ビュー)を識別します。
Oracleでは、スキーマを使用してデータベース オブジェクトをグループ化し、ユーザーによって作成および所有される機能グループに分類します。
Vantageでは、データベース オブジェクトの作成と整理は、以下のように所有者のデータベースまたはユーザーの内部で行なわれます。- データベースは関連するデータベース オブジェクトの集まりです。データベースの中には、ユーザーがそれ自身のオブジェクトや他のユーザーまたはデータベースを作成して維持できるようにするための領域の割り当ても入っています。
- ユーザーはデータベースと類似していて、オブジェクトを格納するための領域割り当てと容量を持っています。ただし、ユーザーはパスワードを持っていて、システムにログオンすることができますが、データベースはできません。
- Teradataに移行するオブジェクトのあるスキーマを特定します。
- Oracleのスキーマに相当するVantageデータベースを作成し、対応するTeradataデータベースにスキーマをマッピングします。
- 各スキーマ オブジェクトのDDLを特定します。
- Oracleのデータ型をTeradataのデータ型にマッピングします。
- OracleのTable要素をTeradataのTable要素にマッピングします。
一般的なTeradataテーブル オプションの詳細については、Teradata内のテーブルの作成を参照してください。
OracleとTeradataのテーブルには以下のようないくつかの共通要素があります。- すべてのテーブルに名前がある。
- すべてのテーブルがデータ型を持つ列を格納している。
- テーブルはパーティション化できる。
Oracleでは、テーブル データを保存するためのテーブル スペースを作成する必要があります。テーブルをパーティション化し、特定のパーティションを特定のテーブル スペースに分散して保管できます。
Teradataでは、プライマリ インデックス(PI)を使用して、並列実行のユニット(AMP)にテーブルの行を分散させます。プライマリ インデックス列を選択する際の指針を参照してください。
テーブルに対してパーティション プライマリ インデックス(PPI)を定義することによって、各AMP内のデータ行のパーティション化をさらに進めることができます。これは、Oracleテーブルが実行するパーティション化のタイプに類似しています。しかし、TeradataでPPIスキーマを定義する方が簡単です。パーティション化がデータベース ファイル システム内でのデータの論理編成であり、テーブルの領域定義や物理ディスクに関する知識を必要としないからです。行パーティション化を参照してください。
- テーブルの列に制約を定義できる。
- 参照整合性を定義できる。
- グローバル一時テーブルをサポートする。
- データ ブロック サイズを定義して行データのストレージを最適化できる。
- 空き領域を定義することにより、ロード後に将来のデータ増大に備えて余地を保持できる。
- トリガーを定義できる。
Teradataには、次のような多数の追加のテーブル オプションがあります。- プライマリ インデックス – データの分散、データ アクセス、テーブル結合、および集約に使用します。
- FALLBACKオプション – 回復シナリオのためのテーブル データのミラーリングを可能にします。
- フォールバック用に最適化されたプラットフォームでは、NO FALLBACKのオプションとNO FALLBACKのデフォルトは使用できません。
- ジャーナリング オプション – 変更が加えられた各データ行のイメージを格納し、障害時にデータ保護を行ないます。
さらに、Oracleでは、ユーザーはテーブルに対する並列問合わせ処理によるアクセスを有効にしなければなりませんが、Teradataでは並列問合わせ処理が自動的に受け入れられます。
- 各スキーマ オブジェクトのDDLをTeradata DDLに変換します。
テーブル作成のためのDDLは、OracleとTeradataで異なります。主な相違点は、領域の使用状況をテーブルに対してどのように定義するかという点です。
Oracleでは、データベース オブジェクトはテーブル スペース内で作成され、格納されます。テーブルには、テーブル スペース内で領域をどのように使用するかを記述した領域の使用状況パラメータを含めることができます。
Teradataでは、データベース オブジェクトをデータベースまたはユーザー内で作成し、格納します。データベースまたはユーザーの定義により、領域割り当ても定義されます。領域は必要に応じてデータベースまたはユーザーから、所有されるテーブルへ自動的に譲渡されます。そのため、Teradataのテーブル定義にはデータベースのストレージ管理句は含まれません。
推奨事項:Oracleのテーブルから新しいTeradataのテーブルへデータのロードを容易に行なえるようにするために、Teradataテーブルの列名をOracleテーブルの列名と同一になるように定義してください。Teradataテーブルにデータをロードした後でALTER TABLE文を使用すれば、テーブル内のどの列でも名前変更できます。CREATE TABLE文の詳細な使用法については、Teradata内のテーブルの作成を参照してください。