Skip to main content

外部テーブルの定義

InterSystems SQL では、外部データ・ソースのデータを InterSystems IRIS® データ・プラットフォームに投影する外部テーブルを定義できます。このテーブルを使用すると、InterSystems IRIS に格納されているデータに対するクエリと同様に、このような外部データに対するクエリを実行できます。

外部テーブルの概要

さまざまな理由により、InterSystems IRIS に直接データをロードすることが不可能であるか、合理的ではない場合があります。例として、データ・ファイルがきわめて大きく、InterSystems IRIS テーブルにロードするストレージ・コストに見合うほど頻繁にはクエリが実行されない状況が挙げられます。外部テーブルは、別のシステムで管理されているデータを投影し、InterSystems IRIS のインスタンスで管理および格納しているデータと同様に、投影したデータにクエリおよびアクセスできるようにする機能です。

外部テーブルの作成

外部テーブルを作成する前に、InterSystems IRIS が外部データ・ソースとどのように対話するかを決定するために外部サーバを定義する必要があります。外部サーバを定義すると、外部ソースのデータを表す外部テーブルを 1 つ以上定義できます。そのためには、外部データ・ソースのフィールドを InterSystems IRIS の列にマッピングするうえで必要な、列の名前とタイプなどの詳細情報を指定します。

手順 1:外部サーバを定義する

外部テーブルを定義するには、外部サーバを定義し、使用する外部データ・ラッパを指定しておく必要があります。そのためには、CREATE FOREIGN SERVER コマンドを使用します。

CREATE FOREIGN SERVER コマンドでは、外部データ・ラッパを指定する必要があります。InterSystems IRIS で特定のタイプのデータ・ソースをどのように操作するかを、この外部データ・ラッパで指定します。CREATE FOREIGN SERVER コマンドでは、外部データ・ラッパと、その外部データ・ラッパが必要とするメタデータを指定する必要があります。現在のところ、InterSystems SQL では 2 つの外部データ・ラッパとして CSV と JDBC をサポートしています。CSV 外部データ・ラッパでは、ローカル・ファイル・システムのフォルダへのパスを指定する必要があります。JDBC 外部データ・ラッパでは、外部データベースに接続するための JDBC 接続を指定する必要があります。

外部サーバに定義できる外部テーブルの数に制限はありません。

以下の例は、CSV 外部データ・ラッパを使用する外部サーバの作成方法を示しています。

CREATE FOREIGN SERVER Sample.TestFile FOREIGN DATA WRAPPER CSV HOST '\path\to\file'

以下の例は、JDBC 外部データ・ラッパを使用する外部サーバの作成方法を示しています。

CREATE FOREIGN SERVER Sample.PostgresDB FOREIGN DATA WRAPPER JDBC 'postgresConnection'

手順 2:外部テーブルを定義する

外部サーバを定義すると、CREATE FOREIGN TABLE コマンドを使用して外部テーブルを定義できます。このテーブルの列名は外部ソースのデータと同じ列名にすることができるほか、InterSystems IRIS では別の名前で外部ソースのデータ列を参照することもできます。外部テーブルを作成する構文は、LOAD DATA コマンドに似ています。

CREATE FOREIGN TABLE Sample.AccountTeam (
   TeamID BIGINT,
   Name VARCHAR(50),
   CountryCode VARCHAR(10)
) SERVERT Sample.PostgresDB TABLE 'Sample.Teams'

データ定義言語 (DDL) 文を使用して外部テーブルを作成すると、対応するクラスが作成されます。このクラスの ClassType は "view" となり、このクラスを編集することはできません。

外部テーブルのクエリ

外部テーブルのクエリは、ネイティブ・テーブルのクエリとまったく同じです。

SELECT Name, CountryCode FROM Sample.AccountTeam ORDER BY Name

クエリではさらに高度な構文を活用することもできます。

SELECT t.Name, COUNT(m.*)
FROM Sample.AccountManager m JOIN Sample.AccountTeam t
     ON m.TeamID = t.TeamID
WHERE t.CountryCode = 'UK' AND m.Salary > 100000
GROUP BY t.Name

InterSystems SQL では、WHERE 節の簡潔な述語が可能な範囲で送信またはプッシュ・ダウンされます。これにより、ネットワーク上で送受信されるデータの量を制限し、リモート・データベースでの最適化を最大限に活用します。ただし、2 つの外部テーブル間での GROUP BY や JOIN のような複雑な節は、外部データの取得を完了した後で InterSystems IRIS によって処理されます。

外部テーブルの削除

外部テーブルを削除するには DROP FOREIGN TABLE コマンドを使用します。

DROP FOREIGN TABLE Example.MyForeignTable

また、CASCADE オプションを指定して DROP FOREIGN SERVER コマンドを使用すると、外部サーバとそこに定義されているすべての外部テーブルを削除できます。

DROP FOREIGN SERVER Example.PostgresDB CASCADE
FeedbackOpens in a new tab