Teradata-quick-guide
Teradata-はじめに
Teradataとは何ですか?
Teradataは、人気のあるリレーショナルデータベース管理システムの1つです。 主に、大規模なデータウェアハウジングアプリケーションの構築に適しています。 Teradataは、並列処理の概念によりこれを実現しています。 Teradataという会社によって開発されました。
Teradataの歴史
以下は、Teradataの歴史の概要であり、主要なマイルストーンをリストしています。
- 1979 -Teradataが組み込まれました。
- 1984 -最初のデータベースコンピュータDBC/1012のリリース。
- 1986 -_Fortune_誌はTeradataを「Product of the Year」と命名しています。
- 1999 -130テラバイトのTeradataを使用した世界最大のデータベース。
- 2002 -パーティションプライマリインデックスと圧縮を備えたTeradata V2R5がリリースされました。
- 2006 -Teradata Master Data Managementソリューションの発売。
- 2008 -Active Data WarehousingとともにTeradata 13.0がリリースされました。
- 2011 -Teradata Asterを取得し、Advanced Analytics Spaceに入ります。
- 2012 -Teradata 14.0が導入されました。
- 2014 -Teradata 15.0が導入されました。
Teradataの機能
以下はTeradataの機能の一部です-
- 無制限の並列処理-Teradataデータベースシステムは、超並列処理(MPP)アーキテクチャに基づいています。 MPPアーキテクチャは、システム全体でワークロードを均等に分割します。 Teradataシステムは、タスクをプロセスに分割し、それらを並行して実行して、タスクが迅速に完了するようにします。
- Shared Nothing Architecture -Teradataのアーキテクチャは、Shared Nothing Architectureと呼ばれます。 Teradataノード、そのアクセスモジュールプロセッサ(AMP)、およびAMPに関連付けられたディスクは独立して動作します。 他の人と共有されません。
- 線形スケーラビリティ-Teradataシステムは非常にスケーラブルです。 最大2048ノードまで拡張できます。 たとえば、AMPの数を2倍にすることで、システムの容量を2倍にすることができます。
- 接続性-Teradataは、メインフレームやネットワーク接続システムなどのチャネル接続システムに接続できます。
- Mature Optimizer -Teradataオプティマイザーは、市場で成熟したオプティマイザーの1つです。 当初から並行するように設計されています。 リリースごとに改善されています。
- SQL -Teradataは業界標準のSQLをサポートし、テーブルに保存されているデータとやり取りします。 これに加えて、独自の拡張機能を提供します。
- 堅牢なユーティリティ-Teradataは、FastLoad、MultiLoad、FastExport、TPTなどのTeradataシステムとの間でデータをインポート/エクスポートするための堅牢なユーティリティを提供します。
- 自動配布-Teradataは、手動の介入なしで、データをディスクに自動的に均等に配布します。
Teradata-インストール
Teradataは、完全に機能するTeradata仮想マシンであるVMWAREにTeradata Expressを提供します。 最大1テラバイトのストレージを提供します。 Teradataは、VMwareの40GBバージョンと1TBバージョンの両方を提供します。
前提条件
VMは64ビットなので、CPUは64ビットをサポートする必要があります。
Windowsのインストール手順
- ステップ1 *-リンク(https://downloads.teradata.com/download/database/teradata-express-for-vmware-player)から必要なVMバージョンをダウンロードします
- ステップ2 *-ファイルを抽出し、ターゲットフォルダーを指定します。
- ステップ3 *-リンクhttps://my.vmware.com/web/vmware/downloadsからVMWare Workstationプレーヤーをダウンロードします。 WindowsとLinuxの両方で使用できます。 Windows用のVMWAREワークステーションプレーヤーをダウンロードします。
- ステップ4 *-ダウンロードが完了したら、ソフトウェアをインストールします。
- ステップ5 *-インストールが完了したら、VMWAREクライアントを実行します。
- ステップ6 *-[仮想マシンを開く]を選択します。 抽出されたTeradata VMWareフォルダーをナビゲートし、拡張子が.vmdkのファイルを選択します。
- ステップ7 *-Teradata VMWareがVMWareクライアントに追加されます。 追加されたTeradata VMwareを選択し、「仮想マシンの再生」をクリックします。
- ステップ8 *-ソフトウェアの更新に関するポップアップが表示されたら、[後で通知する]を選択できます。
- ステップ9 *-rootとしてユーザー名を入力し、tabを押してrootとしてパスワードを入力し、もう一度Enterを押します。
- ステップ10 *-次の画面がデスクトップに表示されたら、「root’s home」をダブルクリックします。 次に、「Genome’s Terminal」をダブルクリックします。 これにより、シェルが開きます。
- ステップ11 *-次のシェルから、コマンド/etc/init.d/tpa startを入力します。 これにより、Teradataサーバーが起動します。
BTEQの開始
BTEQユーティリティは、SQLクエリをインタラクティブに送信するために使用されます。 BTEQユーティリティを起動する手順は次のとおりです。
- ステップ1 *-/sbin/ifconfigコマンドを入力し、VMWareのIPアドレスを書き留めます。
- ステップ2 *-コマンドbteqを実行します。 ログオンプロンプトで、コマンドを入力します。
ログオン<ipaddress>/dbc、dbc;パスワードプロンプトで、dbcとしてパスワードを入力します。
BTEQを使用してTeradataシステムにログインし、SQLクエリを実行できます。
Teradata-アーキテクチャ
Teradataアーキテクチャは、超並列処理(MPP)アーキテクチャに基づいています。 Teradataの主要コンポーネントは、解析エンジン、BYNET、およびアクセスモジュールプロセッサ(AMP)です。 次の図は、Teradataノードの高レベルアーキテクチャを示しています。
Teradataのコンポーネント
Teradataの主要なコンポーネントは次のとおりです-
- ノード-Teradata Systemの基本単位です。 Teradataシステム内の個々のサーバーは、ノードと呼ばれます。 ノードは、独自のオペレーティングシステム、CPU、メモリ、Teradata RDBMSソフトウェアの独自のコピー、およびディスクスペースで構成されます。 キャビネットは、1つ以上のノードで構成されます。
- 解析エンジン-解析エンジンは、クライアントからクエリを受信し、効率的な実行計画を準備します。 解析エンジンの責任は次のとおりです-
- クライアントからSQLクエリを受信する
- 構文エラーのSQLクエリチェックを解析する
- ユーザーがSQLクエリで使用されるオブジェクトに対して必要な特権を持っているかどうかを確認します
- SQLで使用されるオブジェクトが実際に存在するかどうかを確認します
- SQLクエリを実行するための実行計画を準備し、それをBYNETに渡す
- AMPから結果を受け取り、クライアントに送信します
- メッセージパッシングレイヤー-BYNETと呼ばれるメッセージパッシングレイヤーは、Teradataシステムのネットワークレイヤーです。 これにより、PEとAMPの間、およびノード間の通信が可能になります。 Parsing Engineから実行計画を受け取り、AMPに送信します。 同様に、AMPから結果を受信し、解析エンジンに送信します。
- アクセスモジュールプロセッサ(AMP)-仮想プロセッサ(vproc)と呼ばれるAMPは、実際にデータを保存および取得するものです。 AMPは、Parsing Engineからデータと実行計画を受け取り、データ型の変換、集約、フィルター、並べ替えを実行し、それらに関連付けられたディスクにデータを保存します。 テーブルのレコードは、システム内のAMPに均等に分散されます。 各AMPは、データが保存されるディスクのセットに関連付けられています。 そのAMPのみがディスクからデータを読み書きできます。
ストレージアーキテクチャ
クライアントがクエリを実行してレコードを挿入すると、解析エンジンはレコードをBYNETに送信します。 BYNETはレコードを取得し、行をターゲットAMPに送信します。 AMPはこれらのレコードをディスクに保存します。 次の図は、Teradataのストレージアーキテクチャを示しています。
検索アーキテクチャ
クライアントがクエリを実行してレコードを取得すると、解析エンジンはBYNETにリクエストを送信します。 BYNETは、取得要求を適切なAMPに送信します。 次に、AMPはディスクを並行して検索し、必要なレコードを特定してBYNETに送信します。 次に、BYNETはレコードをParsing Engineに送信し、Parsing Engineはクライアントに送信します。 Teradataの取得アーキテクチャは次のとおりです。
Teradata-リレーショナルの概念
リレーショナルデータベース管理システム(RDBMS)は、データベースとの対話を支援するDBMSソフトウェアです。 これらは、構造化照会言語(SQL)を使用して、テーブルに格納されているデータと対話します。
データベース
データベースは、論理的に関連するデータのコレクションです。 多くのユーザーがさまざまな目的でアクセスします。 たとえば、販売データベースには、多くのテーブルに格納されている販売に関する情報全体が含まれています。
テーブル
テーブルは、データが保存されるRDBMSの基本単位です。 テーブルは行と列のコレクションです。 以下は従業員テーブルの例です。
EmployeeNo | FirstName | LastName | BirthDate |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
列
列には同様のデータが含まれます。 たとえば、EmployeeテーブルのBirthDate列には、すべての従業員のbirth_date情報が含まれています。
BirthDate | 1/5/1980 | 11/6/1984 | 3/5/1983 | 12/1/1984 | 4/1/1983 |
---|
Row
行は、すべての列の1つのインスタンスです。 たとえば、従業員テーブルでは、1行に1人の従業員に関する情報が含まれています。
EmployeeNo | FirstName | LastName | BirthDate |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
主キー
主キーは、テーブル内の行を一意に識別するために使用されます。 主キー列では重複値は許可されず、NULL値を受け入れることはできません。 テーブルの必須フィールドです。
外部キー
外部キーは、テーブル間の関係を構築するために使用されます。 子テーブルの外部キーは、親テーブルの主キーとして定義されます。 テーブルは複数の外部キーを持つことができます。 重複する値とnull値を受け入れることができます。 テーブルの外部キーはオプションです。
Teradata-データ型
テーブルの各列は、データ型に関連付けられています。 データ型は、列に格納される値の種類を指定します。 Teradataはいくつかのデータタイプをサポートしています。 以下は、頻繁に使用されるデータ型の一部です。
Data Types | Length (Bytes) | Range of values |
---|---|---|
BYTEINT | 1 | -128 to PLUS127 |
SMALLINT | 2 | -32768 to PLUS32767 |
INTEGER | 4 | -2,147,483,648 to PLUS2147,483,647 |
BIGINT | 8 | -9,233,372,036,854,775,80 8 to PLUS9,233,372,036,854,775,8 07 |
DECIMAL | 1-16 | |
NUMERIC | 1-16 | |
FLOAT | 8 | IEEE format |
CHAR | Fixed Format | 1-64,000 |
VARCHAR | Variable | 1-64,000 |
DATE | 4 | YYYYYMMDD |
TIME | 6 or 8 | HHMMSS.nnnnnn *or *HHMMSS.nnnnnnPLUSHHMM |
TIMESTAMP | 10 or 12 | YYMMDDHHMMSS.nnnnnn* or* YYMMDDHHMMSS.nnnnnn PLUSHHMM |
Teradata-テーブル
リレーショナルモデルのテーブルは、データのコレクションとして定義されます。 それらは行と列として表されます。
テーブルの種類
タイプTeradataはさまざまなタイプのテーブルをサポートしています。
- 永続テーブル-これはデフォルトのテーブルであり、ユーザーが挿入したデータを含み、データを永続的に保存します。
- 揮発性テーブル-揮発性テーブルに挿入されたデータは、ユーザーセッション中のみ保持されます。 テーブルとデータは、セッションの終了時に削除されます。 これらのテーブルは、主にデータ変換中に中間データを保持するために使用されます。
- グローバルテンポラリテーブル-グローバルテンポラリテーブルの定義は永続的ですが、テーブルのデータはユーザーセッションの終了時に削除されます。
- 派生テーブル-派生テーブルはクエリの中間結果を保持します。 それらの有効期間は、それらが作成、使用、およびドロップされるクエリ内にあります。
セット対マルチセット
Teradataは、重複レコードの処理方法に基づいて、テーブルをSETまたはMULTISETテーブルとして分類します。 SETテーブルとして定義されたテーブルは重複レコードを保存しませんが、MULTISETテーブルは重複レコードを保存できます。
Sr.No | Table Commands & Description |
---|---|
1 |
CREATE TABLEコマンドは、Teradataでテーブルを作成するために使用されます。 |
2 |
ALTER TABLEコマンドは、既存のテーブルから列を追加または削除するために使用されます。 |
3 |
DROP TABLEコマンドは、テーブルを削除するために使用されます。 |
Teradata-データ操作
この章では、Teradataテーブルに保存されているデータの操作に使用されるSQLコマンドを紹介します。
レコードを挿入
INSERT INTOステートメントは、テーブルにレコードを挿入するために使用されます。
構文
INSERT INTOの一般的な構文は次のとおりです。
例
次の例では、従業員テーブルにレコードを挿入します。
上記のクエリが挿入されると、SELECTステートメントを使用してテーブルのレコードを表示できます。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
別のテーブルから挿入
INSERT SELECTステートメントは、別のテーブルからレコードを挿入するために使用されます。
構文
INSERT INTOの一般的な構文は次のとおりです。
例
次の例では、従業員テーブルにレコードを挿入します。 次の挿入クエリを実行する前に、employeeテーブルと同じ列定義でEmployee_Bkupというテーブルを作成します。
上記のクエリを実行すると、employeeテーブルのすべてのレコードがemployee_bkupテーブルに挿入されます。
規則
- VALUESリストで指定された列の数は、INSERT INTO句で指定された列と一致する必要があります。
- NOT NULL列には値が必須です。
- 値が指定されていない場合、NULL可能フィールドにはNULLが挿入されます。
- VALUES句で指定された列のデータ型は、INSERT句の列のデータ型と互換性がある必要があります。
レコードを更新する
UPDATEステートメントは、テーブルからレコードを更新するために使用されます。
構文
以下は、UPDATEの一般的な構文です。
例
次の例では、従業員101の従業員部門を03に更新します。
次の出力では、EmployeeNo 101のDepartmentNoが1から3に更新されていることがわかります。
規則
- テーブルの1つ以上の値を更新できます。
- WHERE条件が指定されていない場合、テーブルのすべての行が影響を受けます。
- 別のテーブルの値でテーブルを更新できます。
レコードを削除する
DELETE FROMステートメントは、テーブルからレコードを更新するために使用されます。
構文
DELETE FROMの一般的な構文は次のとおりです。
例
次の例では、従業員101をテーブルemployeeから削除します。
次の出力では、従業員101がテーブルから削除されていることがわかります。
規則
- テーブルの1つ以上のレコードを更新できます。
- WHERE条件が指定されていない場合、テーブルのすべての行が削除されます。
- 別のテーブルの値でテーブルを更新できます。
Teradata-SELECTステートメント
SELECTステートメントは、テーブルからレコードを取得するために使用されます。
構文
SELECTステートメントの基本的な構文は次のとおりです。
例
次の従業員表を検討してください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
以下は、SELECTステートメントの例です。
このクエリが実行されると、employeeテーブルからEmployeeNo、FirstName、LastName列をフェッチします。
テーブルからすべての列を取得する場合は、すべての列を一覧表示する代わりに次のコマンドを使用できます。
上記のクエリは、employeeテーブルからすべてのレコードを取得します。
WHERE句
WHERE句は、SELECTステートメントによって返されるレコードをフィルタリングするために使用されます。 条件はWHERE句に関連付けられています。 WHERE句の条件を満たすレコードのみが返されます。
構文
以下は、WHERE句を使用したSELECTステートメントの構文です。
例
次のクエリは、EmployeeNoが101であるレコードをフェッチします。
このクエリを実行すると、次のレコードが返されます。
注文する
SELECTステートメントが実行されると、返される行は特定の順序ではありません。 ORDER BY句を使用して、列のレコードを昇順/降順で並べます。
構文
以下は、ORDER BY句を使用したSELECTステートメントの構文です。
例
次のクエリは、従業員テーブルからレコードを取得し、FirstNameで結果を並べ替えます。
上記のクエリを実行すると、次の出力が生成されます。
グループ化
GROUP BY句はSELECTステートメントで使用され、同様のレコードをグループに配置します。
構文
GROUP BY句を使用したSELECTステートメントの構文は次のとおりです。
例
次の例は、DepartmentNo列でレコードをグループ化し、各部門からの合計数を識別します。
上記のクエリを実行すると、次の出力が生成されます。
Teradata-論理演算子および条件演算子
Teradataは、次の論理演算子と条件演算子をサポートしています。 これらの演算子は、比較を実行し、複数の条件を結合するために使用されます。
Syntax | Meaning |
---|---|
> | Greater than |
< | Less than |
>= | Greater than or equal to |
⇐ | Less than or equal to |
= | Equal to |
BETWEEN | If values within range |
IN | If values in <expression> |
NOT IN | If values not in <expression> |
IS NULL | If value is NULL |
IS NOT NULL | If value is NOT NULL |
AND | Combine multiple conditions. Evaluates to true only if all conditions are met |
OR | Combine multiple conditions. Evaluates to true only if either of the conditions is met. |
NOT | Reverses the meaning of the condition |
の間に
BETWEENコマンドは、値が値の範囲内にあるかどうかを確認するために使用されます。
例
次の従業員表を検討してください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
次の例では、従業員番号が101,102〜103の範囲にあるレコードをフェッチします。
上記のクエリを実行すると、従業員が101から103の間の従業員レコードが返されます。
IN
INコマンドは、指定された値のリストに対して値をチェックするために使用されます。
例
次の例では、従業員番号が101、102、103のレコードを取得します。
上記のクエリは、次のレコードを返します。
ありませんで
NOT INコマンドは、INコマンドの結果を逆にします。 指定されたリストと一致しない値を持つレコードを取得します。
例
次の例では、従業員番号が101、102、103にないレコードを取得します。
上記のクエリは、次のレコードを返します。
Teradata-SET演算子
SET演算子は、複数のSELECTステートメントの結果を組み合わせます。 これは結合と似ていますが、結合は複数のテーブルの列を結合し、SET演算子は複数の行の行を結合します。
規則
- 各SELECTステートメントの列数は同じでなければなりません。
- 各SELECTのデータ型には互換性が必要です。
- ORDER BYは、最後のSELECTステートメントにのみ含める必要があります。
連合
UNIONステートメントは、複数のSELECTステートメントからの結果を結合するために使用されます。 重複は無視されます。
構文
以下は、UNIONステートメントの基本構文です。
例
次の従業員表と給与表を考えてください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
次のUNIONクエリは、EmployeeテーブルとSalaryテーブルの両方のEmployeeNo値を結合します。
クエリが実行されると、次の出力が生成されます。
UNION ALL
UNION ALLステートメントはUNIONに似ており、重複行を含む複数のテーブルの結果を結合します。
構文
次に、UNION ALLステートメントの基本的な構文を示します。
例
以下は、UNION ALLステートメントの例です。
上記のクエリを実行すると、次の出力が生成されます。 重複も返すことがわかります。
交絡
INTERSECTコマンドは、複数のSELECTステートメントからの結果を結合するためにも使用されます。 2番目のSELECTステートメントで一致する最初のSELECTステートメントから行を返します。 つまり、両方のSELECTステートメントに存在する行を返します。
構文
INTERSECTステートメントの基本構文は次のとおりです。
例
以下は、INTERSECTステートメントの例です。 両方のテーブルに存在するEmployeeNo値を返します。
上記のクエリを実行すると、次のレコードが返されます。 EmployeeNo 105は、SALARYテーブルに存在しないため除外されます。
マイナス/例外
MINUS/EXCEPTコマンドは、複数のテーブルの行を結合し、最初のSELECTにあるが2番目のSELECTにはない行を返します。 どちらも同じ結果を返します。
構文
MINUSステートメントの基本的な構文は次のとおりです。
例
以下は、MINUSステートメントの例です。
このクエリを実行すると、次のレコードが返されます。
Teradata-文字列操作
Teradataは、文字列を操作するためのいくつかの機能を提供します。 これらの関数はANSI標準と互換性があります。
Sr.No | String Function & Description |
---|---|
1 | * |
文字列を連結します | |
2 |
SUBSTR 文字列の一部を抽出します(Teradata拡張機能) |
3 |
SUBSTRING 文字列の一部を抽出します(ANSI標準) |
4 |
INDEX 文字列内の文字の位置を特定します(Teradata拡張機能) |
5 |
POSITION 文字列内の文字の位置を特定します(ANSI標準) |
6 |
TRIM 文字列から空白を削除します |
7 |
UPPER 文字列を大文字に変換します |
8 |
LOWER 文字列を小文字に変換します |
例
次の表に、文字列関数の一部と結果を示します。
String Function | Result |
---|---|
SELECT SUBSTRING(‘warehouse’ FROM 1 FOR 4) | ware |
SELECT SUBSTR(‘warehouse’,1,4) | ware |
SELECT ‘data’ | |
‘ ‘ | |
‘warehouse’ | data warehouse |
SELECT UPPER(‘data’) | DATA |
SELECT LOWER(‘DATA’) | data |
Teradata-日付/時刻関数
この章では、Teradataで使用可能な日付/時刻関数について説明します。
日付の保存
日付は、次の式を使用して内部的に整数として保存されます。
次のクエリを使用して、日付の保存方法を確認できます。
日付は整数として格納されるため、日付に対していくつかの算術演算を実行できます。 Teradataは、これらの操作を実行する機能を提供します。
エキス
EXTRACT関数は、DATE値から日、月、年の一部を抽出します。 この関数は、TIME/TIMESTAMP値から時間、分、秒を抽出するためにも使用されます。
例
次の例は、日付とタイムスタンプの値から年、月、日付、時間、分、秒の値を抽出する方法を示しています。
間隔
Teradataは、DATE値とTIME値で算術演算を実行するINTERVAL関数を提供します。 INTERVAL関数には2つのタイプがあります。
年月間隔
- YEAR
- 年月
- 月
日中の間隔
- DAY
- 営業時間
- 昼間
- 二日目
- HOUR
- 数時間
- 2時間目
- 分
- 2分前
- 2回目
例
次の例では、現在の日付に3年を追加します。
次の例では、現在の日付に3年と01か月を追加します。
次の例では、01日、05時間、10分を現在のタイムスタンプに追加します。
Teradata-組み込み関数
Teradataは、SQLの拡張機能である組み込み関数を提供します。 一般的な組み込み関数は次のとおりです。
Function | Result |
---|---|
SELECT DATE; | Date -------- 16/01/01 |
SELECT CURRENT_DATE; | Date --------16/01/01 |
SELECT TIME; | Time--------04:50:29 |
SELECT CURRENT_TIME; | Time -------- 04:50:29 |
SELECT CURRENT_TIMESTAMP; | Current TimeStamp(6)--------------------------------2016-01-01 04:51:06.990000PLUS00:00 |
SELECT DATABASE; | Database------------------------------TDUSER |
Teradata-集計関数
Teradataは、一般的な集計関数をサポートしています。 SELECTステートメントで使用できます。
- COUNT -行をカウントします
- SUM -指定された列の値を合計します
- MAX -指定された列の大きな値を返します
- MIN -指定された列の最小値を返します
- AVG -指定された列の平均値を返します
例
次の給与表を検討してください。
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
104 | 75,000 | 5,000 | 70,000 |
102 | 80,000 | 6,000 | 74,000 |
105 | 70,000 | 4,000 | 66,000 |
103 | 90,000 | 7,000 | 83,000 |
カウント
次の例では、Salaryテーブルのレコード数をカウントします。
MAX
次の例では、従業員の正味給与の最大値を返します。
MIN
次の例では、Salaryテーブルから従業員の正味最低給与額を返します。
AVG
次の例では、従業員の平均給与値をテーブルから返します。
SUM
次の例では、Salaryテーブルのすべてのレコードから従業員の純給与の合計を計算します。
Teradata-ケースとコアレス
この章では、TeradataのCASEおよびCOALESCE機能について説明します。
ケース式
CASE式は、各行を条件またはWHEN句に対して評価し、最初の一致の結果を返します。 一致するものがない場合、ELSE部分の結果が返されます。
構文
CASE式の構文は次のとおりです。
例
次のEmployeeテーブルを検討してください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
次の例では、DepartmentNo列を評価し、部門番号が1の場合に値1を返します。部門番号が3の場合、2を返します。それ以外の場合は、無効な部門として値を返します。
上記のクエリを実行すると、次の出力が生成されます。
上記のCASE式は、上記と同じ結果を生成する次の形式でも記述できます。
コーレス
COALESCEは、式の最初のnull以外の値を返すステートメントです。 式のすべての引数がNULLと評価される場合、NULLを返します。 構文は次のとおりです。
構文
例
NULLIF
引数が等しい場合、NULLIFステートメントはNULLを返します。
構文
NULLIFステートメントの構文は次のとおりです。
例
次の例は、DepartmentNoが3の場合にNULLを返します。 それ以外の場合、DepartmentNo値を返します。
上記のクエリは、次のレコードを返します。 従業員105には部門番号があることがわかります。 NULLとして。
Teradata-結合
結合は、複数のテーブルのレコードを結合するために使用されます。 テーブルは、これらのテーブルの共通の列/値に基づいて結合されます。
さまざまな種類の結合が利用可能です。
- 内部結合
- 左外部結合
- 右外部結合
- フル外部結合
- 自己参加
- クロスジョイン
- デカルト生産結合
内部結合
内部結合は、複数のテーブルのレコードを結合し、両方のテーブルに存在する値を返します。
構文
以下は、INNER JOINステートメントの構文です。
例
次の従業員表と給与表を考えてください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentNo | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
次のクエリは、共通列EmployeeNoでEmployeeテーブルとSalaryテーブルを結合します。 各テーブルにはエイリアスAとBが割り当てられ、列は正しいエイリアスで参照されます。
上記のクエリを実行すると、次のレコードが返されます。 従業員105は、給与テーブルに一致するレコードがないため、結果に含まれません。
外部参加
LEFT OUTER JOINとRIGHT OUTER JOINも、複数のテーブルの結果を組み合わせます。
- LEFT OUTER JOIN は、左側のテーブルからすべてのレコードを返し、右側のテーブルから一致するレコードのみを返します。
- RIGHT OUTER JOIN は、右側のテーブルからすべてのレコードを返し、左側のテーブルから一致する行のみを返します。
- FULL OUTER JOIN は、LEFT OUTER JOINとRIGHT OUTER JOINSの両方の結果を結合します。 結合されたテーブルから一致する行と一致しない行の両方を返します。
構文
以下は、OUTER JOINステートメントの構文です。 LEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOINのいずれかのオプションを使用する必要があります。
例
LEFT OUTER JOINクエリの次の例を考えてみましょう。 EmployeeテーブルのすべてのレコードとSalaryテーブルの一致するレコードを返します。
上記のクエリを実行すると、次の出力が生成されます。 従業員105の場合、NetPayの値はNULLです。これは、給与テーブルに一致するレコードがないためです。
クロスジョイン
クロス結合は、左のテーブルのすべての行を右のテーブルのすべての行に結合します。
構文
CROSS JOINステートメントの構文は次のとおりです。
上記のクエリを実行すると、次の出力が生成されます。 EmployeeテーブルのEmployeeNo 101は、Salaryテーブルのすべてのレコードと結合されます。
Teradata-サブクエリ
サブクエリは、別のテーブルの値に基づいて、あるテーブルのレコードを返します。 別のクエリ内のSELECTクエリです。 内部クエリとして呼び出されるSELECTクエリが最初に実行され、結果が外部クエリによって使用されます。 その顕著な特徴のいくつかは-
- クエリには複数のサブクエリを含めることができ、サブクエリには別のサブクエリを含めることができます。
- サブクエリは重複レコードを返しません。
- サブクエリが1つの値のみを返す場合、=演算子を使用して外部クエリで使用できます。 複数の値を返す場合は、INまたはNOT INを使用できます。
構文
以下は、サブクエリの一般的な構文です。
例
次の給与表を検討してください。
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
次のクエリは、給与が最も高い従業員番号を識別します。 内側のSELECTは集計関数を実行して最大のNetPay値を返し、外側のSELECTクエリはこの値を使用してこの値を持つ従業員レコードを返します。
このクエリを実行すると、次の出力が生成されます。
Teradata-テーブルタイプ
Teradataは、一時データを保持するために次のテーブルタイプをサポートしています。
- 派生テーブル
- 揮発性テーブル
- グローバル一時表
派生テーブル
派生テーブルは、クエリ内で作成、使用、および削除されます。 これらは、クエリ内に中間結果を保存するために使用されます。
例
次の例は、給与が75000を超える従業員のレコードを含む派生テーブルEmpSalを作成します。
上記のクエリを実行すると、給与が75000を超える従業員が返されます。
揮発性テーブル
揮発性テーブルは、ユーザーセッション内で作成、使用、および削除されます。 それらの定義はデータ辞書に保存されません。 頻繁に使用されるクエリの中間データを保持します。 構文は次のとおりです。
構文
例
上記のクエリを実行すると、次の出力が生成されます。
グローバル一時表
グローバル一時テーブルの定義はデータディクショナリに保存され、多くのユーザー/セッションで使用できます。 ただし、グローバル一時テーブルにロードされたデータは、セッション中のみ保持されます。 セッションごとに最大2000個のグローバル一時テーブルをマテリアライズできます。 構文は次のとおりです。
構文
例
上記のクエリを実行すると、次の出力が生成されます。
Teradata-スペースの概念
Teradataで使用できるスペースには3つのタイプがあります。
常設スペース
永続スペースは、ユーザー/データベースがデータ行を保持するために使用できるスペースの最大量です。 永続テーブル、ジャーナル、フォールバックテーブル、およびセカンダリインデックスサブテーブルは、永続スペースを使用します。
データベース/ユーザーに永続的なスペースは事前に割り当てられていません。 データベース/ユーザーが使用できるスペースの最大量として定義されています。 永続的なスペースの量は、AMPの数で除算されます。 AMPの制限ごとに超過するたびに、エラーメッセージが生成されます。
スプールスペース
スプール領域は、SQLクエリの中間結果を保持するためにシステムによって使用される未使用の永続的な領域です。 スプールスペースのないユーザーは、クエリを実行できません。
永久スペースと同様に、スプールスペースはユーザーが使用できるスペースの最大量を定義します。 スプールスペースは、AMPの数で除算されます。 AMPの制限ごとに制限を超えると、ユーザーはスプールスペースエラーを受け取ります。
一時スペース
一時スペースは、グローバル一時テーブルで使用される未使用の永続スペースです。 一時スペースもAMPの数で除算されます。
Teradata-統計
Teradataオプティマイザーは、すべてのSQLクエリの実行戦略を考え出します。 この実行戦略は、SQLクエリ内で使用されるテーブルで収集された統計に基づいています。 テーブルの統計は、COLLECT STATISTICSコマンドを使用して収集されます。 オプティマイザーでは、最適な実行戦略を立てるために環境情報とデータ人口統計が必要です。
環境情報
- ノード、AMP、およびCPUの数
- メモリ量
データ人口統計
- 行の数
- 行サイズ
- テーブル内の値の範囲
- 値ごとの行数
- ヌルの数
テーブルの統計を収集するには、3つのアプローチがあります。
- ランダムAMPサンプリング
- 完全な統計収集
- SAMPLEオプションの使用
統計の収集
COLLECT STATISTICSコマンドは、テーブルの統計を収集するために使用されます。
構文
以下は、テーブルの統計を収集するための基本的な構文です。
例
次の例では、EmployeeテーブルのEmployeeNo列の統計を収集します。
上記のクエリを実行すると、次の出力が生成されます。
統計の表示
HELP STATISTICSコマンドを使用して、収集された統計を表示できます。
構文
収集された統計を表示する構文は次のとおりです。
例
以下は、Employeeテーブルで収集された統計を表示する例です。
上記のクエリを実行すると、次の結果が生成されます。
Teradata-圧縮
圧縮は、テーブルで使用されるストレージを削減するために使用されます。 Teradataでは、圧縮により、NULLを含む最大255の異なる値を圧縮できます。 ストレージが削減されるため、Teradataはブロックにより多くのレコードを保存できます。 これにより、どのI/O操作でもブロックごとにより多くの行を処理できるため、クエリの応答時間が改善されます。 圧縮は、CREATE TABLEを使用したテーブル作成時、またはALTER TABLEコマンドを使用したテーブル作成後に追加できます。
制限事項
- 列ごとに圧縮できる値は255個のみです。
- プライマリインデックス列は圧縮できません。
- 揮発性テーブルは圧縮できません。
多値圧縮(MVC)
次の表は、値1、2、および3のフィールドDepatmentNoを圧縮します。 列に圧縮が適用されると、この列の値は行とともに保存されません。 代わりに、各AMPのテーブルヘッダーに値が保存され、値を示すためにプレゼンスビットのみが行に追加されます。
複数値圧縮は、有限の値を持つ大きなテーブルに列がある場合に使用できます。
Teradata-説明
EXPLAINコマンドは、解析エンジンの実行計画を英語で返します。 別のEXPLAINコマンドを除き、任意のSQLステートメントで使用できます。 クエリの前にEXPLAINコマンドを使用すると、解析エンジンの実行計画がAMPではなくユーザーに返されます。
EXPLAINの例
次の定義を持つテーブルEmployeeを考えます。
EXPLAINプランの例を以下に示します。
全表スキャン(FTS)
SELECTステートメントで条件が指定されていない場合、オプティマイザーは、テーブルのすべての行にアクセスするフルテーブルスキャンの使用を選択できます。
例
以下は、オプティマイザーがFTSを選択できるサンプルクエリです。
上記のクエリを実行すると、次の出力が生成されます。 ご覧のように、オプティマイザーはすべてのAMPおよびAMP内のすべての行にアクセスすることを選択します。
一意のプライマリインデックス
一意のプライマリインデックスを使用して行にアクセスする場合、1つのAMP操作です。
上記のクエリを実行すると、次の出力が生成されます。 ご覧のとおり、これは単一のAMP検索であり、オプティマイザーは一意のプライマリインデックスを使用して行にアクセスしています。
一意のセカンダリインデックス
Unique Secondary Indexを使用して行にアクセスすると、2アンペアの操作になります。
例
次の定義を持つテーブルSalaryを検討してください。
次のSELECTステートメントを検討してください。
上記のクエリを実行すると、次の出力が生成されます。 ご覧のように、オプティマイザーは一意のセカンダリインデックスを使用して2アンペアで行を取得します。
追加規約
以下は、EXPLAINプランで一般的に見られる用語のリストです。
- (最後の使用)…*
スプールファイルは不要になり、この手順が完了すると解放されます。
- 残留条件なし…*
すべての適用可能な条件が行に適用されています。
- トランザクションの終了… *
トランザクションロックが解除され、変更がコミットされます。
- 重複行の削除…*
重複行はスプールファイルにのみ存在し、テーブルは設定されません。 DISTINCT操作を実行します。
- 行IDのみを抽出するインデックス#nのトラバーサルによって…*
セカンダリインデックス(インデックス#n)で見つかった行IDを含むスプールファイルが構築されます
- SMS(セット操作ステップ)を行います…*
UNION、MINUS、またはINTERSECT演算子を使用して行を結合します。
- ハッシュコードによってすべてのAMPに再配布されます。*
結合の準備のためにデータを再配布します。
- すべてのAMPで複製されます。*
結合の準備として、より小さなテーブルのデータを(SPOOLの観点から)複製します。
- (one_AMP)または(group_AMPs)*
すべてのAMPの代わりに1つのAMPまたはAMPのサブセットが使用されることを示します。
Teradata-ハッシュアルゴリズム
行は、プライマリインデックス値に基づいて特定のAMPに割り当てられます。 Teradataはハッシュアルゴリズムを使用して、行を取得するAMPを決定します。
以下は、ハッシュアルゴリズムの高レベルの図です。
以下は、データを挿入する手順です。
- クライアントはクエリを送信します。
- パーサーはクエリを受信し、レコードのPI値をハッシュアルゴリズムに渡します。
- ハッシュアルゴリズムはプライマリインデックス値をハッシュし、Row Hashと呼ばれる32ビットの数値を返します。
- 行ハッシュの上位ビット(最初の16ビット)は、ハッシュマップエントリを識別するために使用されます。 ハッシュマップには1つのAMP#が含まれます。 ハッシュマップは、特定のAMP#を含むバケットの配列です。
- BYNETは、識別されたAMPにデータを送信します。
- AMPは32ビットの行ハッシュを使用して、ディスク内の行を特定します。
- 同じ行ハッシュを持つレコードがある場合、32ビットの数値である一意性IDを増やします。 新しい行ハッシュの場合、一意性IDは1として割り当てられ、同じ行ハッシュを持つレコードが挿入されるたびに増分されます。
- 行ハッシュと一意性IDの組み合わせは、行IDと呼ばれます。
- 行IDは、ディスク内の各レコードの前に付けられます。
- AMPの各テーブル行は、行IDによって論理的にソートされます。
テーブルの保存方法
テーブルは、行ID(行ハッシュと一意性ID)で並べ替えられ、AMP内に保存されます。 行IDは各データ行とともに保存されます。
Row Hash | Uniqueness ID | EmployeeNo | FirstName | LastName |
---|---|---|---|---|
2A01 2611 | 0000 0001 | 101 | Mike | James |
2A01 2612 | 0000 0001 | 104 | Alex | Stuart |
2A01 2613 | 0000 0001 | 102 | Robert | Williams |
2A01 2614 | 0000 0001 | 105 | Robert | James |
2A01 2615 | 0000 0001 | 103 | Peter | Paul |
Teradata-ビュー
ビューは、クエリによって構築されるデータベースオブジェクトです。 ビューは、結合によって単一のテーブルまたは複数のテーブルを使用して構築できます。 定義はデータディクショナリに永続的に保存されますが、データのコピーは保存されません。 ビューのデータは動的に構築されます。
ビューには、テーブルの行のサブセットまたはテーブルの列のサブセットが含まれる場合があります。
ビューを作成する
ビューは、CREATE VIEWステートメントを使用して作成されます。
構文
ビューを作成するための構文は次のとおりです。
例
次のEmployeeテーブルを検討してください。
EmployeeNo | FirstName | LastName | BirthDate |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
次の例では、Employeeテーブルにビューを作成します。
ビューを使用する
通常のSELECTステートメントを使用して、ビューからデータを取得できます。
例
次の例では、Employee_Viewからレコードを取得します。
上記のクエリを実行すると、次の出力が生成されます。
ビューを変更する
既存のビューは、REPLACE VIEWステートメントを使用して変更できます。
ビューを変更する構文は次のとおりです。
例
次の例は、列を追加するためにEmployee_Viewビューを変更します。
ドロップビュー
既存のビューは、DROP VIEWステートメントを使用して削除できます。
構文
DROP VIEWの構文は次のとおりです。
例
次に、ビューEmployee_Viewをドロップする例を示します。
ビューの利点
- ビューは、テーブルの行または列を制限することにより、セキュリティのレベルを追加します。
- ユーザーには、ベーステーブルではなくビューへのアクセスのみを許可できます。
- ビューを使用して事前に結合することにより、複数のテーブルの使用を簡素化します。
Teradata-マクロ
マクロは、マクロ名を呼び出して保存および実行されるSQLステートメントのセットです。 マクロの定義はデータディクショナリに保存されます。 ユーザーは、マクロを実行するためのEXEC権限のみが必要です。 ユーザーは、マクロ内で使用されるデータベースオブジェクトに対する個別の特権を必要としません。 マクロ文は単一のトランザクションとして実行されます。 マクロ内のSQLステートメントの1つが失敗すると、すべてのステートメントがロールバックされます。 マクロはパラメーターを受け入れることができます。 マクロにはDDLステートメントを含めることができますが、これはマクロの最後のステートメントでなければなりません。
マクロを作成する
マクロは、CREATE MACROステートメントを使用して作成されます。
構文
以下は、CREATE MACROコマンドの一般的な構文です。
例
次のEmployeeテーブルを検討してください。
EmployeeNo | FirstName | LastName | BirthDate |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
次の例では、Get_Empというマクロを作成します。 従業員テーブルからレコードを取得するための選択ステートメントが含まれています。
マクロの実行
マクロはEXECコマンドを使用して実行されます。
構文
EXECUTE MACROコマンドの構文は次のとおりです。
例
次の例は、Get_Empというマクロ名を実行します。次のコマンドを実行すると、従業員テーブルからすべてのレコードが取得されます。
パラメータ化されたマクロ
Teradataマクロはパラメーターを受け入れることができます。 マクロ内では、これらのパラメーターは;で参照されます。 (セミコロン)。
以下は、パラメーターを受け入れるマクロの例です。
パラメータ化されたマクロの実行
マクロはEXECコマンドを使用して実行されます。 マクロを実行するにはEXEC権限が必要です。
構文
EXECUTE MACROステートメントの構文は次のとおりです。
例
次の例は、Get_Empというマクロ名を実行します。パラメーターとして従業員番号を受け入れ、その従業員の従業員テーブルからレコードを抽出します。
Teradata-ストアドプロシージャ
ストアドプロシージャには、一連のSQLステートメントとプロシージャステートメントが含まれます。 手続き的なステートメントのみを含めることができます。 ストアドプロシージャの定義はデータベースに保存され、パラメータはデータディクショナリテーブルに保存されます。
利点
- ストアドプロシージャにより、クライアントとサーバー間のネットワーク負荷が軽減されます。
- 直接アクセスするのではなく、ストアドプロシージャを使用してデータにアクセスするため、セキュリティが向上します。
- ビジネスロジックがテストされ、サーバーに保存されるため、メンテナンスが向上します。
作成手順
ストアドプロシージャは、CREATE PROCEDUREステートメントを使用して作成されます。
構文
以下は、CREATE PROCEDUREステートメントの一般的な構文です。
例
次の給与表を検討してください。
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
次の例では、値を受け入れて給与テーブルに挿入するInsertSalaryという名前のストアドプロシージャを作成します。
手順の実行
ストアドプロシージャは、CALLステートメントを使用して実行されます。
構文
CALLステートメントの一般的な構文は次のとおりです。
例
次の例では、ストアドプロシージャInsertSalaryを呼び出し、Salary Tableにレコードを挿入します。
上記のクエリが実行されると、次の出力が生成され、Salaryテーブルに挿入された行が表示されます。
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
105 | 20,000 | 2,000 | 18,000 |
Teradata-JOIN戦略
この章では、Teradataで利用可能なさまざまなJOIN戦略について説明します。
結合方法
Teradataは、さまざまな結合方法を使用して結合操作を実行します。 一般的に使用されるいくつかの結合方法は次のとおりです-
- 結合を結合
- ネストされた結合
- 製品結合
結合を結合
結合が等価条件に基づいている場合、結合結合メソッドが実行されます。 結合結合では、結合行が同じAMP上にある必要があります。 行は、行ハッシュに基づいて結合されます。 結合結合では、異なる結合戦略を使用して、同じAMPに行をもたらします。
戦略#1
結合列が対応するテーブルのプライマリインデックスである場合、結合行は既に同じAMP上にあります。 この場合、配布は必要ありません。
次の従業員表と給与表を考慮してください。
これらの2つのテーブルがEmployeeNo列で結合されると、EmployeeNoは結合される両方のテーブルのプライマリインデックスであるため、再配布は行われません。
戦略#2
次のEmployeeテーブルとDepartmentテーブルを検討してください。
これら2つのテーブルがDeparmentNo列で結合されている場合、DepartmentNoは1つのテーブルのプライマリインデックスであり、別のテーブルの非プライマリインデックスであるため、行を再分散する必要があります。 このシナリオでは、行の結合が同じAMP上にない場合があります。 このような場合、TeradataはDepartmentNo列で従業員テーブルを再配布する場合があります。
戦略#3
上記のEmployeeテーブルとDepartmentテーブルでは、Departmentテーブルのサイズが小さい場合、TeradataはすべてのAMPでDepartmentテーブルを複製できます。
ネストされた結合
ネストされた結合はすべてのAMPを使用するわけではありません。 ネストされた結合を実行するには、1つのテーブルの一意のプライマリインデックスの条件が1つで、この列を他のテーブルのインデックスに結合する必要があります。
このシナリオでは、システムは1つのテーブルの一意のプライマリインデックスを使用して1つの行をフェッチし、その行ハッシュを使用して他のテーブルから一致するレコードをフェッチします。 ネストされた結合は、すべてのJoinメソッドの中で最も効率的です。
製品結合
製品結合は、1つのテーブルからの各適格行を他のテーブルからの各適格行と比較します。 製品の結合は、次の要因のいくつかのために行われる場合があります-
- 条件が欠落している場所。
- 結合条件は等価条件に基づいていません。
- テーブルのエイリアスが正しくありません。
- 複数の結合条件。
Teradata-OLAP関数
OLAP関数は集計関数に似ていますが、集計関数は値を1つだけ返すのに対して、OLAP関数は集計に加えて個々の行を提供します。
構文
以下は、OLAP関数の一般的な構文です。
集計関数には、SUM、COUNT、MAX、MIN、AVGがあります。
例
次の給与表を検討してください。
EmployeeNo | Gross | Deduction | NetPay |
---|---|---|---|
101 | 40,000 | 4,000 | 36,000 |
102 | 80,000 | 6,000 | 74,000 |
103 | 90,000 | 7,000 | 83,000 |
104 | 75,000 | 5,000 | 70,000 |
以下は、給与テーブルのNetPayの累積合計または現在の合計を見つける例です。 レコードはEmployeeNoでソートされ、NetPay列で累積合計が計算されます。
上記のクエリを実行すると、次の出力が生成されます。
RANK
RANK関数は、指定された列に基づいてレコードを順序付けます。 RANK関数は、ランクに基づいて返されるレコードの数をフィルタリングすることもできます。
構文
RANK関数を使用するための一般的な構文は次のとおりです。
例
次のEmployeeテーブルを検討してください。
EmployeeNo | FirstName | LastName | JoinedDate | DepartmentID | BirthDate |
---|---|---|---|---|---|
101 | Mike | James | 3/27/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 4/25/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 3/21/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
次のクエリは、Joined Dateによって従業員テーブルのレコードを並べ、Joined Dateにランキングを割り当てます。
上記のクエリを実行すると、次の出力が生成されます。
PARTITION BY句は、PARTITION BY句で定義された列でデータをグループ化し、各グループ内でOLAP機能を実行します。 以下は、PARTITION BY句を使用するクエリの例です。
上記のクエリを実行すると、次の出力が生成されます。 各部門のランクがリセットされていることがわかります。
Teradata-データ保護
この章では、Teradataのデータ保護に使用できる機能について説明します。
トランジェントジャーナル
TeradataはTransient Journalを使用して、トランザクション障害からデータを保護します。 トランザクションが実行されるたびに、トランジェントジャーナルは、トランザクションが成功するかロールバックが成功するまで、影響を受ける行の変更前イメージのコピーを保持します。 その後、変更前イメージは破棄されます。 一時ジャーナルは各AMPに保持されます。 これは自動プロセスであり、無効にすることはできません。
後退する
フォールバックは、フォールバックAMPと呼ばれる別のAMPにテーブルの行の2番目のコピーを保存することにより、テーブルデータを保護します。 1つのAMPが失敗すると、フォールバック行にアクセスします。 これにより、1つのAMPに障害が発生した場合でも、フォールバックAMPを介してデータを利用できます。 フォールバックオプションは、テーブル作成時またはテーブル作成後に使用できます。 フォールバックにより、テーブルの行の2番目のコピーが常に別のAMPに保存され、AMPの障害からデータが保護されます。 ただし、フォールバックは、挿入/削除/更新のストレージとI/Oの2倍を占有します。
次の図は、行のフォールバックコピーが別のAMPに保存される方法を示しています。
ダウンAMP回復ジャーナル
AMPが失敗し、テーブルがフォールバック保護されると、ダウンAMP回復ジャーナルがアクティブになります。 このジャーナルは、失敗したAMPのデータに対するすべての変更を追跡します。 ジャーナルは、クラスター内の残りのAMPでアクティブ化されます。 これは自動プロセスであり、無効にすることはできません。 失敗したAMPがライブになると、ダウンAMPリカバリジャーナルからのデータはAMPと同期されます。 これが完了すると、ジャーナルは破棄されます。
クリーク
クリークは、ノードの障害からデータを保護するためにTeradataが使用するメカニズムです。 クリークは、ディスクアレイの共通セットを共有するTeradataノードのセットにすぎません。 ノードに障害が発生すると、障害が発生したノードのvprocはクリーク内の他のノードに移行し、ディスクアレイへのアクセスを継続します。
ホットスタンバイノード
ホットスタンバイノードは、運用環境に参加しないノードです。 ノードに障害が発生すると、障害が発生したノードのvprocはホットスタンバイノードに移行します。 障害が発生したノードが回復すると、ホットスタンバイノードになります。 ホットスタンバイノードは、ノードに障害が発生した場合にパフォーマンスを維持するために使用されます。
RAID
独立ディスクの冗長アレイ(RAID)は、ディスク障害からデータを保護するために使用されるメカニズムです。 ディスクアレイは、論理ユニットとしてグループ化された一連のディスクで構成されます。 このユニットは、ユーザーには単一のユニットのように見えますが、複数のディスクに分散している場合があります。
RAID 1は、Teradataで一般的に使用されています。 RAID 1では、各ディスクはミラーディスクに関連付けられています。 プライマリディスクのデータに対する変更は、ミラーコピーにも反映されます。 プライマリディスクに障害が発生した場合、ミラーディスクのデータにアクセスできます。
Teradata-ユーザー管理
この章では、Teradataでのユーザー管理のさまざまな戦略について説明しました。
ユーザー
ユーザーは、CREATE USERコマンドを使用して作成されます。 Teradataでは、ユーザーもデータベースに似ています。 どちらにもスペースを割り当てることができ、ユーザーにパスワードが割り当てられている場合を除き、データベースオブジェクトを含めることができます。
構文
CREATE USERの構文は次のとおりです。
ユーザーを作成する際、ユーザー名、永続スペース、およびパスワードの値は必須です。 他のフィールドはオプションです。
例
以下は、ユーザーTD01を作成する例です。
アカウント
新しいユーザーの作成中に、ユーザーがアカウントに割り当てられる場合があります。 CREATE USERのACCOUNTオプションは、アカウントを割り当てるために使用されます。 ユーザーは複数のアカウントに割り当てられる場合があります。
構文
アカウントオプション付きのCREATE USERの構文は次のとおりです。
例
次の例では、ユーザーTD02を作成し、アカウントをITおよびAdminとして割り当てます。
ユーザーは、Teradataシステムにログインするとき、またはSET SESSIONコマンドを使用してシステムにログインした後に、アカウントIDを指定できます。
特権を付与する
GRANTコマンドは、データベースオブジェクトに対する1つ以上の特権をユーザーまたはデータベースに割り当てるために使用されます。
構文
GRANTコマンドの構文は次のとおりです。
特権には、INSERT、SELECT、UPDATE、REFERENCESがあります。
例
以下はGRANTステートメントの例です。
特権を取り消す
REVOKEコマンドは、ユーザーまたはデータベースから特権を削除します。 REVOKEコマンドは、明示的な特権のみを削除できます。
構文
REVOKEコマンドの基本的な構文は次のとおりです。
例
次に、REVOKEコマンドの例を示します。
Teradata-パフォーマンスチューニング
この章では、Teradataのパフォーマンスチューニングの手順について説明します。
説明する
パフォーマンスチューニングの最初のステップは、クエリでEXPLAINを使用することです。 EXPLAINプランは、オプティマイザーがクエリを実行する方法の詳細を提供します。 説明計画で、信頼レベル、使用される結合戦略、スプールファイルサイズ、再配布などのキーワードを確認します。
統計を収集する
オプティマイザーはデータ人口統計を使用して、効果的な実行戦略を考え出します。 COLLECT STATISTICSコマンドは、テーブルのデータ人口統計を収集するために使用されます。 列で収集された統計が最新であることを確認してください。
- WHERE句で使用される列と、結合条件で使用される列の統計を収集します。
- Unique Primary Index列の統計を収集します。
- Non Unique Secondary Index列の統計を収集します。 オプティマイザーは、NUSIまたは全表スキャンを使用できるかどうかを決定します。
- 基本テーブルの統計は収集されますが、結合インデックスの統計を収集します。
- パーティション化列の統計を収集します。
データ型
適切なデータ型が使用されていることを確認してください。 これにより、必要以上のストレージの使用が回避されます。
変換
明示的なデータ変換を回避するために、結合条件で使用される列のデータ型に互換性があることを確認してください。
Sort
不要な場合は、不要なORDER BY句を削除してください。
スプールスペースの問題
クエリがそのユーザーのAMPスプールスペース制限ごとに超過すると、スプールスペースエラーが生成されます。 EXPLAIN PLANを確認し、より多くのスプール領域を消費するステップを特定します。 これらの中間クエリを分割して個別に配置し、一時テーブルを構築できます。
一次インデックス
プライマリインデックスがテーブルに対して正しく定義されていることを確認してください。 プライマリインデックス列は、データを均等に分散し、データへのアクセスに頻繁に使用する必要があります。
SETテーブル
SETテーブルを定義すると、オプティマイザーは、挿入されたすべてのレコードに対してレコードが重複しているかどうかを確認します。 重複チェック条件を削除するには、テーブルに一意のセカンダリインデックスを定義できます。
大きなテーブルの更新
大きなテーブルの更新には時間がかかります。 テーブルを更新する代わりに、レコードを削除し、変更された行を含むレコードを挿入できます。
一時テーブルの削除
一時テーブル(ステージングテーブル)とvolatileが不要になったら削除します。 これにより、永続的なスペースとスプールスペースが解放されます。
MULTISETテーブル
入力レコードに重複レコードがないことが確実な場合は、ターゲット表をMULTISET表として定義して、SET表で使用される重複行チェックを回避できます。
Teradata-FastLoad
FastLoadユーティリティは、空のテーブルにデータをロードするために使用されます。 一時的なジャーナルを使用しないため、データをすばやく読み込むことができます。 ターゲット表がMULTISET表であっても、重複する行はロードされません。
制限
ターゲットテーブルには、セカンダリインデックス、結合インデックス、および外部キー参照を含めることはできません。
FastLoadの仕組み
FastLoadは2つのフェーズで実行されます。
フェーズ1
- 解析エンジンは入力ファイルからレコードを読み取り、各AMPにブロックを送信します。
- 各AMPはレコードのブロックを保存します。
- 次に、AMPは各レコードをハッシュし、正しいAMPに再配布します。
- フェーズ1の終わりに、各AMPには行がありますが、行ハッシュシーケンスではありません。
フェーズ2
- FastLoadがEND LOADINGステートメントを受け取ると、フェーズ2が始まります。
- 各AMPは行ハッシュのレコードをソートし、ディスクに書き込みます。
- ターゲットテーブルのロックが解除され、エラーテーブルが削除されます。
例
次のレコードを含むテキストファイルを作成し、ファイルにemployee.txtという名前を付けます。
上記のファイルをEmployee_StgテーブルにロードするサンプルFastLoadスクリプトを次に示します。
FastLoadスクリプトの実行
入力ファイルemployee.txtが作成され、FastLoadスクリプトの名前がEmployeeLoad.flになったら、UNIXおよびWindowsで次のコマンドを使用してFastLoadスクリプトを実行できます。
上記のコマンドが実行されると、FastLoadスクリプトが実行され、ログが生成されます。 ログでは、FastLoadによって処理されたレコードの数とステータスコードを確認できます。
FastLoadの条件
以下は、FastLoadスクリプトで使用される一般的な用語のリストです。
- LOGON -Teradataにログインし、1つ以上のセッションを開始します。
- DATABASE -デフォルトのデータベースを設定します。
- BEGIN LOADING -ロードするテーブルを識別します。
- ERRORFILES -作成/更新する必要がある2つのエラーテーブルを識別します。
- CHECKPOINT -チェックポイントを取るタイミングを定義します。
- SET RECORD -入力ファイル形式がフォーマットされているか、バイナリ、テキスト、またはフォーマットされていないかを指定します。
- DEFINE -入力ファイルのレイアウトを定義します。
- FILE -入力ファイル名とパスを指定します。
- INSERT -入力ファイルのレコードをターゲットテーブルに挿入します。
- ロードの終了-FastLoadのフェーズ2を開始します。 レコードをターゲットテーブルに分散します。
- LOGOFF -すべてのセッションを終了し、FastLoadを終了します。
Teradata-MultiLoad
MultiLoadは一度に複数のテーブルをロードでき、INSERT、DELETE、UPDATE、UPSERTなどのさまざまなタイプのタスクも実行できます。 一度に最大5つのテーブルをロードし、スクリプトで最大20のDML操作を実行できます。 MultiLoadにはターゲットテーブルは必要ありません。
MultiLoadは2つのモードをサポートしています-
- インポート
- DELETE
MultiLoadには、ターゲットテーブルに加えて、作業テーブル、ログテーブル、および2つのエラーテーブルが必要です。
- ログテーブル-再起動に使用されるロード中に取得されたチェックポイントを維持するために使用されます。
- エラーテーブル-これらのテーブルは、エラー発生時にロード中に挿入されます。 最初のエラーテーブルには変換エラーが格納され、2番目のエラーテーブルには重複レコードが格納されます。
- ログテーブル-MultiLoadの各フェーズの結果を再起動のために維持します。
- 作業テーブル-MultiLoadスクリプトは、ターゲットテーブルごとに1つの作業テーブルを作成します。 作業テーブルは、DMLタスクと入力データを保持するために使用されます。
制限
MultiLoadにはいくつかの制限があります。
- 一意のセカンダリインデックスはターゲットテーブルでサポートされていません。
- 参照整合性はサポートされていません。
- トリガーはサポートされていません。
MultiLoadの仕組み
MultiLoadインポートには5つのフェーズがあります-
- *フェーズ1 *-予備フェーズ-基本的なセットアップアクティビティを実行します。
- *フェーズ2 *-DMLトランザクションフェーズ-DMLステートメントの構文を検証し、Teradataシステムに取り込みます。
- *フェーズ3 *-取得フェーズ-入力データを作業テーブルに取り込み、テーブルをロックします。
- *フェーズ4 *-アプリケーションフェーズ-すべてのDML操作を適用します。
- *フェーズ5 *-クリーンアップフェーズ-テーブルのロックを解除します。
MultiLoadスクリプトに含まれる手順は次のとおりです-
- *ステップ1 *-ログテーブルを設定します。
- *ステップ2 *-Teradataにログオンします。
- *ステップ3 *-ターゲット、ワーク、エラーテーブルを指定します。
- *ステップ4 *-INPUTファイルレイアウトを定義します。
- *ステップ5 *-DMLクエリを定義します。
- *ステップ6 *-IMPORTファイルに名前を付けます。
- *ステップ7 *-使用するレイアウトを指定します。
- *ステップ8 *-ロードを開始します。
- *ステップ9 *-ロードを終了し、セッションを終了します。
例
次のレコードを含むテキストファイルを作成し、ファイルにemployee.txtという名前を付けます。
次の例は、従業員テーブルからレコードを読み取り、Employee_StgテーブルにロードするMultiLoadスクリプトです。
MultiLoadスクリプトの実行
入力ファイルemployee.txtが作成され、マルチロードスクリプトの名前がEmployeeLoad.mlになったら、UNIXおよびWindowsで次のコマンドを使用してマルチロードスクリプトを実行できます。
Teradata-FastExport
FastExportユーティリティは、Teradataテーブルからフラットファイルにデータをエクスポートするために使用されます。 レポート形式でデータを生成することもできます。 Joinを使用して、1つ以上のテーブルからデータを抽出できます。 FastExportはデータを64Kブロックでエクスポートするため、大量のデータを抽出するのに役立ちます。
例
次のEmployeeテーブルを検討してください。
EmployeeNo | FirstName | LastName | BirthDate |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
FastExportスクリプトの例を次に示します。 従業員テーブルからデータをエクスポートし、ファイルemployeedata.txtに書き込みます。
FastExportスクリプトの実行
スクリプトを作成してemployee.fxという名前を付けたら、次のコマンドを使用してスクリプトを実行できます。
上記のコマンドを実行すると、ファイルemployeedata.txtに次の出力が表示されます。
FastExportの条件
以下は、FastExportスクリプトで一般的に使用される用語のリストです。
- LOGTABLE -再起動のためにログテーブルを指定します。
- LOGON -Teradataにログインし、1つ以上のセッションを開始します。
- DATABASE -デフォルトのデータベースを設定します。
- BEGIN EXPORT -エクスポートの開始を示します。
- EXPORT -ターゲットファイルとエクスポート形式を指定します。
- SELECT -データをエクスポートする選択クエリを指定します。
- END EXPORT -FastExportの終了を指定します。
- LOGOFF -すべてのセッションを終了し、FastExportを終了します。
Teradata-BTEQ
BTEQユーティリティは、Teradataの強力なユーティリティであり、バッチモードとインタラクティブモードの両方で使用できます。 DDLステートメント、DMLステートメントの実行、マクロおよびストアドプロシージャの作成に使用できます。 BTEQは、フラットファイルからTeradataテーブルにデータをインポートするために使用でき、テーブルからファイルまたはレポートにデータを抽出するためにも使用できます。
BTEQ用語
以下は、BTEQスクリプトで一般的に使用される用語のリストです。
- LOGON -Teradataシステムにログインするために使用されます。
- ACTIVITYCOUNT -前のクエリによって影響を受けた行の数を返します。
- ERRORCODE -前のクエリのステータスコードを返します。
- DATABASE -デフォルトのデータベースを設定します。
- LABEL -一連のSQLコマンドにラベルを割り当てます。
- RUN FILE -ファイルに含まれるクエリを実行します。
- GOTO -コントロールをラベルに転送します。
- LOGOFF -データベースからログオフし、すべてのセッションを終了します。
- IMPORT -入力ファイルのパスを指定します。
- EXPORT -出力ファイルのパスを指定し、エクスポートを開始します。
例
次に、BTEQスクリプトのサンプルを示します。
上記のスクリプトは、次のタスクを実行します。
- Teradata Systemにログインします。
- デフォルトのデータベースを設定します。
- employee_bkupというテーブルを作成します。
- Employeeテーブルから1つのレコードを選択して、テーブルにレコードがあるかどうかを確認します。
- テーブルが空の場合、employee_bkupテーブルを削除します。
- レコードをemployee_bkupテーブルに挿入するLabel InsertEmployeeにコントロールを転送します
- ERRORCODEをチェックして、各SQLステートメントに続いて、ステートメントが成功したことを確認します。
- ACTIVITYCOUNTは、前のSQLクエリによって選択/影響を受けたレコードの数を返します。