- カテゴリ:
CREATE EXTERNAL TABLE¶
現在の/指定されたスキーマに新しい外部テーブルを作成するか、既存の外部テーブルを置き換えます。クエリを実行すると、外部テーブルは指定された外部ステージの1つ以上のファイルのセットからデータをロードし、単一の VARIANT 列にデータを出力します。
追加の列を定義できます。各列の定義は、名前、データ型、およびオプションで列に値が必要か(NOT NULL)か、参照整合性制約(主キー、外部キーなど)があるかで構成されます。詳細については、 使用上の注意をご参照ください。
- こちらもご参照ください:
ALTER EXTERNAL TABLE 、 DROP EXTERNAL TABLE 、 SHOW EXTERNAL TABLES
このトピックの内容:
構文¶
CREATE [ OR REPLACE ] EXTERNAL TABLE [IF NOT EXISTS]
<table_name>
( [ <col_name> <col_type> AS <expr> | <part_col_name> <col_type> AS <part_expr> ]
[ inlineConstraint ]
[ , <col_name> <col_type> AS <expr> | <part_col_name> <col_type> AS <part_expr> ... ]
[ , ... ] )
cloudProviderParams
[ PARTITION BY ( <part_col_name> [, <part_col_name> ... ] ) ]
[ WITH ] LOCATION = externalStage
[ REFRESH_ON_CREATE = { TRUE | FALSE } ]
[ AUTO_REFRESH = { TRUE | FALSE } ]
[ PATTERN = '<regex_pattern>' ]
FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET } [ formatTypeOptions ] } )
[ AWS_SNS_TOPIC = <string> ]
[ COPY GRANTS ]
[ COMMENT = '<string_literal>' ]
条件:
inlineConstraint ::= [ NOT NULL ] [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) } } [ <constraint_properties> ]インライン制約の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。
cloudProviderParams (for Microsoft Azure) ::= [ INTEGRATION = '<integration_name>' ]externalStage ::= @[<namespace>.]<ext_stage_name>[/<path>]formatTypeOptions ::= -- If FILE_FORMAT = ( TYPE = CSV ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE RECORD_DELIMITER = '<character>' | NONE FIELD_DELIMITER = '<character>' | NONE SKIP_HEADER = <integer> SKIP_BLANK_LINES = TRUE | FALSE -- If FILE_FORMAT = ( TYPE = JSON ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE -- If FILE_FORMAT = ( TYPE = AVRO ... ) COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE -- If FILE_FORMAT = ( TYPE = PARQUET ... ) COMPRESSION = AUTO | SNAPPY | NONE
必須パラメーター¶
テーブル名
テーブルの識別子(つまり、名前)を指定する文字列。テーブルが作成されるスキーマに対して一意である必要があります。
また、識別子はアルファベット文字で始まる必要があり、識別子文字列全体が二重引用符で囲まれていない限り、スペースや特殊文字を含めることはできません(例:
"My object"
)。二重引用符で囲まれた識別子も大文字と小文字が区別されます。詳細については、 識別子の要件 をご参照ください。
[ WITH ] LOCATION =
ロードするデータを含むファイルがステージングされる外部ステージを指定します。
@[名前空間.]外部ステージ名[/パス]
ファイルは指定された名前付き外部ステージにあります。
条件:
名前空間
は、外部ステージが存在するデータベースまたはスキーマ、あるいはその両方で、データベース名.スキーマ名
またはスキーマ名
の形式です。ユーザーセッション内でデータベースとスキーマが現在使用されている場合は オプション です。それ以外の場合は必須です。パス
は、ロードするファイルのセットを制限するクラウドストレージの場所にある、ファイルの大文字と小文字を区別するオプションのパスです(つまり、ファイルの名前は一般的な文字列で開始)。パスは、別のクラウドストレージサービスによって プレフィックス または フォルダー と呼ばれることもあります。外部テーブルは、このパスをステージ定義で指定された任意のパスに追加します。ステージ定義を表示するには、
DESC STAGE ステージ名
を実行し、 url プロパティ値を確認します。例えば、ステージ URL にパスa
が含まれ、外部テーブルの場所にパスb
が含まれる場合、外部テーブルはステージ/a/b
にステージングされたファイルを読み取ります。
FILE_FORMAT = ( FORMAT_NAME = 'ファイル形式名' )
または .FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ] )
ファイル形式を指定する文字列(定数):
FORMAT_NAME = ファイル形式名
スキャンするステージングされたデータファイルを記述する既存の名前付きファイル形式を指定します。名前付きファイル形式は、データファイルの形式タイプ(CSV、 JSONなど)およびその他の形式オプションを決定します。
TYPE = CSV | JSON | AVRO | ORC | PARQUET [ ... ]
外部テーブルのクエリ時にスキャンするステージングされたデータファイルの形式タイプを指定します。
ファイル形式タイプが指定されている場合は、追加の形式固有のオプションを指定できます。詳細については、 形式タイプオプション (このトピック)をご参照ください。
ファイル形式オプションは、外部テーブルまたはステージレベルで構成できます。外部テーブルレベルで指定された設定が優先されます。どちらのレベルでも指定されていない設定は、デフォルト値を想定しています。
デフォルト:
TYPE = CSV
。重要
外部テーブルは、ステージ定義のファイル形式を 継承しません 。 FILE_FORMAT パラメーターを使用して、外部テーブルのファイル形式オプションを明示的に指定する 必要があります 。
注釈
FORMAT_NAME
とTYPE
は相互に排他的です。意図しない動作を避けるために、外部テーブルを作成するときはどちらか一方のみを指定する必要があります。
オプションのパラメーター¶
列名
列識別子(名前)を指定する文字列。テーブル識別子のすべての要件は、列識別子にも適用されます。
外部テーブルの列は、明示的な式を使用して定義される仮想列です。
詳細については、 識別子の要件 をご参照ください。
列タイプ
列のデータ型を指定する文字列(定数)。データ型は、列の
式
の結果と一致する必要があります。テーブル列に指定できるデータ型の詳細については、 データ型 をご参照ください。
式
列の式を指定する文字列。クエリすると、列はこの式から派生した結果を返します。
CONSTRAINT ...
テーブル内の指定された列のインライン制約またはアウトライン制約を定義する文字列。
構文の詳細については、 CREATE | ALTER TABLE ... CONSTRAINT をご参照ください。制約の詳細については、 制約 をご参照ください。
REFRESH_ON_CREATE = TRUE | FALSE
外部テーブルが作成された直後に、外部テーブルのメタデータを1回自動的に更新するかどうかを指定します。外部テーブルのメタデータを更新すると、指定したステージパス内のデータファイルの現在のリストとメタデータが同期されます。このアクションは、メタデータが
[ WITH ] LOCATION =
設定で指定された名前付き外部ステージに 既存の データファイルを登録するために必要です。TRUE
Snowflakeは、作成後に外部テーブルのメタデータを自動的に更新します。
FALSE
Snowflakeは、外部テーブルのメタデータを自動的に更新しません。ステージに既存のデータファイルを登録するには、 ALTER EXTERNAL TABLE ... REFRESH を使用して外部テーブルのメタデータを手動で1回更新します。
デフォルト:
TRUE
AUTO_REFRESH = TRUE | FALSE
[ WITH ] LOCATION =
設定で指定された名前付き外部ステージで 新しいまたは更新された データファイルが使用可能な場合に、Snowflakeが外部テーブルメタデータの自動更新のトリガーを有効にするかどうかを指定します。注釈
ストレージの場所(つまり、Amazon S3またはMicrosoft Azure)のイベント通知を構成して、外部テーブルメタデータに読み込む新しいデータまたは更新されたデータが利用可能になったときにSnowflakeに通知する 必要があります 。詳細については、 Amazon S3に対する外部テーブルの自動更新 (S3)または Azure Blobストレージに対する外部テーブルの自動更新 (Azure)をご参照ください。
現在、メタデータを自動的に更新する機能は、Google Cloud Storageステージを参照する外部テーブルでは使用できません。
回避策として、 データファイルをステージングするためのベストプラクティス 従うとともに、欠落したファイルを登録するために、 ALTER EXTERNAL TABLE ... REFRESH ステートメントを定期的に実行するようにお勧めします。満足のいくパフォーマンスを得るために、 ALTER EXTERNAL TABLE で選択パスプレフィックスを使用して、リストと既存登録の有無を確認する必要のあるファイル数を減らすようにお勧めします(例:ボリュームに応じて、
バケット名/YYYY/MM/DD/
またはバケット名/YYYY/MM/DD/HH/
)。外部テーブルが作成されると、そのメタデータは
REFRESH_ON_CREATE = FALSE
でない限り、自動的に1回更新されます。
TRUE
Snowflakeを使用すると、外部テーブルメタデータの自動更新をトリガーできます。
FALSE
Snowflakeは、外部テーブルメタデータの自動更新のトリガーを有効にしません。 ALTER EXTERNAL TABLE ... REFRESH を使用して、外部テーブルのメタデータを手動で定期的に更新し、メタデータをステージパス内のファイルの現在のリストと同期する必要があります。
デフォルト:
TRUE
PATTERN = '正規表現パターン'
一致する外部ステージ上のファイル名やパスを指定する、一重引用符で囲まれた正規表現パターン文字列。
ちなみに
最高のパフォーマンスを得るには、多数のファイルをフィルタリングするパターンを適用しないようにしてください。
注釈
現在、このパラメーターは、ファイルを登録するために、
ALTER EXTERNAL TABLE ... REFRESH
を実行して、外部テーブルのメタデータを手動で更新する場合にのみサポートされます。イベント通知を使用してメタデータが更新される場合、パラメーターはサポートされません。AWS_SNS_TOPIC = 文字列
Amazon Simple Notification Service(SNS)を使用してAmazon S3ステージの AUTO_REFRESH を設定する場合にのみ必要です。 S3バケットの SNS トピックのAmazonリソース名(ARN)を指定します。 CREATE EXTERNAL TABLE ステートメントは、指定された SNS トピックにAmazon Simple Queue Service(SQS)キューをサブスクライブします。 SNS トピックを介したイベント通知により、メタデータの更新がトリガーされます。詳細については、 Amazon S3に対する外部テーブルの自動更新 をご参照ください。
COPY GRANTS
CREATE OR REPLACE TABLE バリアントを使用して外部テーブルが再作成されるときに、元のテーブルのアクセス許可を保持することを指定します。このパラメーターは、既存のテーブルから新しいテーブルにすべての権限( OWNERSHIP 以外)をコピーします。デフォルトでは、 CREATE EXTERNAL TABLE コマンドを実行するロールが新しい外部テーブルを所有します。
注意:
許可をコピーする操作は、 CREATE EXTERNAL TABLE コマンドで(つまり、同じトランザクション内で)アトミックに発生します。
COMMENT = '文字列リテラル'
外部テーブルのコメントを指定する文字列(リテラル)。
デフォルト:値なし
パーティション分割パラメーター¶
これらのパラメーターを使用して、外部テーブルをパーティション分割します。
パーティション列名 列タイプ AS パーティション式
外部テーブルのデータをパーティション化するために必要
外部テーブルの1つ以上のパーティション列を指定します。
パーティション列は、 METADATA$FILENAME 疑似列のパスおよび/またはファイル名情報を解析する式として評価する 必要があります 。パーティション列は、スキャンする必要のないデータファイルを削除することにより、クエリパフォーマンスを最適化します(外部テーブルのパーティション分割)。パーティションは、パーティション列の式のパスやファイル名に一致するすべてのデータファイルで構成されます。
パーティション式名
パーティション列の識別子(名前)を指定する文字列。テーブル識別子のすべての要件は、列識別子にも適用されます。
列タイプ
列のデータ型を指定する文字列(定数)。データ型は、列の
パーティション式
の結果と一致する必要があります。パーティション式
列の式を指定する文字列。式には METADATA$FILENAME 疑似列を含める必要があります。
外部テーブルは現在、パーティション式で次の関数のサブセットをサポートしています。
サポートされている関数のリスト:
=
、<>
、>
、>=
、<
、<=
||
+
、-
-
(符号切り替え)*
AND
、OR
NOT
テーブルのパーティション列を定義したら、 PARTITION BY 句を使用してこれらの列を識別します。
[ PARTITION BY ( パーティション列名 [, パーティション列名 ... ] ) ]
外部テーブルについて評価するパーティション列を指定します。
- 使用法
外部テーブルをクエリする場合、 WHERE 句に1つ以上のパーティション列を含めます。例:
... WHERE パーティション列名 = 'フィルター値'
Snowflakeはパーティション列をフィルター処理して、スキャンするデータファイルのセットを制限します。これらのファイルのすべての行がスキャンされることに注意してください。 WHERE 句に非パーティション列が含まれる場合、それらのフィルターは、データファイルがフィルター処理された 後 、評価されます。
一般的な方法は、時間の増分に基づいてデータファイルをパーティション分割することです。または、データファイルが複数のソースからステージングされている場合は、データソース識別子と日付またはタイムスタンプで分割します。
クラウドプロバイダーのパラメーター( cloudProviderParams
)¶
Microsoft Azure
INTEGRATION = 統合名
Azure Event Grid通知を使用して外部テーブルメタデータを自動的に更新するのに使用される通知統合の名前を指定します。通知統合は、Snowflakeとサードパーティのクラウドメッセージキューサービス間のインターフェイスを提供するSnowflakeオブジェクトです。
このパラメーターは、外部テーブルの自動更新操作を有効にするために必要です。自動更新機能の構成手順については、 Azure Blobストレージに対する外部テーブルの自動更新 をご参照ください。
形式タイプオプション(formatTypeOptions
)¶
形式タイプオプションは、 テーブルへのデータのロード と テーブルからのデータのアンロード に使用されます。
指定したファイル形式タイプ(FILE_FORMAT = ( TYPE = ... )
)に応じて、次の形式固有のオプションを1つ以上含めることができます(空白、コンマ、または改行で区切られます)。
TYPE = CSV¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
ロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
メモ
AUTO
現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTO
ではなくBROTLI
を明示的に使用してください。GZIP
BZ2
BROTLI
Brotliで圧縮されたファイルをロードするときには、指定する必要があります。
ZSTD
Zstandard v0.8(およびそれ以上)がサポートされています。
DEFLATE
Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE
生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONE
ロードするデータファイルは圧縮されていません。
RECORD_DELIMITER = '文字' | NONE
入力ファイルのレコードを区切る、1つ以上のシングルバイトまたはマルチバイト文字。
一般的なエスケープシーケンス、8進値(
\\
で始まる)、または16進値(0x
で始まる)を受け入れます。たとえば、ソーン(Þ
)文字で区切られたレコードの場合、8進数(\\336
)または16進数(0xDE
)の値を指定します。NONE
の値も受け入れます。指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な UTF-8文字でなければなりません。
複数文字の区切り文字もサポートされています。ただし、 RECORD_DELIMITER または FIELD_DELIMITER の区切り文字は、他のファイル形式オプション(
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'
など)の区切り文字の部分文字列にはできません。区切り文字は最大20文字に制限されています。デフォルト:改行文字。「改行」は論理的であるため、
\r\n
がWindowsプラットフォーム上のファイルの改行として理解されることに注意してください。FIELD_DELIMITER = '文字' | NONE
入力ファイルのフィールドを区切る、1つ以上のシングルバイトまたはマルチバイト文字。
一般的なエスケープシーケンス、8進値(
\\
で始まる)、または16進値(0x
で始まる)を受け入れます。たとえば、ソーン(Þ
)文字で区切られたフィールドの場合、8進数(\\336
)または16進数(0xDE
)の値を指定します。NONE
の値も受け入れます。指定された区切り文字は、ランダムなバイトのシーケンスではなく、有効な UTF-8文字でなければなりません。
複数文字の区切り文字もサポートされています。ただし、 RECORD_DELIMITER または FIELD_DELIMITER の区切り文字は、他のファイル形式オプション(
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'
など)の区切り文字の部分文字列にはできません。区切り文字は最大20文字に制限されています。デフォルト:コンマ(
,
)SKIP_HEADER = 整数
スキップするファイルの先頭の行数。
SKIP_HEADER は RECORD_DELIMITER または FIELD_DELIMITER の値を使用してヘッダー行を決定しないことに注意してください。むしろ、指定された数の CRLF (キャリッジリターン、ラインフィード)で区切られたファイル内の行を単にスキップします。ロードするデータの行を決定するのには、RECORD_DELIMITER および FIELD_DELIMITER が使用されます。
デフォルト:
0
SKIP_BLANK_LINES = TRUE | FALSE
- 使用
データのロードのみ
- 定義
データファイルで検出された空白行をスキップすることを指定するブール値。それ以外の場合は、空白行はレコード終了エラーを生成します(デフォルトの動作)。
デフォルト:
FALSE
TYPE = JSON¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
ロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
メモ
AUTO
現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTO
ではなくBROTLI
を明示的に使用してください。GZIP
BZ2
BROTLI
ZSTD
DEFLATE
Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE
生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONE
データをロードするためのファイルが圧縮されていないことを示します。
デフォルト:
AUTO
TYPE = AVRO¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
ロードするデータファイルの現在の圧縮アルゴリズムを指定する文字列(定数)。Snowflakeはこのオプションを使用して、ファイル内の圧縮データをロード用に抽出できるように、 圧縮済み データファイルの圧縮方法を検出します。
サポートされる値
メモ
AUTO
現在は自動検出できないBrotliで圧縮されたファイルを除き、圧縮アルゴリズムは自動的に検出されます。Brotliで圧縮されたファイルをロードする場合は、
AUTO
ではなくBROTLI
を明示的に使用してください。GZIP
BZ2
BROTLI
ZSTD
DEFLATE
Deflate圧縮されたファイル(zlibヘッダー、 RFC1950を使用)。
RAW_DEFLATE
生Deflate圧縮ファイル(ヘッダーなし、 RFC1951)。
NONE
ロードするデータファイルは圧縮されていません。
デフォルト:
AUTO
TYPE = ORC¶
N/A
TYPE = PARQUET¶
COMPRESSION = AUTO | SNAPPY | NONE
Parquetファイルの列にある現在の圧縮アルゴリズムを指定する文字列(定数)。
サポートされる値
メモ
AUTO
圧縮アルゴリズムが自動的に検出されました。対応する圧縮アルゴリズム:Brotli、gzip、Lempel–Ziv–Oberhumer(LZO)、LZ4、Snappy、またはZstandard v0.8(およびそれ以上)。
SNAPPY
NONE
ロードするデータファイルは圧縮されていません。
デフォルト:
AUTO
TYPE = XML¶
N/A
使用上の注意¶
外部テーブルは、外部(つまり、S3、Azure、または GCS)ステージのみをサポートします。内部(つまり、Snowflake)ステージはサポートされていません。
すべての外部テーブルには、タイプ VARIANTの VALUE という名前の列があります。追加の列が指定される場合があります。すべての列は仮想列として扱われます。
VALUE列は、CSVデータファイル内の行を、列位置によって識別される要素を持つJSONオブデータファイルジェクトとして構成します(例:
{c1: col_1_value, c2: col_2_value, c3: col_3_value ...}
)。
Snowflakeは、外部テーブルに整合性制約を適用しません。特に、通常のテーブルとは異なり、SnowflakeはNOT NULL制約を適用しません。
外部テーブルには、次のメタデータ列が含まれます。
METADATA$FILENAME :外部テーブルに含まれる各ステージングデータファイルの名前。そのステージでのデータファイルへのパスが含まれます。
次は外部テーブルではサポートされていません。
クラスタリングキー
クローニング
XML 形式のデータ
Time Travelは外部テーブルではサポートされていません。
例¶
単純な外部テーブル¶
Parquetデータファイルのセットがが保存されている保存場所に
mystage
という名前の外部ステージを作成します。詳細については、 CREATE STAGE をご参照ください。Amazon S3
mybucket
という名前のプライベート/保護されたS3バケットと、files
という名前のフォルダーパスを使用して外部ステージを作成します。CREATE OR REPLACE STAGE mystage URL='s3://mybucket/files/' .. ;
Google Cloud Storage
files
という名前のフォルダーパスで、mybucket
という名前のGoogle Cloud Storageコンテナーを使用して外部ステージを作成します。CREATE OR REPLACE STAGE mystage URL='gcs://mybucket/files' .. ;
Microsoft Azure
myaccount
という名前のAzureストレージアカウントと、files
という名前のフォルダーパスを持つmycontainer
という名前のコンテナーを使用して、外部ステージを作成します。CREATE OR REPLACE STAGE mystage URL='azure://myaccount.blob.core.windows.net/mycontainer/files' .. ;
注釈
Data Lake Storage Gen2を含む、サポートされているすべてのタイプのAzure BLOBストレージアカウントに、
blob.core.windows.net
エンドポイントを使用します。mystage
外部ステージのParquetファイルを参照する、ext_twitter_feed
という名前の外部テーブルを作成します。ステージ参照には、daily
という名前のフォルダーパスが含まれています。外部テーブルはステージ定義にこのパスを追加します。つまり、外部テーブルは@mystage/files/daily
のデータファイルを参照します。SQL コマンドは、ファイル形式タイプとしてParquetを指定します。さらに、ファイルパターンマッチングが適用され、名前に文字列
sales
が含まれるParquetファイルのみが含まれます。Amazon S3
CREATE OR REPLACE EXTERNAL TABLE ext_twitter_feed WITH LOCATION = @mystage/daily/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET) PATTERN='.*sales.*[.]parquet';
Google Cloud Storage
CREATE OR REPLACE EXTERNAL TABLE ext_twitter_feed WITH LOCATION = @mystage/daily/ FILE_FORMAT = (TYPE = PARQUET) PATTERN='.*sales.*[.]parquet';
Microsoft Azure
CREATE OR REPLACE EXTERNAL TABLE ext_twitter_feed INTEGRATION = 'MY_AZURE_INT' WITH LOCATION = @mystage/daily/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET) PATTERN='.*sales.*[.]parquet';
外部テーブルのメタデータを更新します。
ALTER EXTERNAL TABLE ext_twitter_feed REFRESH;
パーティション化された外部テーブル¶
ステージパスの論理的で詳細な詳細によってデータをパーティション化するパーティション化された外部テーブルを作成します。
次の例では、データファイルは次の構造でクラウドストレージに編成されています。 logs/YYYY/MM/DD/HH24
、例:
logs/2018/08/05/0524/
logs/2018/08/27/1408/
データファイルが保存されている保存場所に
exttable_part_stage
という名前の外部ステージを作成します。詳細については、 CREATE STAGE をご参照ください。ステージ定義にはパス
/files/logs/
が含まれます。Amazon S3
CREATE STAGE exttable_part_stage URL='s3://mybucket/files/logs/' .. ;
Google Cloud Storage
CREATE STAGE exttable_part_stage URL='gcs://mybucket/files/logs/' .. ;
Microsoft Azure
CREATE STAGE exttable_part_stage URL='azure://mycontainer/files/logs/' .. ;
ステージングされたデータの METADATA$FILENAME 疑似列をクエリします。結果を使用して、パーティション列を作成します。
SELECT metadata$filename FROM @exttable_part_stage/; +----------------------------------------+ | METADATA$FILENAME | |----------------------------------------| | files/logs/2018/08/05/0524/log.parquet | | files/logs/2018/08/27/1408/log.parquet | +----------------------------------------+
パーティション化された外部テーブルを作成します。
パーティション列
date_part
は、 METADATA$FILENAME 疑似列のYYYY/MM/DD
を TO_DATE , DATE を使用して日付としてキャストします。SQL コマンドは、ファイル形式タイプとしてParquetも指定します。
Amazon S3
CREATE EXTERNAL TABLE exttable_part( date_part date AS TO_DATE(SPLIT_PART(metadata$filename, '/', 3) || '/' || SPLIT_PART(metadata$filename, '/', 4) || '/' || SPLIT_PART(metadata$filename, '/', 5), 'YYYY/MM/DD'), timestamp bigint AS (value:timestamp::bigint), col2 varchar AS (value:col2::varchar)) PARTITION BY (date_part) LOCATION=@exttable_part_stage/logs/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET);
Google Cloud Storage
CREATE EXTERNAL TABLE exttable_part( date_part date AS TO_DATE(SPLIT_PART(metadata$filename, '/', 3) || '/' || SPLIT_PART(metadata$filename, '/', 4) || '/' || SPLIT_PART(metadata$filename, '/', 5), 'YYYY/MM/DD'), timestamp bigint AS (value:timestamp::bigint), col2 varchar AS (value:col2::varchar)) PARTITION BY (date_part) LOCATION=@exttable_part_stage/logs/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET);
Microsoft Azure
CREATE EXTERNAL TABLE exttable_part( date_part date AS TO_DATE(SPLIT_PART(metadata$filename, '/', 3) || '/' || SPLIT_PART(metadata$filename, '/', 4) || '/' || SPLIT_PART(metadata$filename, '/', 5), 'YYYY/MM/DD'), timestamp bigint AS (value:timestamp::bigint), col2 varchar AS (value:col2::varchar)) PARTITION BY (date_part) INTEGRATION = 'MY_INT' LOCATION=@exttable_part_stage/logs/ AUTO_REFRESH = true FILE_FORMAT = (TYPE = PARQUET);
外部テーブルのメタデータを更新します。
ALTER EXTERNAL TABLE exttable_part REFRESH;
外部テーブルをクエリする場合、 WHERE 句を使用してパーティション列でデータをフィルタリングします。
SELECT timestamp, col2 FROM exttable_part WHERE date_part = to_date('08/05/2018');
単純な外部テーブル: AUTO_REFRESH Amazonの使用 SNS¶
Amazon SNS から受信したイベント通知によってトリガーされたときにメタデータが自動的に更新される、現在のスキーマにパーティション化されていない外部テーブルを作成します。
CREATE OR REPLACE EXTERNAL TABLE ext_table
WITH LOCATION = @mystage/path1/
FILE_FORMAT = (TYPE = JSON)
AWS_SNS_TOPIC = 'arn:aws:sns:us-west-2:001234567890:s3_mybucket';
外部テーブルのマテリアライズドビュー¶
パーティション化された外部テーブル の例で作成された外部テーブルの列のサブクエリに基づいて、マテリアライズドビューを作成します。
CREATE MATERIALIZED VIEW exttable_part_mv
AS
SELECT col2 FROM exttable_part;
この SQL コマンドの一般的な構文、使用上の注意、およびその他の例については、 CREATE MATERIALIZED VIEW をご参照ください。