3.6.1 CREATE FOREIGN TABLE文の指定形式および規則
外部表を定義します。
(1) 指定形式
CREATE FOREIGN TABLE文::=
CREATE FOREIGN TABLE 表名 〔(列定義〔,列定義〕…)〕
〔パーティションキー列指定〕
〔SERVER 外部サーバ名〕
OPTIONS (外部表オプション〔,外部表オプション〕…)
列定義::=列名 データ型
パーティションキー列指定::=PARTITIONED BY (列名 データ型〔,列名 データ型〕…)
外部表オプション::={外部データのデータ形式指定
|外部データのディレクトリパス指定
|外部データのフォーマットオプション指定
|パーティションキー列のオプション指定
|Icebergオプション指定}
外部データのデータ形式指定::=FORMAT {CSV|PARQUET|JSON|ICEBERG}
外部データのディレクトリパス指定::=LOCATION 外部データのディレクトリパス文字列
外部データのディレクトリパス文字列::=文字列定数
外部データのフォーマットオプション指定::=フォーマットオプション
〔,フォーマットオプション〕…
フォーマットオプション::={区切り文字指定|囲み文字指定|ヘッダー指定}
区切り文字指定::=DELIMITER_CHAR 区切り文字
囲み文字指定::=ENCLOSING_CHAR {囲み文字|NONE}
ヘッダー指定::=HEADER_SPEC {YES|NO}
区切り文字::=文字列定数
囲み文字 ::=文字列定数
パーティションキー列のオプション指定::=
パーティションキー列オプション〔,パーティションキー列オプション〕…
パーティションキー列オプション::={属性プロパティ|テンプレートディレクトリパス}
属性プロパティ::={列名.TYPE {ENUM|INTEGER|DATE|TIME|TIMESTAMP}
|列名.VALUE 列挙文字列
|列名.RANGE_MIN {最小値整数|最小値文字列}
|列名.RANGE_MAX {最大値整数|最大値文字列}
|列名.FORMAT 日時書式文字列
|列名.INTERVAL 間隔値
|列名.DIGITS 桁数
|列名.INTERVAL.UNIT 時間単位}
列挙文字列::=文字列定数
最小値整数::=整数定数
最小値文字列::=文字列定数
最大値整数::=整数定数
最大値文字列::=文字列定数
日時書式文字列::=文字列定数
間隔値::=符号なし整数定数
桁数::=符号なし整数定数
時間単位::={YEAR|MONTH|WEEK|DAY|HOUR|MINUTE|SECOND}
テンプレートディレクトリパス::=
LOCATION.TEMPLATE テンプレートディレクトリパス文字列
テンプレートディレクトリパス文字列::=文字列定数
Icebergオプション指定::=Icebergオプション〔,Icebergオプション〕…
Icebergオプション::={カタログ種別指定
|カタログ名前空間指定
|カタログURI指定
|カタログリージョン指定
|カタログID指定
|ウェアハウス名指定
|トークンURI指定
|クライアントID指定
|クライアントシークレット指定
|許可スコープ指定}
カタログ種別指定::=CATALOG_TYPE {REST|GLUE}
カタログ名前空間指定::=CATALOG_NAMESPACE カタログ名前空間
カタログ名前空間::=文字列定数
カタログURI指定::=CATALOG_URI カタログエンドポイント文字列
カタログエンドポイント文字列::=文字列定数
カタログリージョン指定::=CATALOG_REGION カタログリージョン名
カタログリージョン名::=文字列定数
カタログID指定::=CATALOG_ID カタログID
カタログID::=文字列定数
ウェアハウス名指定::=WAREHOUSE_NAME ウェアハウス名
ウェアハウス名::=文字列定数
トークンURI指定::=AUTH_TOKEN_URI トークンURI
トークンURI::=文字列定数
クライアントID指定::=AUTH_CLIENT_ID クライアントID
クライアントID::=文字列定数
クライアントシークレット指定::=AUTH_CLIENT_SECRET クライアントシークレット
クライアントシークレット::=文字列定数
許可スコープ指定::=AUTH_ALLOWED_SCOPES 許可スコープ文字列
許可スコープ文字列::=文字列定数
(2) 指定形式の説明
(a) 表名
定義する外部表の表名を指定します。すでに定義されている表と同じ表名は指定できません。表名の指定規則については,「6.1.5 名前の修飾」の「(2) 表名の指定形式」を参照してください。
(b) 列定義
列定義::=列名 データ型
外部表の列の定義を指定します。
- 重要
-
-
外部データのデータ形式指定にICEBERGを指定する場合は,列定義の指定を省略してください(列定義を指定できません)。
-
外部データのデータ形式指定にPARQUETを指定する場合は,列定義の指定を省略できます。
列定義の指定を省略した場合の規則については,「(5) 列定義の指定を省略した場合の規則」を参照してください。
-
指定規則を次に示します。
-
列定義は1つ以上指定してください。
-
検索対象とする外部データのすべての列を,列定義に指定する必要はありません。※
-
列定義の指定順序は,検索対象とする外部データの列の順序と同じにする必要はありません。※
- 注※
-
外部データがヘッダー行のないCSV形式の場合,外部データのすべての列を順序どおりに列定義に指定してください。
- ●列名
-
外部表の列名を指定します。指定規則を次に示します。
-
指定する列名は,検索対象とする外部データの列の列名と完全一致させてください。
ただし,外部データがヘッダー行のないCSV形式の場合は,列名を完全一致させる必要はありません。
-
列定義を2つ以上指定する場合,列名を重複して指定できません。
-
HADBによって自動的に設定される導出列名と重複する可能性があるため,列名にEXPnnnn_NO_NAMEを指定しないでください。nnnnは,0000~9999の符号なし整数です。
-
- ●データ型
-
外部表の列のデータ型を指定します。指定できるデータ型を次の表に示します。
各データ型の詳細については,「6.2 データ型」を参照してください。
表3‒4 指定できるデータ型(CREATE FOREIGN TABLE文の場合) 項番
データ型
指定形式
1
BIGINT※1
BIGINT
2
INTEGER
INTまたはINTEGER
3
SMALLINT
SMALLINT
4
DECIMAL
DEC〔(m〔,n〕)〕またはDECIMAL〔(m〔,n〕)〕
m:精度(全体の桁数)
n:位取り(小数部の桁数)
mを省略すると38が仮定され,nを省略すると0が仮定されます。
5
NUMERIC※2
NUMERIC〔(m〔,n〕)〕
m:精度(全体の桁数)
n:位取り(小数部の桁数)
mを省略すると38が仮定され,nを省略すると0が仮定されます。
6
DOUBLE PRECISION
DOUBLEまたはDOUBLE PRECISION
7
FLOAT※3
FLOAT
8
REAL
REAL
9
CHARACTER
CHAR(n)またはCHARACTER(n)
n:文字列の長さ(バイト)
CHARまたはCHARACTERと指定した場合は,文字列の長さに1が仮定されます。
10
VARCHAR※4
VARCHAR(n)
n:文字列の最大長(バイト)
11
STRING
STRING
12
DATE
DATE
13
TIME
TIME(p)またはTIME
p:小数秒精度(小数秒の桁数)
pに指定できる値は,0,3,6,9,または12です。TIMEと指定した場合は,pに0が仮定されます。
14
TIMESTAMP
-
TIMESTAMP WITHOUT TIME ZONE(時刻帯なしの時刻印データ)の場合
次のどちらかの形式で指定します。
TIMESTAMP(p)
TIMESTAMP
-
TIMESTAMP WITH TIME ZONE(時刻帯付きの時刻印データ)の場合
次のどちらかの形式で指定します。
TIMESTAMP(p) WITH TIME ZONE
TIMESTAMP WITH TIME ZONE
p:小数秒精度(小数秒の桁数)
pに指定できる値は,0,3,6,9,または12です。(p)を省略した場合は,pに0が仮定されます。
15
BINARY
BINARY(n)
n:バイナリデータの長さ(バイト数)
BINARYと指定した場合は,バイナリデータの長さに1が仮定されます。
16
VARBINARY
VARBINARY(n)
n:バイナリデータの最大長(バイト数)
17
BOOLEAN
BOOLEAN
18
UUID
UUID
19
STRUCT
STRUCT {フィールド名 フィールドデータ型〔,フィールド名 フィールドデータ型〕…}
- フィールド名:
-
構造データのフィールドの名称を指定します。
- フィールドデータ型:
-
構造データのフィールドのデータ型を指定します。フィールドデータ型には,数データ,文字データ,日時データ,バイナリデータ,配列データ,または構造データのどれかのデータ型を指定します。フィールドデータ型の指定形式は,各データ型の記述形式の規則に従います。
<指定例>
STRUCT {"C1" INTEGER,
"C2" CHAR(5),
"C3" STRUCT {"C3_A" INTEGER,
"C3_B" CHAR(5),
"C3_C" DATE}}
20
ARRAY※5
要素データ型 ARRAY[最大要素数]
- 要素データ型:
-
配列要素のデータ型を指定します。要素データ型には,数データ,文字データ,日時データ,バイナリデータ,または構造データのどれかのデータ型を指定します。要素データ型の指定形式は,各データ型の記述形式の規則に従います。
- 最大要素数:
-
配列要素の最大数を指定します。最大要素数には,2~30,000の符号なし整数定数を指定してください。
<指定例>
-
要素データ型がCHAR(5)で,最大要素数が20の場合
CHAR(5) ARRAY[20]
-
要素データ型がINTEGERで,最大要素数が5の場合
INTEGER ARRAY[5]
- 注※1
-
整数データ型のデータ形式がレガシー形式の場合,BIGINT型が指定されたときは,HADBはデータ型にINTEGER型が指定されたと見なします。
- 注※2
-
NUMERIC型が指定された場合,HADBはデータ型にDECIMAL型が指定されたと見なします。
- 注※3
-
FLOAT型が指定された場合,HADBはデータ型にDOUBLE PRECISION型が指定されたと見なします。
- 注※4
-
列の定義長が32,000バイトを超えるVARCHAR型は指定できません。
- 注※5
-
配列型のデータ型です。配列型の列を定義する際の考慮点については,マニュアルHADB システム構築・運用ガイドの配列型の列の定義【カラムストア表】を参照してください。
- 重要
-
-
外部データのデータ形式指定にPARQUETを指定する場合,外部表の列のデータ型には次のデータ型を指定できません。
-
TIME(0),TIME(12),TIMESTAMP(0) WITHOUT TIME ZONE,TIMESTAMP(12) WITHOUT TIME ZONE,TIMESTAMP(0) WITH TIME ZONE,TIMESTAMP(12) WITH TIME ZONE
-
フィールドデータ型に上記のどれかのデータ型を指定したSTRUCT型,または要素データ型に上記のどれかのデータ型を指定したARRAY型
-
-
外部データのデータ形式指定にCSVを指定する場合,外部表の列のデータ型には次のデータ型を指定できません。
-
TIME(12),TIMESTAMP(12) WITHOUT TIME ZONE,TIMESTAMP(12) WITH TIME ZONE,UUID型,STRUCT型,ARRAY型
-
-
外部データのデータ形式指定にJSONを指定する場合,外部表の列のデータ型には次のデータ型を指定できません。
-
TIME(12),TIMESTAMP(12) WITHOUT TIME ZONE,TIMESTAMP(12) WITH TIME ZONE,UUID型
-
フィールドデータ型に上記のどれかのデータ型を指定したSTRUCT型,または要素データ型に上記のどれかのデータ型を指定したARRAY型
-
-
-
(c) パーティションキー列指定
パーティションキー列指定::=PARTITIONED BY (列名 データ型〔,列名 データ型〕…)
パーティションキー列を定義します。パーティションキー列を定義すると,検索対象とする外部データファイルを絞り込むことができます。
- 重要
-
外部データのデータ形式指定にICEBERGを指定する場合,パーティションキー列指定は指定できません。ただし,参照先のIcebergテーブルにパーティションが定義されている場合は,外部表の検索時にそのパーティションを使用した絞り込みが有効になることがあります。
- メモ
-
-
パーティションキー列指定中の「列名 データ型」の指定をパーティションキー列定義と呼びます。パーティションキー列定義は最大16個指定できます。
-
外部データを格納しているファイルを外部データファイルと呼びます。
-
- ●列名
-
パーティションキー列の名前を指定します。任意の名前を指定します。
指定規則を次に示します。
-
外部表の列名と同じ名前を指定できません。
-
パーティションキー列定義を2つ以上指定する場合,同じ名前を指定できません。
-
- ●データ型
-
パーティションキー列のデータ型を指定します。次のどれかのデータ型を指定してください。
-
BIGINT※1
-
INTEGER※2
-
SMALLINT
-
CHAR
-
VARCHAR
-
STRING
- 注※1
-
整数データ型のデータ形式がレガシー形式の場合,BIGINT型が指定されたときは,HADBはデータ型にINTEGER型が指定されたと見なします。
- 注※2
-
整数データ型のデータ形式がレガシー形式の場合,INTEGER型が指定されたときは,HADBはデータ型にSMALLINT型が指定されたと見なします。
データ型の詳細については,「6.2 データ型」を参照してください。
-
- パーティションキー列の使い方
-
-
外部表の定義時
外部表を定義するCREATE FOREIGN TABLE文でパーティションキー列を定義し,外部表オプションのパーティションキー列のオプション指定でパーティションキー列が取り得る値を定義します。パーティションキー列の値を基に,検索対象とする外部データファイルを格納しているディレクトリ(外部データの検索対象ディレクトリ)のパスが決定されます。そのため,検索対象とする外部データファイルを絞り込むことができます。
- (例)
-
CREATE FOREIGN TABLE "FT1" : PARTITIONED BY ("YEAR" INTEGER) ...1 : ,LOCATION 's3://data/' ...2 : ,"YEAR".TYPE ENUM ...3 ,"YEAR".VALUE '2024,2025' ...3 ,LOCATION.TEMPLATE 's3://data/${YEAR}/' ...3[説明]
-
パーティションキー列YEAR(下線部分)を定義しています。
-
外部データの検索対象ディレクトリの指定です。パーティションキー列を定義しない場合は,s3://data/ディレクトリ下(サブディレクトリ下も含む)にある外部データファイル中の外部データが検索対象になります。
-
外部表オプションのパーティションキー列のオプション指定です。この指定によって,外部データの検索対象ディレクトリが決定します。上記の指定の場合,次のディレクトリが外部データの検索対象ディレクトリとなり,このディレクトリ下(サブディレクトリ下も含む)にある外部データファイル中の外部データが検索対象になります。
・s3://data/2024/
・s3://data/2025/
-
パーティションキー列のオプション指定については,「(e) 外部表オプション」を参照してください。また,パーティションキー列を指定したCREATE FOREIGN TABLE文の指定例については,「(7) 例題」を参照してください。
-
外部表の検索時(その1)
外部表の検索時,WHERE句中の述語にパーティションキー列に対する絞り込み条件を指定すると,検索対象の外部データファイルをさらに絞り込むことができます。
- (例)
-
SELECT "C1","C2" FROM "FT1" WHERE "YEAR" = '2025'WHERE句の探索条件にパーティションキー列YEAR(下線部分)に対する絞り込み条件を指定しています。上記のSELECT文を実行する場合,次のディレクトリが外部データの検索対象ディレクトリとなり,このディレクトリ下(サブディレクトリ下も含む)にある外部データファイル中の外部データが検索対象になります。
・s3://data/2025/
次の形式で指定した述語をWHERE句に指定すると,検索対象の外部データファイルを絞り込むことができます。
-
比較述語
次の形式の比較述語に限り,パーティションキー列を指定できます。
パーティションキー列 比較演算子 {整数定数|文字列定数}
(例)
WHERE "PARTITION_KEY" = 1
PARTITION_KEYがパーティションキー列です。
-
IN述語
次の形式のIN述語に限り,パーティションキー列を指定できます。
パーティションキー列 〔NOT〕 IN ({整数定数|文字列定数}〔,{整数定数|文字列定数}…〕)
(例)
WHERE "PARTITION_KEY" IN (1,2,3)
-
BETWEEN述語
次の形式のBETWEEN述語に限り,パーティションキー列を指定できます。パーティションキー列 〔NOT〕 BETWEEN {整数定数|文字列定数} AND {整数定数|文字列定数}
(例)WHERE "PARTITION_KEY" BETWEEN 1 AND 10
- メモ
-
パーティションキー列を指定したSELECT文の指定例については,「(7) 例題」を参照してください。
-
外部表の検索時(その2)
外部表の検索時にパーティションキー列を指定できます。例えば,次のようなことができます。
-
選択式にパーティションキー列を指定して,パーティションキー列の値を参照する
-
GROUP BY句にパーティションキー列を指定して,パーティションキー列の値でグループ化をする
-
ORDER BY句にパーティションキー列を指定して,パーティションキー列の値で結果行を並び替える
-
-
(d) 外部サーバ名
SERVER 外部サーバ名
定義する外部表が使用する外部サーバの名称を指定します。外部表に読み込む外部データにアクセスするために必要となる外部サーバの名称を指定します。
CREATE SERVER文で定義した外部サーバ名を指定してください。存在しない外部サーバ名は指定できません。
指定規則および留意事項を次に示します。
-
外部データをオブジェクトストレージに格納している場合(外部データのディレクトリパス文字列をS3 URI形式で指定している場合),SERVERオプションを必ず指定してください。
-
外部データをファイルストレージに格納している場合(外部データのディレクトリパス文字列をFILE URI形式で指定している場合),SERVERオプションの指定は省略してください。
-
外部データのデータ形式指定にICEBERGを指定した場合,外部データのデータファイルやメタデータへのアクセス時にここで指定した外部サーバが使用されます。
(e) 外部表オプション
OPTIONS (外部表オプション〔,外部表オプション〕…)
外部表オプション::={外部データのデータ形式指定
|外部データのディレクトリパス指定
|外部データのフォーマットオプション指定
|パーティションキー列のオプション指定
|Icebergオプション指定}
外部表オプションには,外部データのデータ形式,外部データの検索対象ディレクトリのパス,Icebergテーブルに関する情報などを指定します。
- 重要
-
-
外部表オプションの外部データのデータ形式指定は必ず指定してください。
-
外部データのデータ形式指定の指定値によって,そのほかの外部表オプションの指定要否が決まります。次の表に指定要否を示します。
-
|
外部表オプション |
外部データのデータ形式指定の指定値 |
|||
|---|---|---|---|---|
|
CSV |
PARQUET |
JSON |
ICEBERG |
|
|
外部データのディレクトリパス指定 |
〇 |
〇 |
〇 |
× |
|
外部データのフォーマットオプション指定 |
△ |
× |
× |
× |
|
パーティションキー列のオプション指定 |
△ |
△ |
△ |
× |
|
Icebergオプション指定 |
× |
× |
× |
〇 |
- (凡例)
-
〇:必須の指定です。
△:任意の指定です。
×:指定できません。
- ●外部データのデータ形式指定
-
外部データのデータ形式指定::=FORMAT {CSV|PARQUET|JSON|ICEBERG}外部データのデータ形式を指定します。次のどれかの指定を1つ選択します。
-
CSV:外部データがCSV形式の場合に指定します。
-
PARQUET:外部データがPARQUET形式の場合に指定します。
-
JSON:外部データがJSON形式の場合に指定します。
-
ICEBERG:Icebergテーブルを使用して外部データにアクセスする場合に指定します。
検索対象となるすべての外部データは,ここで指定したデータ形式として扱われます。
- メモ
-
外部データのデータ形式指定は,必ず指定してください。ただし,外部データのデータ形式指定は複数回指定できません。
-
- ●外部データのディレクトリパス指定
-
外部データのディレクトリパス指定::=LOCATION 外部データのディレクトリパス文字列
外部表の検索時に検索対象とする外部データファイルが格納されているディレクトリ(外部データの検索対象ディレクトリ)のパスを文字列定数の形式で指定します。
- 重要
-
-
外部データのデータ形式指定にICEBERGを指定する場合,外部データのディレクトリパス指定は指定できません。
-
外部データのデータ形式指定にICEBERG以外を指定する場合,外部データのディレクトリパス指定は必ず指定してください。ただし,外部データのディレクトリパス指定は複数回指定できません。
-
外部データがオブジェクトストレージに格納されているか,またはファイルストレージに格納されているかによって,外部データのディレクトリパス文字列の指定形式が異なります。指定例を次に示します。
-
外部データがオブジェクトストレージに格納されている場合
LOCATION 's3://data-bucket/ftbl/T1/'
外部データのディレクトリパス文字列は,S3 URI形式で指定します。この場合,s3://data-bucket/ftbl/T1/ディレクトリ下(サブディレクトリ下も含む)にある外部データファイル中の外部データが,外部表の検索時に検索対象になります。
-
外部データがファイルストレージに格納されている場合
LOCATION 'file:///data/ftbl/T1/'
外部データのディレクトリパス文字列は,FILE URI形式で指定します。この場合,/data/ftbl/T1/ディレクトリ下(サブディレクトリ下も含む)にある外部データファイル中の外部データが,外部表の検索時に検索対象になります。
なお,ここで指定したディレクトリ(上記の例の場合は/data/ftbl/T1/)に,HADB管理者に対するread権限と実行権限を付与する必要があります。また,ここで指定したディレクトリ内のすべてのファイルに,HADB管理者に対するread権限を付与する必要があります。
外部データのディレクトリパス指定の指定規則を次に示します。
-
外部データのディレクトリパス文字列は,1,024バイト以下で指定してください。※
-
外部データをオブジェクトストレージに格納している場合,外部データのディレクトリパス文字列の先頭には「s3://」を,末尾には「/」を指定してください。※
-
外部データをファイルストレージに格納している場合,外部データのディレクトリパス文字列の先頭には「file://」を,末尾には「/」を指定してください。※
- 注※
-
外部データのディレクトリパス文字列の前後に空白がある場合,その空白は取り除かれます。空白が取り除かれた外部データのディレクトリパス文字列に対してこの規則が適用されます。
留意事項を次に示します。
-
外部表の検索時,ここで指定したディレクトリ下にあるすべての外部データファイル中の外部データが検索対象になります(サブディレクトリ下の外部データも検索対象になります)。そのため,HADBサーバに読み込ませたくないデータは,このディレクトリ下に格納しないでください。
-
ここで指定したディレクトリ下(サブディレクトリも含む)には同じ形式の外部データを格納してください。異なるデータ形式や,異なる列構成の外部データが混在している場合,外部表の検索時にエラーになることがあります。
- メモ
-
外部データのディレクトリパス指定は,必ず指定してください。ただし,外部データのディレクトリパス指定は複数回指定できません。
- ●外部データのフォーマットオプション指定
-
外部データのフォーマットオプション指定::=フォーマットオプション 〔,フォーマットオプション〕… フォーマットオプション::={区切り文字指定|囲み文字指定|ヘッダー指定} 区切り文字指定::=DELIMITER_CHAR 区切り文字 囲み文字指定::=ENCLOSING_CHAR {囲み文字|NONE} ヘッダー指定::=HEADER_SPEC {YES|NO}外部データのフォーマットオプション指定は,外部データがCSV形式の場合に限り指定してください。
外部データのフォーマットオプション指定には,CSV形式の各データの区切り文字や囲み文字などを指定します。
- 区切り文字指定
-
区切り文字指定::=DELIMITER_CHAR 区切り文字
CSV形式の外部データの各データを区切る区切り文字を文字列定数の形式で指定します。
指定規則を次に示します。
-
区切り文字には,1バイトの文字列を指定してください。
-
区切り文字指定を省略した場合,区切り文字としてコンマ( , )が仮定されます。
-
区切り文字にアポストロフィ( ' )を指定する場合,アポストロフィを2個続けて指定してください。
-
区切り文字指定は複数回指定できません。
-
- 囲み文字指定
-
囲み文字指定::=ENCLOSING_CHAR {囲み文字|NONE}
CSV形式の外部データの各データを囲む囲み文字を文字列定数の形式で指定します。
指定規則を次に示します。
-
外部データに囲み文字がない場合は,NONEを指定してください。
-
囲み文字には,1バイトの文字列を指定してください。
-
囲み文字指定を省略した場合,囲み文字として二重引用符( " )が仮定されます。
-
囲み文字にアポストロフィ( ' )を指定する場合,アポストロフィを2個続けて指定してください。
-
囲み文字指定は複数回指定できません。
-
- ヘッダー指定
-
ヘッダー指定::=HEADER_SPEC {YES|NO}
CSV形式の外部データの先頭行にヘッダー行があるかどうかを指定します。
- YES
-
先頭行にヘッダー行がある場合はYESを指定します。この場合,先頭行をヘッダー行として扱い,2行目以降をデータ行として扱います。
ヘッダー指定を省略した場合,YESが仮定されます。
- NO
-
先頭行にヘッダー行がない場合はNOを指定します。この場合,先頭行以降をデータ行として扱います。
なお,ヘッダー指定は複数回指定できません。
- ●パーティションキー列のオプション指定
-
パーティションキー列のオプション指定::=パーティションキー列オプション〔,パーティションキー列オプション〕… パーティションキー列オプション::={属性プロパティ|テンプレートディレクトリパス}
パーティションキー列のオプション指定には,属性プロパティとテンプレートディレクトリパスを指定します。属性プロパティには,パーティションキー列が取り得る値を定義します。テンプレートディレクトリパスには,パーティションキー列を変数とする文字列を指定します。属性プロパティとテンプレートディレクトリパスの指定を基に,外部データの検索対象ディレクトリのパスが決定されます(検索対象とする外部データファイルが決定されます)。
パーティションキー列のオプション指定の指定例を次に示します。
,"YEAR".TYPE ENUM ...1 ,"YEAR".VALUE '2024,2025' ...1 ,LOCATION.TEMPLATE 's3://data/${YEAR}/' ...2[説明]
-
属性プロパティを指定します。
下線部分には,パーティションキー列指定で定義したパーティションキー列を指定します。
パーティションキー列YEARの取り得る値が,2024および2025となる定義をしています。
-
テンプレートディレクトリパスを指定します。
下線部分には,パーティションキー列を変数とする文字列を指定します。この部分が可変値となります。この場合,外部表の検索時,次のディレクトリ下(サブディレクトリ下も含む)にある外部データファイル中の外部データが検索対象になります(次のディレクトリが外部データの検索対象ディレクトリになります)。
-
s3://data/2024/
-
s3://data/2025/
-
上記の例に示すとおり,属性プロパティは複数回指定できますが,テンプレートディレクトリパスは1回だけ指定できます。
- 重要
-
パーティションキー列のオプション指定を指定する場合は,パーティションキー列指定を指定してください。パーティションキー列のオプション指定を省略する場合は,パーティションキー列指定も省略してください。
- 属性プロパティ
-
属性プロパティ::={列名.TYPE {ENUM|INTEGER|DATE|TIME|TIMESTAMP} |列名.VALUE 列挙文字列 |列名.RANGE_MIN {最小値整数|最小値文字列} |列名.RANGE_MAX {最大値整数|最大値文字列} |列名.FORMAT 日時書式文字列 |列名.INTERVAL 間隔値 |列名.DIGITS 桁数 |列名.INTERVAL.UNIT 時間単位}属性プロパティでは,パーティションキー列が取り得る値を定義します。
列名には,パーティションキー列を指定してください。同じ列名に対して,同じ種類の属性プロパティを指定できません。
- 重要
-
列名.TYPEの指定は必須です。また,列名.TYPEに指定する値によって,指定できる属性プロパティが異なります。
-
列名.TYPEにENUMを指定する場合
指定できる属性プロパティ
説明および指定例
指定要否
列名.TYPE ENUM
パーティションキー列の取り得る値を文字列で指定する場合に指定します。
- 指定例
-
"MONTH".TYPE ENUM
下線部分にはパーティションキー列を指定します。
必須
列名.VALUE 列挙文字列
-
列挙文字列は,文字列定数の形式で指定します。列挙文字列中に指定する各文字列をコンマで区切って指定してください。
-
文字列中の空白は,文字列の一部と見なされます。
-
文字列は100個まで指定できます。
-
列挙文字列中に指定する各文字列の長さの上限は,100バイトとなります。
-
列挙文字列の長さの上限は,10,100バイトとなります。
- 指定例
-
"MONTH".VALUE 'January,February,March'
下線部分が,列挙文字列中に指定する各文字列です。この場合,パーティションキー列MONTHの値は,January,February,Marchとなります。
必須
- メモ
-
-
パーティションキー列のデータ型がBIGINT,INTEGER,またはSMALLINTの場合
列挙文字列中に指定した各文字列が,パーティションキー列のデータ型の整数値に変換できない場合,CREATE FOREIGN TABLE文がエラーになります。変換規則は,スカラ関数CONVERTの文字データを数データに変換する場合の規則に従います。
-
パーティションキー列のデータ型がCHAR,VARCHAR,またはSTRINGの場合
列挙文字列中に指定した各文字列のデータ長が,パーティションキー列のデータ型のデータ長を超える場合,CREATE FOREIGN TABLE文がエラーになります。
-
-
列名.TYPEにINTEGERを指定する場合
指定できる属性プロパティ
説明および指定例
指定要否
列名.TYPE INTEGER
パーティションキー列の取り得る値の範囲(最小値と最大値)を整数値で指定する場合に指定します。
- 指定例
"DAY".TYPE INTEGER
下線部分にはパーティションキー列を指定します。
必須
列名.RANGE_MIN 最小値整数
最小値整数には,パーティションキー列の取り得る値の最小値を整数定数の形式で指定します。
- 指定例
-
"DAY".RANGE_MIN 1
この場合,パーティションキー列DAYの取り得る値の最小値が1になります。
必須
列名.RANGE_MAX 最大値整数
-
最大値整数には,パーティションキー列の取り得る値の最大値を整数定数の形式で指定します。
-
最大値整数には,最小値整数以上の値を指定してください。
- 指定例
-
"DAY".RANGE_MAX 5
この場合,パーティションキー列DAYの取り得る値の最大値が5になります。
必須
列名.INTERVAL 間隔値
-
間隔値には,パーティションキー列の取り得る値の間隔を指定します。
-
間隔値には,1~1,024の符号なし整数定数を指定します。
-
指定を省略した場合,間隔値に1が仮定されます。
- 指定例
-
"DAY".INTERVAL 2
"DAY".RANGE_MIN 1
"DAY".RANGE_MAX 5
上記のように指定した場合,パーティションキー列DAYの値は1,3,5になります。
省略可
列名.DIGITS 桁数
-
桁数には,パーティションキー列の値の桁数を指定します。
-
桁数には,1~20の符号なし整数定数を指定します。
-
指定した桁数がパーティションキー列の取り得る整数値の桁数よりも大きい場合,指定した桁数になるようにパーティションキー列の取り得る整数値の前方を0で埋めます。
-
パーティションキー列の取り得る整数値が負数であり,かつ負符号(-)を除いた値の桁数よりもここで指定した桁数の方が大きい場合,負符号(-)を除いた値の桁数がここで指定した桁数になるように値の前方を0で埋めます。
-
指定を省略した場合,または指定した桁数がパーティションキー列の取り得る整数値の桁数以下の場合,パーティションキー列の取り得る整数値の前方を0で埋めません。
- 指定例
-
"DAY".DIGITS 3
"DAY".RANGE_MIN 1
"DAY".RANGE_MAX 10
上記のように指定した場合,パーティションキー列DAYの値は,1,2,…,9,10になります。テンプレートディレクトリパスの変数値として使用される値は,001,002,…,009,010になります。
省略可
- メモ
-
-
パーティションキー列のデータ型がBIGINT,INTEGER,またはSMALLINTの場合
最小値整数または最大値整数に指定した整数値が,パーティションキー列のデータ型で表現できる整数値の範囲を超えている場合,CREATE FOREIGN TABLE文がエラーになります。
-
パーティションキー列のデータ型がCHAR,VARCHAR,またはSTRINGの場合
最小値整数または最大値整数に指定した整数値を文字列に変換した結果,変換後のデータ長が,パーティションキー列のデータ型のデータ長を超える場合,CREATE FOREIGN TABLE文がエラーになります。変換規則は,スカラ関数CONVERTの数データを文字データに変換する場合の規則に従います。
-
-
列名.TYPEにDATE,TIME,またはTIMESTAMPを指定する場合
- 重要
-
パーティションキー列のデータ型がBIGINT,INTEGER,またはSMALLINTの場合,列名.TYPEにDATE,TIME,またはTIMESTAMPを指定できません。
指定できる属性プロパティ
説明および指定例
指定要否
列名.TYPE DATE
-
左記の属性プロパティのうち,どれか1つを必ず指定してください。
-
パーティションキー列の取り得る値の範囲を,日時値による範囲指定(最小値と最大値)で指定する場合に指定します。
- 指定例(TYPE DATEの場合)
-
"DAY".TYPE DATE
下線部分にはパーティションキー列を指定します。
- 指定例(TYPE TIMEの場合)
-
"END_TIME".TYPE TIME
下線部分にはパーティションキー列を指定します。
- 指定例(TYPE TIMESTAMPの場合)
-
"LOGIN_TSP".TYPE TIMESTAMP
下線部分にはパーティションキー列を指定します。
必須
列名.TYPE TIME
列名.TYPE TIMESTAMP
列名.RANGE_MIN 最小値文字列
-
最小値文字列には,パーティションキー列の取り得る日時値の最小値を,文字列定数の形式で指定します。
-
最小値文字列の長さの上限は,100バイトとなります。
- 指定例(TYPE DATEの場合)
-
"DAY".RANGE_MIN '2020-01-01'
この場合,パーティションキー列DAYの取り得る値の最小値が,2020-01-01になります。
- 指定例(TYPE TIMEの場合)
-
"END_TIME".RANGE_MIN '10:00:00'
この場合,パーティションキー列END_TIMEの取り得る値の最小値が,10:00:00になります。
- 指定例(TYPE TIMESTAMPの場合)
-
"LOGIN_TSP".RANGE_MIN '2020-06-01_00:00:00'
この場合,パーティションキー列LOGIN_TSPの取り得る値の最小値が,2020-06-01_00:00:00になります。
必須
列名.RANGE_MAX 最大値文字列
-
最大値文字列には,パーティションキー列の取り得る日時値の最大値を,文字列定数の形式で指定します。
-
最大値文字列の長さの上限は,100バイトとなります。
-
最大値文字列には,最小値文字列以上の日時値を指定してください。
- 指定例(TYPE DATEの場合)
-
"DAY".RANGE_MAX '2025-03-31'
この場合,パーティションキー列DAYの取り得る値の最大値が,2025-03-31になります。
- 指定例(TYPE TIMEの場合)
-
"END_TIME".RANGE_MAX '12:00:00'
この場合,パーティションキー列END_TIMEの取り得る値の最大値が,12:00:00になります。
- 指定例(TYPE TIMESTAMPの場合)
-
"LOGIN_TSP".RANGE_MAX '2025-03-31_00:00:00'
この場合,パーティションキー列LOGIN_TSPの取り得る値の最大値が,2025-03-31_00:00:00になります。
必須
列名.FORMAT 日時書式文字列
-
日時書式文字列には,最小値文字列および最大値文字列に指定する日時値の日時書式を指定します。
-
日時書式文字列に指定できる値は,スカラ関数CONVERTの日時書式に指定できる値と同じです。スカラ関数CONVERTの日時書式については,「8.13.5 CONVERT」の「(3) 日時書式に指定できる要素および規則」を参照してください。
-
日時書式文字列の長さの上限は,64バイトとなります。
-
指定された日時書式文字列は,次に示すスカラ関数CONVERTで日時値に変換されます。変換できない場合は,SQL文がエラーになります。
CONVERT(最小値文字列,TYPEの指定値,日時書式文字列)
CONVERT(最大値文字列,TYPEの指定値,日時書式文字列)
- 指定例(TYPE DATEの場合)
-
"DAY".FORMAT 'YYYY-MM-DD'
上記は,最小値文字列および最大値文字列に指定する日時値を,YYYY-MM-DDの形式で指定することを定義しています。
- 指定例(TYPE TIMEの場合)
-
"END_TIME".FORMAT 'HH:MI:SS'
上記は,最小値文字列および最大値文字列に指定する日時値を,HH:MI:SSの形式で指定することを定義しています。
- 指定例(TYPE TIMESTAMPの場合)
-
"LOGIN_TSP".FORMAT 'YYYY-MM-DD"_"HH:MI:SS'
上記は,最小値文字列および最大値文字列に指定する日時値を,YYYY-MM-DD_HH:MI:SSの形式で指定することを定義しています。
必須
列名.INTERVAL 間隔値
-
間隔値には,パーティションキー列の取り得る値の間隔を指定します。
-
間隔値には,1~1,024の符号なし整数定数を指定します。
-
指定を省略した場合,間隔値に1が仮定されます。
- 指定例(TYPE DATEの場合)
-
"DAY".INTERVAL 7
"DAY".RANGE_MIN '2025-01-01'
"DAY".RANGE_MAX '2025-01-20'
"DAY".INTERVAL.UNIT DAY
上記のように指定した場合,パーティションキー列DAYの値は,2025-01-01,2025-01-08,2025-01-15になります。
- 指定例(TYPE TIMEの場合)
-
"END_TIME".INTERVAL 30
"END_TIME".RANGE_MIN '10:00:00'
"END_TIME".RANGE_MAX '11:00:00'
"END_TIME".INTERVAL.UNIT MINUTE
上記のように指定した場合,パーティションキー列END_TIMEの値は,10:00:00,10:30:00,11:00:00になります。
- 指定例(TYPE TIMESTAMPの場合)
-
"LOGIN_TSP".INTERVAL 4
"LOGIN_TSP".RANGE_MIN '2016-01-01_00:00:00'
"LOGIN_TSP".RANGE_MAX '2025-01-01_00:00:00'
"LOGIN_TSP".INTERVAL.UNIT YEAR
上記のように指定した場合,パーティションキー列LOGIN_TSPの値は,2016-01-01_00:00:00,2020-01-01_00:00:00,2024-01-01_00:00:00になります。
省略可
列名.INTERVAL.UNIT 時間単位
-
時間単位には,間隔値の単位を指定します。YEAR,MONTH,WEEK,DAY,HOUR,MINUTE,またはSECONDのどれかを指定します。
-
TYPE DATEを指定した場合は,YEAR,MONTH,WEEK,またはDAYのどれかを指定してください。
-
TYPE TIMEを指定した場合は,HOUR,MINUTE,またはSECONDのどれかを指定してください。
-
TYPE TIMESTAMPを指定した場合は,YEAR,MONTH,WEEK,DAY,HOUR,MINUTE,またはSECONDのどれかを指定してください。
-
指定を省略した場合,時間単位は次のように仮定されます。
TYPEがDATEの場合は,DAYが仮定されます。
TYPEがTIMEまたはTIMESTAMPの場合は,SECONDが仮定されます。
- 指定例(TYPE DATEの場合)
-
"DAY".INTERVAL.UNIT DAY
この場合,間隔値の単位が日になります。
- 指定例(TYPE TIMEの場合)
-
"END_TIME".INTERVAL.UNIT MINUTE
この場合,間隔値の単位が分になります。
- 指定例(TYPE TIMESTAMPの場合)
-
"LOGIN_TSP".INTERVAL.UNIT SECOND
この場合,間隔値の単位が秒になります。
省略可
- メモ
-
最小値文字列または最大値文字列から変換した日時値が,日時書式文字列を使用してパーティションキー列のデータ型に変換できない場合,CREATE FOREIGN TABLE文がエラーになります。変換規則は,スカラ関数CONVERTの日時書式を指定した場合の規則に従います。
属性プロパティの指定例を次に示します。
- (例1)
-
,"DAY".TYPE DATE ,"DAY".RANGE_MIN '2024-01-01' ,"DAY".RANGE_MAX '2024-05-31' ,"DAY".FORMAT 'YYYY-MM-DD' ,"DAY".INTERVAL 2 ,"DAY".INTERVAL.UNIT MONTH
この場合,パーティションキー列DAYの値は,2024-01-01,2024-03-01,2024-05-01になります。
- (例2)
-
,"END_TIME".TYPE TIME ,"END_TIME".RANGE_MIN '10:00:00' ,"END_TIME".RANGE_MAX '12:00:00' ,"END_TIME".FORMAT 'HH:MI:SS' ,"END_TIME".INTERVAL 30 ,"END_TIME".INTERVAL.UNIT MINUTE
この場合,パーティションキー列END_TIMEの値は,10:00:00,10:30:00,11:00:00,11:30:00,12:00:00になります。
- (例3)
-
,"LOGIN_TSP".TYPE TIMESTAMP ,"LOGIN_TSP".RANGE_MIN '2024-06-01_00:00:00' ,"LOGIN_TSP".RANGE_MAX '2024-06-03_00:00:00' ,"LOGIN_TSP".FORMAT 'YYYY-MM-DD"_"HH:MI:SS' ,"LOGIN_TSP".INTERVAL 12 ,"LOGIN_TSP".INTERVAL.UNIT HOUR
この場合,パーティションキー列LOGIN_TSPの値は,2024-06-01_00:00:00,2024-06-01_12:00:00,2024-06-02_00:00:00,2024-06-02_12:00:00,2024-06-03_00:00:00になります。
- テンプレートディレクトリパス
-
テンプレートディレクトリパス::=LOCATION.TEMPLATE テンプレートディレクトリパス文字列
テンプレートディレクトリパス文字列の指定を基に,外部データの検索対象ディレクトリが決定されます。属性プロパティで定義したパーティションキー列の値を変数として,テンプレートディレクトリパス文字列中に指定できます。テンプレートディレクトリパス文字列の指定例を次に示します。
LOCATION.TEMPLATE 's3://data/${YEAR}/${DAY}/'下線部分が変数となります。属性プロパティで定義したパーティションキー列YEARの値が2024および2025で,パーティションキー列DAYの値が01,02,および03の場合,次のパスが外部データの検索対象ディレクトリのパスになります。
-
's3://data/2024/01/'
-
's3://data/2024/02/'
-
's3://data/2024/03/'
-
's3://data/2025/01/'
-
's3://data/2025/02/'
-
's3://data/2025/03/'
外部表の検索時,上記のディレクトリ下(サブディレクトリ下も含む)に格納されている外部データファイル中の外部データが検索対象になります。
- 指定規則
-
-
テンプレートディレクトリパス文字列は,文字列定数の形式で指定します。
-
テンプレートディレクトリパス文字列中に,属性プロパティで定義したパーティションキー列の値を次に示す形式で変数として指定できます。
${パーティションキー列の列名}
下記の指定例の下線部分が該当個所です。
LOCATION.TEMPLATE 's3://data/${YEAR}/${DAY}/'なお,パーティションキー列の列名の英大文字と英小文字は区別されます。
-
外部データのディレクトリパス文字列(LOCATIONオプション)に指定したパス名を,テンプレートディレクトリパス文字列(LOCATION.TEMPLATEオプション)に指定するパス名の先頭部分に指定してください。
(例)
LOCATION 's3://data/' LOCATION.TEMPLATE 's3://data/${YEAR}/${DAY}/'下線部分のパス名の指定が一致している必要があります。
-
テンプレートディレクトリパス文字列の末尾には,/を指定してください。
-
テンプレートディレクトリパス文字列の長さの上限は,1,024バイトとなります。
-
テンプレートディレクトリパス文字列中には,すべてのパーティションキー列に対応した変数を指定してください。
-
テンプレートディレクトリパス文字列中に,同じパーティションキー列に対応した変数を複数指定できます。
(例)
LOCATION.TEMPLATE 's3://data/${YEAR}/${YEAR}/'下線部分に,パーティションキー列YEARに対応した変数を2つ指定しています。
パーティションキー列YEARの取り得る値が2023,2024,2025の場合,外部データの検索対象ディレクトリのパスは次のようになります。
-
's3://data/2023/2023/'
-
's3://data/2024/2024/'
-
's3://data/2025/2025/'
-
-
- テンプレートディレクトリパスの指定を省略した場合
-
テンプレートディレクトリパスの指定を省略した場合,テンプレートディレクトリパス文字列には,外部データのディレクトリパス文字列や,パーティションキー列の列名などを連結した文字列が仮定されます。
(例)
-
外部データのディレクトリパス文字列:'s3://data/'
-
パーティションキー列YEARの値:2024および2025
-
パーティションキー列MONTHの値:01,02,および03
上記の条件のときにテンプレートディレクトリパスの指定を省略すると,テンプレートディレクトリパス文字列には次の文字列が仮定されます。
's3://data/YEAR=${YEAR}/MONTH=${MONTH}/'このとき,外部データの検索対象ディレクトリのパスは次のようになります。外部表の検索時,このディレクトリ下のファイル中の外部データが検索対象になります。
-
's3://data/YEAR=2024/MONTH=01/'
-
's3://data/YEAR=2024/MONTH=02/'
-
's3://data/YEAR=2024/MONTH=03/'
-
's3://data/YEAR=2025/MONTH=01/'
-
's3://data/YEAR=2025/MONTH=02/'
-
's3://data/YEAR=2025/MONTH=03/'
-
-
-
- ●Icebergオプション指定
-
Icebergオプション指定::=Icebergオプション〔,Icebergオプション〕… Icebergオプション::={カタログ種別指定※1 |カタログ名前空間指定※1 |カタログURI指定 |カタログリージョン指定 |カタログID指定 |ウェアハウス名指定 |トークンURI指定※2 |クライアントID指定※2 |クライアントシークレット指定※2 |許可スコープ指定※2}※3- 注※1
-
必ず指定するオプションです。
- 注※2
-
これらのオプションはすべて指定するか,またはすべて省略するかのどちらかにしてください。
- 注※3
-
各Icebergオプションを複数回指定できません。例えば,カタログ種別指定を2回指定することはできません。
Icebergテーブルを参照する外部表を定義する場合に,Icebergテーブルに関する情報を指定します。外部データのデータ形式指定にICEBERGを指定する場合は,Icebergオプション指定を指定してください。
- カタログ種別指定
-
カタログ種別指定::=CATALOG_TYPE {REST|GLUE}
Icebergで使用するカタログの種別を指定します。
-
REST
REST Catalogを使用する場合に指定します。RESTを指定した場合,使用できる認証方式はOAuth 2.0(Client Credentials Grant)だけになります。そのほかの認証方式は使用できません。
-
GLUE
Glue Catalogを使用する場合に指定します。GLUEを指定した場合,Glue CatalogまたはAmazon S3へのアクセス時に,CREATE SERVER文で指定した認証情報を使用します。そのため,Glue CatalogとS3バケットは,同じAWSアカウント内に存在する必要があります。
-
- カタログ名前空間指定
-
カタログ名前空間指定::=CATALOG_NAMESPACE カタログ名前空間 カタログ名前空間::=文字列定数Icebergで使用するカタログの名前空間を指定します。カタログ名前空間には,1~100バイトの文字列を指定できます。
- カタログURI指定
-
カタログURI指定::=CATALOG_URI カタログエンドポイント文字列 カタログエンドポイント文字列::=文字列定数Icebergで使用するカタログにエンドポイントを使用してアクセスする場合にこのオプションを指定します。
指定規則を次に示します。
-
カタログエンドポイント文字列には,「https://」または「http://」で始まる文字列を指定してください。
-
カタログエンドポイント文字列には,URI形式でエンドポイントを指定します。例えば,エンドポイントが「https://XXXX:1234」の場合,カタログエンドポイント文字列には「'https://XXXX:1234'」と指定してください。
-
カタログエンドポイント文字列には,1~100バイトの文字列を指定できます。
-
カタログ種別指定にRESTを指定する場合,カタログURI指定は必ず指定してください。カタログ種別指定にGLUEを指定する場合,カタログURI指定は指定できません。
-
- カタログリージョン指定
-
カタログリージョン指定::=CATALOG_REGION カタログリージョン名 カタログリージョン名::=文字列定数Icebergで使用するカタログのリージョンを指定します。
指定規則を次に示します。
-
カタログリージョン名には,1~100バイトの文字列を指定できます。
-
カタログ種別指定にGLUEを指定する場合,カタログリージョン指定は必ず指定してください。カタログ種別指定にRESTを指定する場合,カタログリージョン指定は指定できません。
-
- カタログID指定
-
カタログID指定::=CATALOG_ID カタログID カタログID::=文字列定数Icebergで使用するカタログのカタログIDを指定します。
指定規則を次に示します。
-
カタログIDには,1~100バイトの文字列を指定できます。
-
カタログ種別指定にGLUEを指定する場合,カタログID指定は必ず指定してください。カタログ種別指定にRESTを指定する場合,カタログID指定は指定できません。
-
- ウェアハウス名指定
-
ウェアハウス名指定::=WAREHOUSE_NAME ウェアハウス名 ウェアハウス名::=文字列定数Icebergで使用するウェアハウスの名称を指定します。
指定規則を次に示します。
-
ウェアハウス名には,1~100バイトの文字列を指定できます。
-
カタログ種別指定にRESTを指定する場合,ウェアハウス名指定は必要に応じて指定してください。例えば,LakekeeperをRest Catalogとして使用する場合は,データの格納先を明示するためにウェアハウス名の指定が必要です。
-
カタログ種別指定にGLUEを指定する場合,ウェアハウス名指定は指定できません。
-
- トークンURI指定
-
トークンURI指定::=AUTH_TOKEN_URI トークンURI トークンURI::=文字列定数Rest Catalogへの接続時に使用するIDプロバイダーのトークン取得用URLを指定します。
指定規則を次に示します。
-
トークンURIには,1~400バイトの文字列を指定できます。
-
トークンURIには,「http://」または「https://」で始まる文字列を指定してください。
-
カタログ種別指定にGLUEを指定する場合,トークンURI指定は指定できません。
-
- クライアントID指定
-
クライアントID指定::=AUTH_CLIENT_ID クライアントID クライアントID::=文字列定数Rest Catalogへの接続時に使用するIDプロバイダーのクライアントIDを指定します。
指定規則を次に示します。
-
クライアントIDには,1~100バイトの文字列を指定できます。
-
カタログ種別指定にGLUEを指定する場合,クライアントID指定は指定できません。
-
- クライアントシークレット指定
-
クライアントシークレット指定::=AUTH_CLIENT_SECRET クライアントシークレット クライアントシークレット::=文字列定数Rest Catalogへの接続時に使用するIDプロバイダーのクライアントシークレットを指定します。
指定規則を次に示します。
-
クライアントシークレットには,1~100バイトの文字列を指定できます。
-
カタログ種別指定にGLUEを指定する場合,クライアントシークレット指定は指定できません。
-
- 許可スコープ指定
-
許可スコープ指定::=AUTH_ALLOWED_SCOPES 許可スコープ文字列 許可スコープ文字列::=文字列定数Rest Catalogへの接続時に使用するIDプロバイダーで許可するクライアントスコープを指定します。
指定規則を次に示します。
-
許可スコープ文字列には,1~255バイトの文字列を指定できます。
-
カタログ種別指定にGLUEを指定する場合,許可スコープ指定は指定できません。
-
許可するクライアントスコープを複数指定する場合は,許可するクライアントスコープを半角空白で区切ってください。許可するクライアントスコープにemail,profile,およびrole_listを指定する場合の例を次に示します。
AUTH_ALLOWED_SCOPES 'email profile role_list'
-
(3) 実行時に必要な権限
CREATE FOREIGN TABLE文を実行する場合,CONNECT権限およびスキーマ定義権限が必要になります。
(4) 規則
-
外部表を定義する前にスキーマを定義しておいてください。
-
自分(HADBサーバに接続中の認可識別子のHADBユーザ)が所有するスキーマに対してだけ外部表を定義できます。ほかのHADBユーザが所有するスキーマに対しては外部表を定義できません。
-
実表と外部表を合計30,000個まで定義できます(ディクショナリ表(実表)およびシステム表(実表)は除く)。
-
1つの外部表に対して4,000個まで列を定義できます。パーティションキー列を定義する場合,1つのパーティションキー列を1列と数えてください。
-
外部表の検索時,検索対象となる外部データがない場合,外部表の検索結果の行数は0行になります。
-
外部表の定義時には外部データへのアクセスは実行されません。外部表の検索時に外部データへのアクセスが実行されます。そのため,外部表を定義したあとに外部データを変更した場合,外部表の検索結果が変わることがあります。
-
外部データのデータ形式指定にPARQUETまたはICEBERGを指定した場合,PARQUET形式の外部データにアクセスします。PARQUET形式の外部データの各列のデータ型とHADBのデータ型の対応を次の表に示します。
表3‒6 PARQUET形式の外部データの各列のデータ型とHADBのデータ型の対応(その1) PARQUET形式の外部データの列のデータ型
対応するHADBのデータ型
SMALLINT※1
INTEGER※2
BIGINT
DECIMAL,NUMERIC
REAL
DOUBLE PRECISION,FLOAT
NULL
○
○
○
○
○
○
INT(bitWidth=8, isSigned=false)
○
○
○
×
×
×
INT(bitWidth=8, isSigned=true)
○
○
○
×
×
×
INT(bitWidth=16, isSigned=false)
△
○
○
×
×
×
INT(bitWidth=16, isSigned=true)
○
○
○
×
×
×
INT(bitWidth=32, isSigned=false)
△
△
○
×
×
×
INT(bitWidth=32, isSigned=true)
△
○
○
×
×
×
INT(bitWidth=64, isSigned=false)
△
△
△
×
×
×
INT(bitWidth=64, isSigned=true)
△
△
○
×
×
×
DECIMAL(precision=m, scale=n)
×
×
×
△
×
×
FLOAT16
×
×
×
×
○
○
FLOAT
×
×
×
×
○
○
DOUBLE
×
×
×
×
×
○
STRING
×
×
×
×
×
×
BYTE_ARRAY
×
×
×
×
×
×
FIXED_LEN_BYTE_ARRAY
×
×
×
×
×
×
DATE
×
×
×
×
×
×
TIME(timeUnit=milliseconds)
×
×
×
×
×
×
TIME(timeUnit=microseconds)
×
×
×
×
×
×
TIME(timeUnit=nanoseconds)
×
×
×
×
×
×
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=false)
×
×
×
×
×
×
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=false)
×
×
×
×
×
×
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=false)
×
×
×
×
×
×
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=true)
×
×
×
×
×
×
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=true)
×
×
×
×
×
×
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=true)
×
×
×
×
×
×
BOOLEAN
×
×
×
×
×
×
UUID
×
×
×
×
×
×
LIST
×
×
×
×
×
×
STRUCT
×
×
×
×
×
×
MAP
×
×
×
×
×
×
上記以外
×
×
×
×
×
×
- (凡例)
-
○:対応しています。
△:対応しています。ただし,桁あふれなどでHADBのデータ型に変換できない場合は,SQL文がエラーになります。STRUCT型の各フィールドのフィールドデータ型,および配列型の各配列要素の要素データ型についても,HADBのデータ型に変換できない場合は,SQL文がエラーになります。
×:対応していません。
- 注※1
-
整数データ型のデータ形式がレガシー形式の場合は,INTEGER型と同じ対応になります。
- 注※2
-
整数データ型のデータ形式がレガシー形式の場合は,BIGINT型と同じ対応になります。
表3‒7 PARQUET形式の外部データの各列のデータ型とHADBのデータ型の対応(その2) PARQUET形式の外部データの列のデータ型
対応するHADBのデータ型
文字データ
DATE
TIME
TIMESTAMP WITHOUT TIME ZONE
TIMESTAMP WITH TIME ZONE
バイナリデータ
ARRAY
NULL
○
○
○
○
○
○
△※1
INT(bitWidth=8, isSigned=false)
×
×
×
×
×
×
×
INT(bitWidth=8, isSigned=true)
×
×
×
×
×
×
×
INT(bitWidth=16, isSigned=false)
×
×
×
×
×
×
×
INT(bitWidth=16, isSigned=true)
×
×
×
×
×
×
×
INT(bitWidth=32, isSigned=false)
×
×
×
×
×
×
×
INT(bitWidth=32, isSigned=true)
×
×
×
×
×
×
×
INT(bitWidth=64, isSigned=false)
×
×
×
×
×
×
×
INT(bitWidth=64, isSigned=true)
×
×
×
×
×
×
×
DECIMAL(precision=m, scale=n)
×
×
×
×
×
×
×
FLOAT16
×
×
×
×
×
×
×
FLOAT
×
×
×
×
×
×
×
DOUBLE
×
×
×
×
×
×
×
STRING
△
×
×
×
×
×
×
BYTE_ARRAY
×
×
×
×
×
△
×
FIXED_LEN_BYTE_ARRAY
×
×
×
×
×
△
×
DATE
×
○
×
×
×
×
×
TIME(timeUnit=milliseconds)
×
×
△
×
×
×
×
TIME(timeUnit=microseconds)
×
×
△
×
×
×
×
TIME(timeUnit=nanoseconds)
×
×
△
×
×
×
×
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=false)
×
×
×
△
×
×
×
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=false)
×
×
×
△
×
×
×
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=false)
×
×
×
△
×
×
×
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=true)
×
×
×
×
△
×
×
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=true)
×
×
×
×
△
×
×
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=true)
×
×
×
×
△
×
×
BOOLEAN
×
×
×
×
×
×
×
UUID
×
×
×
×
×
×
×
LIST
×
×
×
×
×
×
△
STRUCT
×
×
×
×
×
×
×
MAP
×
×
×
×
×
×
△※2
上記以外
×
×
×
×
×
×
×
- (凡例)
-
○:対応しています。
△:対応しています。ただし,桁あふれなどでHADBのデータ型に変換できない場合は,SQL文がエラーになります。STRUCT型の各フィールドのフィールドデータ型,および配列型の各配列要素の要素データ型についても,HADBのデータ型に変換できない場合は,SQL文がエラーになります。
×:対応していません。
文字データ:CHARACTER,VARCHAR,STRING
バイナリデータ:BINARY,VARBINARY
- 注※1
-
要素データ型にSTRUCT型を指定したARRAY型の列は,対応していません。
- 注※2
-
外部表の列定義を省略した場合,MAP型に対応する外部表の列のデータ型には次の配列型が定義されます。この配列型だけが対応しています。
STRUCT{"key" MAPのkeyのデータ型, "value" MAPのvalueのデータ型} ARRAY[30000]
表3‒8 PARQUET形式の外部データの各列のデータ型とHADBのデータ型の対応(その3) PARQUET形式の外部データの列のデータ型
対応するHADBのデータ型
STRUCT
BOOLEAN
UUID
NULL
×
○
○
INT(bitWidth=8, isSigned=false)
×
×
×
INT(bitWidth=8, isSigned=true)
×
×
×
INT(bitWidth=16, isSigned=false)
×
×
×
INT(bitWidth=16, isSigned=true)
×
×
×
INT(bitWidth=32, isSigned=false)
×
×
×
INT(bitWidth=32, isSigned=true)
×
×
×
INT(bitWidth=64, isSigned=false)
×
×
×
INT(bitWidth=64, isSigned=true)
×
×
×
DECIMAL(precision=m, scale=n)
×
×
×
FLOAT16
×
×
×
FLOAT
×
×
×
DOUBLE
×
×
×
STRING
×
×
×
BYTE_ARRAY
×
×
×
FIXED_LEN_BYTE_ARRAY
×
×
×
DATE
×
×
×
TIME(timeUnit=milliseconds)
×
×
×
TIME(timeUnit=microseconds)
×
×
×
TIME(timeUnit=nanoseconds)
×
×
×
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=false)
×
×
×
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=false)
×
×
×
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=false)
×
×
×
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=true)
×
×
×
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=true)
×
×
×
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=true)
×
×
×
BOOLEAN
×
○
×
UUID
×
×
○
LIST
×
×
×
STRUCT
△
×
×
MAP
×
×
×
上記以外
×
×
×
- (凡例)
-
○:対応しています。
△:対応しています。ただし,桁あふれなどでHADBのデータ型に変換できない場合は,SQL文がエラーになります。STRUCT型の各フィールドのフィールドデータ型,および配列型の各配列要素の要素データ型についても,HADBのデータ型に変換できない場合は,SQL文がエラーになります。
×:対応していません。
-
CSV形式またはJSON形式の外部データを外部表に読み込む際,外部データアクセス用ライブラリを使用します。外部表の列定義に指定したHADBのデータ型に対応するApache Arrowのデータ型に変換したデータを外部表に読み込みます。HADBのデータ型とApache Arrowのデータ型の対応を次の表に示します。
表3‒9 HADBのデータ型とApache Arrowのデータ型の対応 外部表の列定義に指定したHADBのデータ型
対応するApache Arrowのデータ型
SMALLINT※1
INT16
INTEGER※2
INT32
BIGINT
INT64
DECIMAL(m,n)
DECIMAL128(m,n)
NUMERIC(m,n)
REAL
FLOAT32
FLOAT
FLOAT64
DOUBLE PRECISION
CHAR
STRING
VARCHAR
STRING
DATE
DATE32
TIME(0)
TIME32(TimeUnit:SECOND)
TIME(3)
TIME32(TimeUnit:MILLI)
TIME(6)
TIME64(TimeUnit:MICRO)
TIME(9)
TIME64(TimeUnit:NANO)
TIMESTAMP(0) WITHOUT TIME ZONE
TIMESTAMP(TimeUnit:SECOND, isAdjustedToUTC=false)
TIMESTAMP(3) WITHOUT TIME ZONE
TIMESTAMP(TimeUnit:MILLI, isAdjustedToUTC=false)
TIMESTAMP(6) WITHOUT TIME ZONE
TIMESTAMP(TimeUnit:MICRO, isAdjustedToUTC=false)
TIMESTAMP(9) WITHOUT TIME ZONE
TIMESTAMP(TimeUnit:NANO, isAdjustedToUTC=false)
TIMESTAMP(0) WITH TIME ZONE
TIMESTAMP(TimeUnit:SECOND, isAdjustedToUTC=true)
TIMESTAMP(3) WITH TIME ZONE
TIMESTAMP(TimeUnit:MILLI, isAdjustedToUTC=true)
TIMESTAMP(6) WITH TIME ZONE
TIMESTAMP(TimeUnit:MICRO, isAdjustedToUTC=true)
TIMESTAMP(9) WITH TIME ZONE
TIMESTAMP(TimeUnit:NANO, isAdjustedToUTC=true)
BINARY
BINARY
VARBINARY
BOOLEAN
BOOL
ARRAY
LIST※3
STRUCT
STRUCT※4
- 注
-
Apache Arrowのデータ型については,Apache ArrowのドキュメントのData Typesを参照してください。
- 注※1
-
整数データ型のデータ形式がレガシー形式の場合,対応するApache Arrowのデータ型はINT32になります。
- 注※2
-
整数データ型のデータ形式がレガシー形式の場合,対応するApache Arrowのデータ型はINT64になります。
- 注※3
-
配列要素の要素データ型に対しても,上記の表の規則が適用されます。
- 注※4
-
フィールドのフィールドデータ型に対しても,上記の表の規則が適用されます。
- メモ
-
外部データを読み込む際,Apache Arrowのデータ型に変換できないデータが含まれていると,SQL文がエラーになります。例えば,次のような場合にエラーになります。
-
Apache Arrowのデータ型の範囲(外部表の列定義で指定したHADBのデータ型の範囲)を超えるデータが外部データに含まれている場合
-
外部表の列定義で指定したHADBのデータ型に対応するApache Arrowのデータ型に対して,互換性のないデータが外部データに含まれている場合(外部表の列定義のデータ型が数データの場合に,外部データ中に文字データが含まれているなど)
-
-
外部データがCSV形式の場合,次の規則に対応している外部データを準備してください。
-
外部データの1行のデータが,外部表の1行のデータになります。
-
外部データのフィールドデータとフィールドデータの間を区切り文字で区切ってください。
-
外部データのフィールドデータの両端に囲み文字を指定できます。
-
空行の場合,外部表の全列にナル値が設定されます。
-
外部データの1行の長さは,64メガバイト以下としてください。
-
外部データの各フィールドデータの先頭と末尾に限り空白とタブを指定できます(先頭と末尾以外は指定できません)。ただし,文字列やバイナリデータの一部としての空白や,時刻印の表記法としての空白は問題ありません。
-
外部データの各フィールドデータの形式は,外部表の列定義に指定するHADBのデータ型と対応させることを推奨します。対応を次の表に示します。
表3‒10 外部表で定義するHADBのデータ型に対応するフィールドデータの指定形式 外部表の列定義に指定するHADBのデータ型
推奨するフィールドデータの指定形式
指定例
説明および注意事項
SMALLINT
整数
-
123
-
-123
-
正符号(+)は指定できません。例えば,+123とは指定できません。
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
INTEGER
BIGINT
DECIMAL(m,n)
10進数
-
123.45
-
-123.45
-
+123
-
.12
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
NUMERIC(m,n)
REAL
浮動小数点数
-
1.234E5
-
1.234E+5
-
1.234E-5
-
指数部を表示する場合,指数部は省略できません。例えば,123Eとは指定できません。
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
FLOAT
DOUBLE PRECISION
CHAR
文字列
ABC
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
-
フィールドデータ中に囲み文字と同じ文字がある場合は,囲み文字と同じ文字を2つ連続して指定してください。
-
列のデータ型がVARCHAR型またはSTRING型の場合に空文字を指定するときは,フィールドデータを空文字とし,囲み文字を指定してください。
VARCHAR
STRING
DATE
日付
2025-03-01
-
日付は,YYYY-MM-DDの形式で指定してください。YYYYは年,MMは月,DDは日を意味しています。
-
年月日の区切りに,/は使用できません。例えば,2025/03/01とは指定できません。
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
TIME(0)
時刻
-
11:22:33
-
11:22:33.123
-
11:22:33.123456
-
11:22:33.123456789
-
時刻は,hh:mm:ss.nn...nの形式で指定してください。hhは時,mmは分,ssは秒を意味しています。小数秒精度が1以上の場合は,.nn...nnと指定します。
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
TIME(3)
TIME(6)
TIME(9)
TIMESTAMP(0) WITHOUT TIME ZONE
時刻印(時刻帯なし)
-
2020-06-01 11:22:33
-
2020-06-01 11:22:33.123
-
2020-06-01 11:22:33.123456
-
2020-06-01 11:22:33.123456789
-
時刻帯なしの時刻印は,YYYY-MM-DD hh:mm:ss.nn...nの形式で指定してください。YYYYは年,MMは月,DDは日,hhは時,mmは分,ssは秒を意味しています。小数秒精度が1以上の場合は,.nn...nnと指定します。
また,DDの後には半角空白を入れてください。
-
年月日の区切りに,/は使用できません。例えば,2025/03/01 12:34:56とは指定できません。
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
-
外部表の列定義でTIMESTAMP(9) WITHOUT TIME ZONEを指定する場合,1677-09-21 00:12:43.145224192~2262-04-11 23:47:16.854775807の範囲の値を指定してください。範囲外の値を指定した場合,不正な値が返却されます。
TIMESTAMP(3) WITHOUT TIME ZONE
TIMESTAMP(6) WITHOUT TIME ZONE
TIMESTAMP(9) WITHOUT TIME ZONE
TIMESTAMP(0) WITH TIME ZONE
時刻印(時刻帯付き)
-
2025-06-01 11:22:33+00:00
-
2025-06-01 20:22:33+09:00
-
2025-06-01 11:22:33Z
-
2025-06-01 11:22:33.123+00:00
-
2025-06-01 11:22:33.123456+00:00
-
2025-06-01 11:22:33.123456789+00:00
-
時刻帯付きの時刻印は,YYYY-MM-DD hh:mm:ss.nn...n±hh:mmの形式で指定してください。YYYYは年,MMは月,DDは日,hhは時,mmは分,ssは秒を意味しています。小数秒精度が1以上の場合は,.nn...nnと指定します。
また,DDの後には半角空白を入れてください。
時刻帯は,±hh:mmの形式で指定してください。時(hh),分(mm)の桁数が足りない場合は,左側に0を記述してください。また,+00:00の代わりにZを指定できます。
-
年月日の区切りに,/は使用できません。例えば,2025/03/01 12:34:56+00:00とは指定できません。
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
-
外部表の列定義でTIMESTAMP(9) WITH TIME ZONEを指定する場合,1677-09-21 00:12:43.145224192+00:00~2262-04-11 23:47:16.854775807+00:00の範囲の値を指定してください。範囲外の値を指定した場合,不正な値が返却されます。
TIMESTAMP(3) WITH TIME ZONE
TIMESTAMP(6) WITH TIME ZONE
TIMESTAMP(9) WITH TIME ZONE
BINARY
文字列
ABCD
-
指定されているデータをそのままバイナリデータとして外部表に読み込みます。例えば,文字列にABCDと指定した場合,外部表には0x41424344で読み込まれます。
-
16進文字列と2進文字列によるデータの表現はできません。
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
-
フィールドデータ中に囲み文字と同じ文字がある場合は,囲み文字と同じ文字を2つ連続して指定してください。
-
列のデータ型がVARBINARY型の場合に空文字を指定するときは,フィールドデータを空文字とし,囲み文字を指定してください。
VARBINARY
BOOLEAN
真偽値
-
True
-
False
-
true
-
false
-
TRUE
-
FALSE
-
ナル値を設定したい場合は,フィールドデータを空文字とし,囲み文字を指定しないでください。
-
指定例以外の形式は,BOOLEAN型として認識しません。
-
-
外部データがJSON形式の場合,次の規則に対応している外部データを準備してください。
-
JSONファイルの記述形式は,各JSONオブジェクトを改行で区切って記述する形式であるLine-separated JSON(JSONL)を推奨します。
-
改行で区切られた1つのJSONオブジェクトに,表の1行のデータを記述してください。
-
各JSONオブジェクトは改行で区切って記述してください。コンマ( , )で区切って記述しないでください。
-
各JSONオブジェクトは,波括弧({ })で囲んでください。
-
JSONオブジェクトの値の中に,JSONの仕様に従っていない空白を含むことはできません。
-
JSONオブジェクトの値としてナル値を設定したい場合,値にnullと記述してください。nullは二重引用符(")で囲まないでください。
-
JSONファイル中の1行の長さは,64メガバイト以下としてください。
-
JSONオブジェクトは,キーと値のペアで構成され,次の記述形式で表現されます。
〔キー:値〔,キー:値〕…〕
1つのキーと値のペアが,表の1列分のデータに対応します。また,キーには対応する列名を,値には列のデータ型に対応する値を指定します。
なお,JSONファイルの一部またはすべての行で,外部表の列定義に対応するキーと値のペアが存在しない場合でも,SQL文はエラーになりません。行中に存在しないキーの値としてナル値が設定されます。
キーと値の推奨する指定形式を次の表に示します。
表3‒11 キーと値の推奨する指定形式 外部表の列定義に指定するHADBのデータ型
キーと値の推奨する指定形式
指定例
説明および注意事項
SMALLINT
"列名":整数
-
"C1":123
-
"C1":-123
-
整数には,二重引用符の囲み文字を指定できません。例えば,"C1":"123"とは指定できません。
-
正符号(+)は指定できません。例えば,"C1":+123とは指定できません。
-
整数の先頭に不要な0を付けることはできません。例えば,"C1":0123とは指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
INTEGER
BIGINT
DECIMAL(m,n)
"列名":10進数
-
"C1":123.45
-
"C1":-123.45
-
10進数には,二重引用符の囲み文字を指定できません。例えば,"C1":"123.45"とは指定できません。
-
正符号(+)は指定できません。例えば,"C1":+123.45とは指定できません。
-
10進数の先頭に不要な0を付けることはできません。例えば,"C1":0123.45とは指定できません。
-
10進数の整数部は省略できません。例えば,"C1":.12とは指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
NUMERIC(m,n)
REAL
"列名":浮動小数点数
-
"C1":1.234E5
-
"C1":1.234E+5
-
"C1":1.234E-5
-
浮動小数点数には,二重引用符の囲み文字を指定できません。例えば,"C1":"1234E5"とは指定できません。
-
正符号(+)は指定できません。例えば,"C1":+1234E5とは指定できません。
-
浮動小数点数の先頭に不要な0を付けることはできません。例えば,"C1":01234E5とは指定できません。
-
浮動小数点数の整数部は省略できません。例えば,"C1":E5とは指定できません。
-
指数部を表示する場合,指数部は省略できません。例えば,"C1":123Eとは指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
FLOAT
DOUBLE PRECISION
CHAR
"列名":"文字列"
"C1":"ABC"
-
二重引用符の囲み文字で囲まれていない文字列は読み込めません。
-
改行(\n),タブ(\t),バックスラッシュ(\\)などの制御文字は,エスケープする必要があります。例えば,"C1":"A\nB"と指定すると,\nは改行を意味します。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
VARCHAR
STRING
DATE
"列名":整数
"C1":18414
-
整数には,二重引用符の囲み文字を指定できません。例えば,"C1":"123"とは指定できません。
-
正符号(+)は指定できません。例えば,"C1":+123とは指定できません。
-
整数の先頭に不要な0を付けることはできません。例えば,"C1":0123とは指定できません。
-
整数には,UNIX epoch(1970/01/01)を0とした通算日を指定します。例えば,"C1":18414と指定した場合は,"2020-06-01"となります。
-
"C1":"2025-03-01"などの文字列表現は指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
TIME(0)
"列名":整数
"C1":45296789
-
整数には,二重引用符の囲み文字を指定できません。例えば,"C1":"123"とは指定できません。
-
正符号(+)は指定できません。例えば,"C1":+123とは指定できません。
-
整数の先頭に不要な0を付けることはできません。例えば,"C1":0123とは指定できません。
-
整数には,00:00:00を0とし,通算した秒,ミリ秒,マイクロ秒,ナノ秒を指定します。例えば,HADBのデータ型がTIME(3)で,"C1":45296789を指定した場合は,"12:34:56.789"となります。
-
"C1":"12:34:56.789"などの文字列表現は指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
TIME(3)
TIME(6)
TIME(9)
TIMESTAMP(0) WITHOUT TIME ZONE
"列名":"時刻帯なしの時刻印"
-
"C1":"2020-06-01 11:22:33"
-
"C1":"2020-06-01 11:22:33.123"
-
"C1":"2020-06-01 11:22:33.123456"
-
"C1":"2020-06-01 11:22:33.123456789"
-
時刻帯なしの時刻印は,YYYY-MM-DD hh:mm:ss.nn...nの形式で指定してください。YYYYは年,MMは月,DDは日,hhは時,mmは分,ssは秒を意味しています。小数秒精度が1以上の場合は,.nn...nnと指定します。
また,DDの後には半角空白を入れてください。
-
二重引用符の囲み文字で囲まれていない時刻印の値は読み込めません。
-
年月日の区切りに,/は使用できません。例えば,2025/03/01 12:34:56とは指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
-
外部表の列定義でTIMESTAMP(9) WITHOUT TIME ZONEを指定する場合,1677-09-21 00:12:43.145224192~2262-04-11 23:47:16.854775807の範囲の値を指定してください。範囲外の値を指定した場合,不正な値が返却されます。
TIMESTAMP(3) WITHOUT TIME ZONE
TIMESTAMP(6) WITHOUT TIME ZONE
TIMESTAMP(9) WITHOUT TIME ZONE
TIMESTAMP(0) WITH TIME ZONE
"列名":"時刻帯付きの時刻印"
-
"C1":"2025-06-01 11:22:33+00:00"
-
"C1":"2025-06-01 20:22:33+09:00"
-
"C1":"2025-06-01 11:22:33Z"
-
"C1":"2025-06-01 11:22:33.123+00:00"
-
"C1":"2025-06-01 11:22:33.123456+00:00"
-
"C1":"2025-06-01 11:22:33.123456789+00:00"
-
時刻帯付きの時刻印は,YYYY-MM-DD hh:mm:ss.nn...n±hh:mmの形式で指定してください。YYYYは年,MMは月,DDは日,hhは時,mmは分,ssは秒を意味しています。小数秒精度が1以上の場合は,.nn...nnと指定します。
また,DDの後には半角空白を入れてください。
時刻帯は,±hh:mmの形式で指定してください。時(hh),分(mm)の桁数が足りない場合は,左側に0を記述してください。また,+00:00の代わりにZを指定できます。
-
二重引用符の囲み文字で囲まれていない時刻印の値は読み込めません。
-
年月日の区切りに,/は使用できません。例えば,2025/03/01 12:34:56+00:00とは指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
-
外部表の列定義でTIMESTAMP(9) WITH TIME ZONEを指定する場合,1677-09-21 00:12:43.145224192+00:00~2262-04-11 23:47:16.854775807+00:00の範囲の値を指定してください。範囲外の値を指定した場合,不正な値が返却されます。
TIMESTAMP(3) WITH TIME ZONE
TIMESTAMP(6) WITH TIME ZONE
TIMESTAMP(9) WITH TIME ZONE
BINARY
"列名":"文字列"
"C1":"ABCD"
-
二重引用符の囲み文字で囲まれていない文字列は読み込めません。
-
指定されているデータをそのままバイナリデータとして外部表に読み込みます。例えば,文字列にABCDと指定した場合,外部表には0x41424344で読み込まれます。
-
16進文字列と2進文字列によるデータの表現はできません。
-
改行(\n),タブ(\t),バックスラッシュ(\\)などの制御文字は,エスケープする必要があります。例えば,"C1":"A\nB"と指定すると,\nは改行を意味します。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
VARBINARY
BOOLEAN
"列名":真偽値
-
"C1":true
-
"C1":false
-
真偽値には,二重引用符の囲み文字を指定できません。例えば,"C1":"true"とは指定できません。
-
真偽値には,大文字を指定できません。例えば,"C1":Trueとは指定できません。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
ARRAY
"列名":[配列要素値〔,配列要素値〕…]
"C1":["A","B","C"]
-
配列要素値には,要素データ型に対応した値を,この表で説明しているデータ型の指定形式に従って指定してください。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
-
配列要素値にナル値を設定したい場合は,配列要素値にnullを指定してください。
STRUCT
"列名":{フィールド名:フィールド値〔,フィールド名:フィールド値〕…}
"C1":{"F1":"X", "F2":"Y", "F3":"Z"}
-
フィールド名には,構造データのフィールド名を指定します。
-
フィールド値には,フィールドデータ型に対応した値を,この表で説明しているデータ型の指定形式に従って指定してください。
-
ナル値を設定したい場合は,"列名":nullと指定してください。
-
フィールド値にナル値を設定したい場合は,フィールド値にnullを指定してください。
-
-
(5) 列定義の指定を省略した場合の規則
列定義の指定を省略した場合,ここで説明する規則に従って列定義が生成されます。
(a) 外部データのデータ形式指定にICEBERGを指定する場合
-
外部表の列定義(列名および列のデータ型)は,参照するIcebergテーブルのメタデータを基に,HADBサーバが自動的に生成します。Icebergテーブルのメタデータに含まれるすべての列を,外部表の列定義として定義します。
-
生成される列定義の数が4,001以上になる場合,CREATE FOREIGN TABLE文がエラーになります。
-
生成される列のデータ型が次のどれかに該当する場合,CREATE FOREIGN TABLE文がエラーになります。
-
TIME(6)以外のTIME型
-
TIMESTAMP(6) WITHOUT TIME ZONE以外のTIMESTAMP WITHOUT TIME ZONE型
-
TIMESTAMP(6) WITH TIME ZONE以外のTIMESTAMP WITH TIME ZONE型
-
フィールドデータ型に上記のどれかのデータ型を指定したSTRUCT型,または要素データ型に上記のどれかのデータ型を指定したARRAY型
-
-
HADBサーバが生成する列定義の列名は,参照するIcebergテーブルのメタデータに含まれる列名と同じになります。Icebergテーブルのメタデータに含まれる列名が,次の条件をすべて満たしている必要があります。満たしていない場合は,CREATE FOREIGN TABLE文がエラーになります。
-
Icebergテーブルのメタデータに含まれる列名が,「6.1.4 名前の指定」の「(2) 名前に使用できる文字の規則」の列名の条件を満たしている
-
Icebergテーブルのメタデータに含まれる列名が重複していない(同じ列名が存在しない)
-
-
HADBサーバが生成する列定義のデータ型は,参照するIcebergテーブルのメタデータに含まれる列のデータ型を基に決定されます。Icebergテーブルのメタデータに含まれる列のデータ型とHADBのデータ型の対応を次の表に示します。
表3‒12 Icebergテーブルのメタデータに含まれる列のデータ型とHADBのデータ型の対応 Icebergテーブルのメタデータに含まれる列のデータ型
対応するHADBのデータ型(外部表の列のデータ型)
int
INTEGER※1
long
BIGINT
decimal (precision=m, scale=n)
DECIMAL(m,n)※2
float
REAL
double
DOUBLE
string
STRING
binary
VARBINARY(32000)※3
fixed(L)
BINARY(L)※4
date
DATE
time
TIME(6)
timestamp
TIMESTAMP(6) WITHOUT TIME ZONE
timestamptz
TIMESTAMP(6) WITH TIME ZONE
boolean
BOOLEAN
uuid
UUID
list
ARRAY[30000]※5
struct
STRUCT※6
map
要素データ型がSTRUCT型となるARRAY型※7
上記以外
対応するHADBのデータ型はありません。
- 注※1
-
整数データ型のデータ形式がレガシー形式の場合,対応するHADBのデータ型はSMALLINTになります。
- 注※2
-
1≦m≦38,0≦n≦38,n≦mを満たさない場合,CREATE FOREIGN TABLE文がエラーになります。
- 注※3
-
桁あふれなどでHADBのデータ型に変換できない場合,外部表の検索時にSQL文がエラーになります。
- 注※4
-
バイナリデータのデータ長が1~32,000以外の場合,CREATE FOREIGN TABLE文がエラーになります。
- 注※5
-
-
要素データ型に数データ,文字データ,日時データ,バイナリデータ,論理データ,UUIDデータ,および構造データ以外のデータ型を指定した場合,CREATE FOREIGN TABLE文がエラーになります。
-
要素データ型に構造データを入れ子にして指定し,構造データと配列データの繰り返しの数が8回を超えた場合,CREATE FOREIGN TABLE文がエラーになります。
-
配列データの最大要素数は,2~30,000としてください。
-
- 注※6
-
-
構造データのフィールド数の最大値が1,000を超える場合,CREATE FOREIGN TABLE文がエラーになります。また,構造データ中に構造データを指定した場合,すべての構造データのフィールド数の合計の最大値が1,000を超えた場合も,CREATE FOREIGN TABLE文がエラーになります。
-
フィールドデータ型に,構造データまたは配列データを入れ子にして指定し,構造データと配列データの繰り返しの数が8回を超えた場合,CREATE FOREIGN TABLE文がエラーになります。
-
構造データのフィールド名に同じ名前を指定できません。
-
構造データのフィールド名の名前の規則については,「6.1.4 名前の指定」の「(2) 名前に使用できる文字の規則」のフィールド名を参照してください。
-
- 注※7
-
HADBでは,次のように要素データ型がSTRUCT型となるARRAY型として扱います。その際,上記の表のARRAY型およびSTRUCT型の規則が適用されます。
STRUCT{"key" mapのkeyのデータ型, "value" mapのvalueのデータ型} ARRAY[30000]
(b) 外部データのデータ形式指定にPARQUETを指定する場合
-
列定義を省略した場合,外部データのディレクトリパス指定に指定された外部データの検索対象ディレクトリ下(サブディレクトリも含む)のPARQUET形式の外部データファイルを参照してHADBサーバが自動的に列定義を生成します(外部表の列の列名とデータ型をHADBサーバが自動的に決定します)。
-
HADBサーバが生成する列定義の列名は,PARQUET形式の外部データファイルのスキーマ情報に存在する列名と同じになります。スキーマ情報に存在するすべての列の列定義を生成します。
- 重要
-
スキーマ情報に存在する列名が,次の条件をすべて満たしている必要があります。満たしていない場合は,CREATE FOREIGN TABLE文がエラーになります。
-
スキーマ情報に存在する列名が「6.1.4 名前の指定」の「(2) 名前に使用できる文字の規則」の列名の条件を満たしている
-
スキーマ情報に同じ列名が存在しない
-
-
HADBサーバが生成する列定義のデータ型は,PARQUET形式の外部データファイルのスキーマ情報に存在する列のデータ型を,Apache Arrowのデータ型に変換し,それをHADBのデータ型に変換して決定されます。PARQUET形式の外部データの列のデータ型とHADBのデータ型の対応を次の表に示します。
表3‒13 PARQUET形式の外部データの列のデータ型とHADBのデータ型の対応 PARQUET形式の外部データの列のデータ型
対応するHADBのデータ型(外部表の列のデータ型)
NULL
BIGINT
INT(bitWidth=8, isSigned=false)
SMALLINT
INT(bitWidth=8, isSigned=true)
INT(bitWidth=16, isSigned=false)
INTEGER※1
INT(bitWidth=16, isSigned=true)
SMALLINT
INT(bitWidth=32, isSigned=false)
BIGINT
INT(bitWidth=32, isSigned=true)
INTEGER※1
INT(bitWidth=64, isSigned=false)
BIGINT※2,※3
INT(bitWidth=64, isSigned=true)
BIGINT
DECIMAL(precision=m, scale=n)
DECIMAL(m,n)※4
FLOAT16
REAL
FLOAT
DOUBLE
DOUBLE PRECISION
STRING
STRING※3
BYTE_ARRAY
VARBINARY(32000)※3
FIXED_LEN_BYTE_ARRAY
BINARY(n)※5
DATE
DATE
TIME(timeUnit=milliseconds)
TIME(3)
TIME(timeUnit=microseconds)
TIME(6)
TIME(timeUnit=nanoseconds)
TIME(9)
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=false)
TIMESTAMP(3) WITHOUT TIME ZONE
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=false)
TIMESTAMP(6) WITHOUT TIME ZONE
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=false)
TIMESTAMP(9) WITHOUT TIME ZONE
TIMESTAMP(timeUnit=milliseconds, isAdjustedToUTC=true)
TIMESTAMP(3) WITH TIME ZONE
TIMESTAMP(timeUnit=microseconds, isAdjustedToUTC=true)
TIMESTAMP(6) WITH TIME ZONE
TIMESTAMP(timeUnit=nanoseconds, isAdjustedToUTC=true)
TIMESTAMP(9) WITH TIME ZONE
BOOLEAN
BOOLEAN
UUID
UUID
LIST
ARRAY※6
STRUCT
STRUCT※7
MAP
要素データ型がSTRUCT型となるARRAY型※8
上記以外
対応するHADBのデータ型はありません。
- 注※1
-
整数データ型のデータ形式がレガシー形式の場合,対応するHADBのデータ型はSMALLINTになります。
- 注※2
-
整数データ型のデータ形式がレガシー形式の場合,対応するHADBのデータ型はINTEGERになります。
- 注※3
-
桁あふれなどでHADBのデータ型に変換できない場合,外部表の検索時にSQL文がエラーになります。
- 注※4
-
1≦m≦38,0≦n≦38,n≦mを満たさない場合,CREATE FOREIGN TABLE文がエラーになります。
- 注※5
-
バイナリデータのデータ長が1~32,000以外の場合,CREATE FOREIGN TABLE文がエラーになります。
- 注※6
-
-
要素データ型に数データ,文字データ,日時データ,バイナリデータ,論理データ,UUIDデータ,および構造データ以外のデータ型を指定した場合,CREATE FOREIGN TABLE文がエラーになります。
-
要素データ型に構造データを入れ子にして指定し,構造データと配列データの繰り返しの数が8回を超えた場合,CREATE FOREIGN TABLE文がエラーになります。
-
配列データの最大要素数は,2~30,000としてください。
-
PARQUET形式の外部データから最大要素数(最大要素数をnとする)を取得できた場合は,最大要素数がnのARRAY型になります。最大要素数を取得できなかった場合は,最大要素数が30,000のARRAY型になります。
-
- 注※7
-
-
構造データのフィールド数の最大値が1,000を超える場合,CREATE FOREIGN TABLE文がエラーになります。また,構造データ中に構造データを指定した場合,すべての構造データのフィールド数の合計の最大値が1,000を超えた場合も,CREATE FOREIGN TABLE文がエラーになります。
-
フィールドデータ型に,構造データまたは配列データを入れ子にして指定し,構造データと配列データの繰り返しの数が8回を超えた場合,CREATE FOREIGN TABLE文がエラーになります。
-
構造データのフィールド名に同じ名前を指定できません。
-
構造データのフィールド名の名前の規則については,「6.1.4 名前の指定」の「(2) 名前に使用できる文字の規則」のフィールド名を参照してください。
-
- 注※8
-
HADBでは,次のように要素データ型がSTRUCT型となるARRAY型として扱います。その際,上記の表のARRAY型およびSTRUCT型の規則が適用されます。
STRUCT{"key" MAPのkeyのデータ型, "value" MAPのvalueのデータ型} ARRAY[30000]
-
次のどれかの条件に該当する場合,CREATE FOREIGN TABLE文がエラーになります。
-
生成される列定義の数とパーティションキー列の数の合計が4,001以上となる場合
-
外部データの検索対象ディレクトリ下(サブディレクトリも含む)にPARQUET形式の外部データファイルが存在しない場合
-
外部データの検索対象ディレクトリ下(サブディレクトリも含む)のPARQUET形式の外部データを外部データアクセス用ライブラリが読み込めない場合
-
- 重要
-
外部データの検索対象ディレクトリ下(サブディレクトリも含む)のPARQUET形式の全外部データファイルのスキーマ情報に存在する列名とデータ型が,すべて同じになるようにしてください。
(6) 留意事項
外部データのデータ形式指定にICEBERGを指定したときの留意事項を説明します。
-
検索対象となる外部データは,すべてPARQUET形式のファイルに格納されている必要があります。
-
行レベルの更新によって削除ファイルが生成されたIcebergテーブルは検索できません。
-
外部表の検索時,Icebergテーブルのメタデータを基に,外部表の列定義(列名,列のデータ型など)が生成されます。このとき,「(5) 列定義の指定を省略した場合の規則」の「(a) 外部データのデータ形式指定にICEBERGを指定する場合」で説明している規則に従って外部表の列定義が生成されます。
また,外部表の検索時にタイムトラベル指定を指定している場合(過去のメタデータを参照している場合),タイムトラベル指定で指定したスナップショットのメタデータを基に,外部表の列定義(列名,列のデータ型など)が生成されます。
-
ディクショナリ表(SQL_TABLES表,SQL_COLUMNS表,SQL_DATATYPE_DESCRIPTORS表)に格納されている外部表の列定義に関する情報は,外部表の定義時点のものです。外部表の検索時点のものではありません。そのため,メタデータに含まれている列定義に関する情報を変更した場合,ディクショナリ表に格納されている外部表の列定義に関する情報と,外部表の検索時に使用される外部表の列定義に関する情報が不一致になります。一致させたい場合は,いったん外部表を削除したあとに,外部表を定義し直してください。
ただし,外部表の検索時にタイムトラベル指定を指定した場合は,外部表を定義し直しても,ディクショナリ表に格納されている情報と一致しません。
-
外部表を基表とするビュー表を検索する場合,ビュー表の検索時点のメタデータを基に外部表の列定義が生成されます。ビュー表の定義時とビュー表の検索時で,外部表の列定義が異なる場合(ビュー表を定義したあとに,メタデータに含まれている列定義に関する情報を変更した場合),ビュー表の検索時にSQL文がエラーになります。その場合は,ALTER VIEW文などでビュー表を再作成してください。
なお,外部表に対してタイムトラベル指定を指定して定義したビュー表の場合は,ビュー表の定義時とビュー表の検索時で外部表の列定義が異なることがないため(同じスナップショットのメタデータを参照するため),ビュー表の検索時にSQL文がエラーになることはありません。
-
外部データのデータ形式指定にICEBERGを指定して定義した外部表は,Icebergのスキーマ進化(Schema Evolution)に対応しています。ただし,Icebergテーブルのメタデータおよびデータファイルのメタデータから,データファイルごとの定義情報を一意に特定できるようにしておく必要があります。データファイルにメタデータを設定しない方法でIcebergテーブルにデータファイルの定義情報を登録した場合,スキーマ進化を実行するとデータファイルの定義情報をHADBサーバが特定できなくなります。その結果,外部表の検索時にSQL文がエラーになることがあります。エラーが発生した場合は,Icebergテーブルに対してデータファイルの再生成を実行してください。
-
外部表の検索時,外部表の列定義(列名,列のデータ型など)がIcebergテーブルのメタデータから生成されます。そのため,外部表の検索時にIcebergのスキーマ進化(Schema Evolution)を実行すると,外部表の列定義の不一致が原因で外部表の検索がエラーになることがあります。
(7) 例題
- ■パーティションキー列を指定しない場合
-
パーティションキー列を指定しない外部表の定義例を説明します。
外部データを格納している外部データファイルの構成は,次のようになっているとします。
- 例題1
-
外部表(FT1)を定義します。
CREATE FOREIGN TABLE "FT1" ("C1" INTEGER,"C2" INTEGER) ...1 SERVER "SERVER1" ...2 OPTIONS ( ...3 FORMAT CSV ...4 ,LOCATION 's3://data/' ...5 )[説明]
-
外部表の表名,および外部表の列定義を指定します。
-
外部表が使用する外部サーバの名称を指定します。
-
OPTIONS以降には外部表オプションを指定します。
-
外部データのデータ形式を指定します。外部データがCSV形式のため,CSVを指定します。
-
外部データの検索対象ディレクトリのパスを指定します。
外部表FT1の検索時,s3://data/ディレクトリ下のすべての外部データファイル中の外部データが検索対象になるため,「外部データファイルの構成」に示す[1]~[14]の外部データファイル中の外部データが検索対象になります。
-
- 例題2
-
外部表(FT2)を定義します。
CREATE FOREIGN TABLE "FT2" ("C1" INTEGER,"C2" INTEGER) ...1 SERVER "SERVER1" ...2 OPTIONS ( ...3 FORMAT CSV ...4 ,LOCATION 's3://data/2025/' ...5 ,DELIMITER_CHAR '.' ...6 ,ENCLOSING_CHAR '@' ...7 ,HEADER_SPEC YES ...8 )[説明]
-
外部表の表名,および外部表の列定義を指定します。
-
外部表が使用する外部サーバの名称を指定します。
-
OPTIONS以降には外部表オプションを指定します。
-
外部データのデータ形式を指定します。外部データがCSV形式のため,CSVを指定します。
-
外部データの検索対象ディレクトリのパスを指定します。
外部表FT2の検索時,s3://data/2025/ディレクトリ下のすべての外部データファイル中の外部データが検索対象になるため,「外部データファイルの構成」に示す[11]~[14]の外部データファイル中の外部データが検索対象になります。
-
CSV形式の外部データの区切り文字( . )を指定します。
-
CSV形式の外部データの囲み文字(@)を指定します。
-
CSV形式の外部データの先頭1行目をヘッダー行として読み込む指定をします。
-
- ■パーティションキー列を指定する場合
-
パーティションキー列を指定する外部表の定義例を説明します。
外部データを格納している外部データファイルの構成は,次のようになっているとします。
- 例題
-
外部表(ACCESSLOG)を定義します。
CREATE FOREIGN TABLE "ACCESSLOG" ("ID" INTEGER,"USERID" CHAR(5)) ...1 PARTITIONED BY ("YEAR" INTEGER,"MONTH" INTEGER,"DAY" INTEGER) ...2 SERVER "SERVER1" ...3 OPTIONS ( ...4 FORMAT CSV ...5 ,LOCATION 's3://data/' ...6 ,"YEAR".TYPE ENUM ...7 ,"YEAR".VALUE '2024,2025' ...7 ,"MONTH".TYPE INTEGER ...8 ,"MONTH".RANGE_MIN 1 ...8 ,"MONTH".RANGE_MAX 2 ...8 ,"MONTH".INTERVAL 1 ...8 ,"MONTH".DIGITS 2 ...8 ,"DAY".TYPE INTEGER ...9 ,"DAY".RANGE_MIN 1 ...9 ,"DAY".RANGE_MAX 2 ...9 ,"DAY".INTERVAL 1 ...9 ,"DAY".DIGITS 2 ...9 ,LOCATION.TEMPLATE 's3://data/${YEAR}/${MONTH}/${DAY}/' ...10 )[説明]
-
外部表の表名,および外部表の列定義を指定します。
-
パーティションキー列を定義します。この例の場合,YEAR,MONTH,DAYをパーティションキー列として定義しています。
-
外部表が使用する外部サーバの名称を指定します。
-
OPTIONS以降には外部表オプションを指定します。
-
外部データのデータ形式を指定します。外部データがCSV形式のため,CSVを指定します。
-
外部データの検索対象ディレクトリのパスを指定します。
-
パーティションキー列YEARの属性プロパティを指定します。パーティションキー列YEARの値が,2024および2025となるように定義しています。
-
パーティションキー列MONTHの属性プロパティを指定します。パーティションキー列MONTHの値が,1および2(テンプレートディレクトリパスの変数値として使用される値は01および02)となるように定義しています。
-
パーティションキー列DAYの属性プロパティを指定します。パーティションキー列DAYの値が,1および2(テンプレートディレクトリパスの変数値として使用される値は01および02)となるように定義しています。
-
テンプレートディレクトリパスを指定します。
外部表ACCESSLOGの検索時,テンプレートディレクトリパスの指定を基に決定されたディレクトリが,外部データの検索対象ディレクトリとなり,このディレクトリ下の外部データファイル中の外部データが検索対象になります。「外部データファイルの構成」に示す[1]~[4],[7],[8],[11],[12]の外部データファイル中の外部データが検索対象になります。
パーティションキー列を指定したSELECT文の例を次に示します。
- (例1)
-
SELECT "YEAR","MONTH","DAY","USERID" FROM "ACCESSLOG" ORDER BY "YEAR","MONTH","DAY","USERID"下線部分がパーティションキー列の指定です。
この場合,CREATE FOREIGN TABLE文で定義したテンプレートディレクトリパスの指定に従って,「外部データファイルの構成」に示す[1]~[4],[7],[8],[11],[12]の外部データファイル中の外部データが検索対象になります。
<SELECT文の実行結果の例>
- (例2)
-
SELECT "YEAR","MONTH","DAY","USERID" FROM "ACCESSLOG" WHERE "DAY" = 2 ORDER BY "YEAR","MONTH","DAY","USERID"下線部分がパーティションキー列の指定です。
WHERE句に指定した探索条件によって,パーティションキー列DAYの値が2(テンプレートディレクトリパスの変数値として使用される値は02)に絞り込まれるため,「外部データファイルの構成」に示す[3],[4],[8]の外部データファイル中の外部データが検索対象になります。
<SELECT文の実行結果の例>
- (例3)
-
SELECT "YEAR","MONTH","DAY","USERID" FROM "ACCESSLOG" WHERE "DAY" = 2 AND "USERID" IN ('U0005','U0010') ORDER BY "YEAR","MONTH","DAY","USERID"下線部分がパーティションキー列の指定です。
WHERE句に指定した探索条件("DAY" = 2)によって,パーティションキー列DAYの値が2(テンプレートディレクトリパスの変数値として使用される値は02)になるため,「外部データファイルの構成」に示す[3],[4],[8]の外部データファイル中の外部データが検索対象になります。そして,もう1つの探索条件である"USERID" IN ('U005','U0010')の指定に従って実行結果が返されます。
<SELECT文の実行結果の例>
-
- ■Icebergテーブルで管理している外部データを読み込む外部表を定義する場合
-
- 例題1
-
外部表(REST_ACCESSLOG)を定義します。
Icebergテーブルを使用して外部データにアクセスします。カタログは,REST Catalogを使用します。
CREATE FOREIGN TABLE "REST_ACCESSLOG" ("ID" INT,"USERID" CHAR(5)) SERVER "SERVER1" OPTIONS ( FORMAT ICEBERG ...1 ,CATALOG_TYPE REST ...2 ,CATALOG_NAMESPACE 'analytics_sales' ,CATALOG_URI 'https://access-api/catalog/iceberg' ,WAREHOUSE_NAME 'accesslog_catalog' ,AUTH_TOKEN_URI 'https://auth-api/realms/rest/protocol/openid-connect/token' ,AUTH_CLIENT_ID 'rest-catalog-id' ,AUTH_CLIENT_SECRET 'secret1234567890' ,AUTH_ALLOWED_SCOPES 'catalog' )[説明]
-
外部データのデータ形式指定にはICEBERGを指定します。
-
Icebergで使用するカタログの種別を指定します。REST Catalogを使用する場合はRESTを指定します。
-
- 例題2
-
外部表(GLUE_ACCESSLOG)を定義します。
Icebergテーブルを使用して外部データにアクセスします。カタログは,Glue Catalogを使用します。
CREATE FOREIGN TABLE "GLUE_ACCESSLOG" ("ID" INT,"USERID" CHAR(5)) SERVER "SERVER1" OPTIONS ( FORMAT ICEBERG ...1 ,CATALOG_TYPE GLUE ...2 ,CATALOG_NAMESPACE 'analytics_sales' ,CATALOG_REGION 'ap-northeast-1' ,CATALOG_ID '123456789012' )[説明]
-
外部データのデータ形式指定にはICEBERGを指定します。
-
Icebergで使用するカタログの種別を指定します。Glue Catalogを使用する場合はGLUEを指定します。
-