`CREATE FOREIGN TABLE` 文は、外部テーブルを作成するためのステートメントです。MaxCompute、OSS、DLF、Hologres などのデータソースに対して外部テーブルを作成できます。このトピックでは、`CREATE FOREIGN TABLE` 文の使用方法について説明します。
制限事項
Hologres V1.3 以降のバージョンのみが、MaxCompute の 3レイヤーモデルをサポートしています。3レイヤーモデルでは、プロジェクトとテーブルの間にスキーマレイヤーが追加されます。詳細については、「スキーマ操作」をご参照ください。3レイヤーモデルを使用する MaxCompute プロジェクトに対して外部テーブルを作成する場合、Hologres インスタンスのバージョンが V1.3 より前であれば、アップグレードが必要です。アップグレードに失敗した場合は、「アップグレード準備時の一般的なエラー」をご参照ください。また、Hologres の DingTalk グループに参加してフィードバックを投稿することもできます。詳細については、「オンラインサポートの利用方法」をご参照ください。
構文
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
{ column_name data_type }
[, ... ]
] )
SERVER odps_server
[ OPTIONS ( option 'value' [, ... ] ) ]
次の表にパラメーターを示します。
パラメーター | 説明 |
SERVER |
外部データソースに接続するサーバーです。 Hologres に事前設定されている odps_server 外部テーブルサーバーを直接呼び出します。原理の詳細については、「Postgres FDW」をご参照ください。 |
OPTIONS |
project_name と table_name を指定します。MaxCompute プロジェクトが 3レイヤーモデルを使用しているにもかかわらず、2レイヤーモデルの構文を使用した場合、エラーが発生します。エラーメッセージの例を次に示します。
|
Hologres 外部テーブルのフィールドのデータ型は、MaxCompute テーブルの対応するフィールドのデータ型と一致している必要があります。
例
-
外部テーブルから直接データをクエリする
Hologres で外部テーブルを作成すると、MaxCompute 外部テーブルから直接データをクエリできます。次の SQL 文に例を示します。
-- 2レイヤーモデル CREATE FOREIGN TABLE src_pt( id text, pt text) SERVER odps_server OPTIONS(project_name '<odps_project>', table_name '<odps_table>'); -- 3レイヤーモデル CREATE FOREIGN TABLE src_pt( id text, pt text) SERVER odps_server OPTIONS(project_name '<odps_project>#<odps_schema>', table_name '<odps_table>'); SELECT * FROM src_pt;詳細については、「外部テーブルに基づく MaxCompute データのクエリ高速化」をご参照ください。
-
外部テーブルからデータをインポートしてからクエリする
データをクエリする前に、MaxCompute から Hologres にデータをインポートできます。次の文に例を示します。
CREATE FOREIGN TABLE src_pt_odps( id text, pt text) SERVER odps_server OPTIONS (project_name'<odps_project>', table_name'<odps_table>'); BEGIN; CREATE TABLE src_pt( id text, pt text); COMMIT; INSERT INTO src_pt SELECT * FROM src_pt_odps;詳細については、「SQL ステートメントを実行して MaxCompute から Hologres にデータをインポートする」をご参照ください。
MaxCompute と Hologres のデータ型のマッピング
MaxCompute と Hologres のデータ型のマッピングの詳細については、「MaxCompute と Hologres のデータ型のマッピング」をご参照ください。
-
DATETIMEは UTC+8 タイムゾーンを使用します。値の範囲は 0000年1月1日 から 9999年12月31日 までです。精度はミリ秒です。 -
TIMESTAMPTZにはタイムゾーンが含まれます。値の範囲は 紀元前 4713年 から 西暦 294276年 までです。精度はマイクロ秒です。 -
MaxCompute テーブルに非対応のデータ型のフィールドが含まれている場合でも、その非対応のフィールドにアクセスしない限り、対応している他のフィールドをクエリできます。