目的
ExecuteForeignSQLストアド プロシージャは、外部サーバー上で基本的なSQLクエリーを実行するためのインターフェースを提供します。たとえば、ExecuteForeignSQLを使用して外部サーバーのデータベースにテーブルを作成したりテーブルを削除したりできます。
ExecuteForeignSQLはすべてのSQLクエリーを渡しますが、結果セットを返しません。したがって、これを使用してSELECTまたはHELPステートメントを実行する場合、結果は表示されません。
ExecuteForeignSQLとインストール スクリプトは、Teradata QueryGridコネクタ パッケージの一部として提供されます。DBAはスクリプトを手動で実行してExecuteForeignSQLをインストールし、適切な権限を付与します。ExecuteForeignSQLを使用する前に、DO IMPORT WITH句でQGExecuteForeignQueryテーブル演算子を使用して、外部サーバーを作成します。
構文
構文要素
- SYSLIB.
- ストアド プロシージャがあるデータベースの名前。
- query_expression
- 有効なTeradata SQL式。
- server_name
- 外部サーバーの名前。
使用方法に関する注意
ExecuteForeignSQLでは、埋め込みテーブル演算子と信頼できるセッションを使用してログオンの信頼証明の検証を処理することで、安全な実行が可能になります。
DBAは、ExecuteForeignSQLを使用する権限を選択的にGRANTできます。
ExecuteForeignSQLを呼び出すには、最初にTD_SYSFNLIB.QGExecuteForeignQueryテーブル演算子の使用を指定する外部サーバー オブジェクトを作成する必要があります。
DO IMPORT WITH TD_SYSFNLIB.QGExecuteForeignQuery;外部サーバーには一度に1つのインポート演算子と1つのエクスポート演算子のみを関連付けることができます。したがって、クエリーに使用されている既存の外部サーバー上でExecuteForeignSQLを実行するには、ExecuteForeignSQLの実行に使用する別の名前を持つ個別の外部サーバー オブジェクトを作成できます。この演算子にはEXECUTE FUNCTIONおよびSELECT権限が必要です。
テーブル名を参照する場合、その名前の先頭にスキーマ名を追加する必要があります。
SELECTまたはHELPなど、結果セットを返すSQLクエリーはリモート システムで実行されますが、結果の行は表示されません。クエリーは、CPU、メモリおよびI/Oリソースを引き続きリモート システムで使用することができます。
ExecuteForeignSQLはproxyuserを使用するので、DBCの代わりにコマンドを実行することはサポートされません。
ExecuteForeignSQLはKerberos化されたクラスタで使用できます。
例: ExecuteForeignSQLの使用
ExecuteForeignSQLを呼び出す前に、次の例に示すように、外部サーバー オブジェクトを作成してDO IMPORT WITH TD_SYSFNLIB.QGExecuteForeignQueryを指定する必要があります。
CREATE FOREIGN SERVER <fs_name> EXTERNAL SECURITY DEFINER TRUSTED TD_SERVER_DB.<auth_name> USING LINK('<linkName>') version('active') DO IMPORT WITH TD_SYSFNLIB.QGExecuteForeignQuery;
この例では、外部サーバーにテーブルを作成します。
CALL SYSLIB.ExecuteForeignSQL( 'create table tab1(c1 int, c2 string)', 'QG_Presto1'); );
ここでQG_Presto1は外部サーバーの名前です。