外部テーブルのペイロード列にはデータが含まれます。クエリーがペイロード値でフィルタ処理する場合、データベースは外部テーブル内のすべてのオブジェクトを読み取り、変換し、WHERE句の条件を適用するために個々の行を調べます。
例と結果は、河川流量のサンプル データ セットを示しています。独自のデータを使用するには、テーブル名、列名、および許可オブジェクトを置き換えます。
- NOS関連コマンドを実行するには、必要な権限を持つユーザーとしてデータベースにログオンします。
- カスタムのPATHPATTERNを使用した外部テーブルを作成するか、データベース管理者に作成を依頼します。AUTHORIZATIONオブジェクトによる外部テーブル アクセスの制御で作成した許可オブジェクトを使用します。
CREATE FOREIGN TABLE riverflow_csv_path , EXTERNAL SECURITY DEFINER TRUSTED DefAuth ( Location VARCHAR(2048) CHARACTER SET UNICODE CASESPECIFIC, Payload DATASET INLINE LENGTH 64000 STORAGE FORMAT CSV ) USING ( LOCATION ('YOUR-STORAGE-ACCOUNT') PATHPATTERN('$data/$siteno/$year/$month/$day') );
サンプルの河川流量データ セットの信頼証明と場所の値については、例の変数置換を参照してください。
- ペイロード フィルタのみを使用してクエリーを実行します。
SELECT TOP 2 CAST(payload..GageHeight AS FLOAT)( FORMAT '-ZZZ9.99') TheGageHeight, CAST (payload..Flow AS FLOAT)(FORMAT '-ZZZ9999.99') TheFlow FROM riverflow_csv_path WHERE payload..site_no = '09380000';
結果は次のようになります。
TheGageHeight TheFlow ------------- ----------- 10.21 17500.00 10.20 17400.00
- site_no属性もパスの一部として表示されるため、ペイロード フィルタリングの代わりにパス フィルタリングを使用することが、このクエリーの記述にはより適しています。
SELECT TOP 2 CAST(payload..GageHeight AS FLOAT)( FORMAT '-ZZZ9.99') TheGageHeight, CAST (payload..Flow AS FLOAT)(FORMAT '-ZZZ9999.99') TheFlow FROM riverflow_csv_path WHERE $path.$siteno = '09380000';
パス フィルタリングの方がより効率的です。パス フィルタリングでは、読み込まれる外部オブジェクトの数が少なくなります。有効な場合はクエリー ログを表示できます。ここから、2番目のクエリーではアクセスされる外部オブジェクトの数が少なく、転送されるデータが少ないことを確認できます。
NOS関連のDBQLフィールドの詳細については、オレンジ ブック、<Native Object Store: Teradata Vantage™ Advanced SQL Engine, TDN0009800>、および<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。
結果は次のようになります。
TheGageHeight TheFlow ------------- ----------- 10.16 17200.00 10.22 17500.00