クエリと変換
TiDB Cloud Lake は、データを最初にテーブルへロード (load) せずに、stage 上のファイルを直接クエリできます。任意の stage タイプ(ユーザー、内部、外部)のファイル、またはオブジェクトストレージや HTTPS URL を直接クエリできます。ロードの前後におけるデータの確認、検証、変換に最適です。
構文
クエリのみ:
SELECT {
[<alias>.]<column> [, [<alias>.]<column> ...] -- Query columns by name
| [<alias>.]$<col_position> [, [<alias>.]$<col_position> ...] -- Query columns by position
| [<alias>.]$1[:<column>] [, [<alias>.]$1[:<column>] ...] -- Query rows as Variants
}
FROM {@<stage_name>[/<path>] | '<uri>'} -- stage table function
[( -- stage table function parameters
[<connection_parameters>],
[ PATTERN => '<regex_pattern>'],
[ FILE_FORMAT => 'CSV | TSV | NDJSON | PARQUET | ORC | Avro | <custom_format_name>'],
[ FILES => ( '<file_name>' [ , '<file_name>' ... ])],
[ CASE_SENSITIVE => true | false ]
)]
[<alias>]
変換を伴うコピー:
COPY INTO [<database_name>.]<table_name> [ ( <col_name> [ , <col_name> ... ] ) ]
FROM (
SELECT {
[<alias>.]<column> [, [<alias>.]<column> ...] -- Query columns by name
| [<alias>.]$<col_position> [, [<alias>.]$<col_position> ...] -- Query columns by position
| [<alias>.]$1[:<column>] [, [<alias>.]$1[:<column>] ...] -- Query rows as Variants
} ]
FROM {@<stage_name>[/<path>] | '<uri>'}
)
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = (
FORMAT_NAME = '<your-custom-format>'
| TYPE = { CSV | TSV | NDJSON | PARQUET | ORC | AVRO } [ formatTypeOptions ]
) ]
[ copyOptions ]
FROM 句
FROM 句は Table Function と似た構文を使用します。通常のテーブルと同様に、他のテーブルと join する際にはテーブル alias を使用できます。
テーブル関数のパラメータ:
ファイルデータのクエリ
select list は 3 つの構文をサポートしており、使用できるのはそのうち 1 つだけです。混在させることはできません。
行を Variants としてクエリ
- サポートされるファイル形式: NDJSON, AVRO, Parquet, ORC
構文:
SELECT [<alias>.]$1[:<column>] [, [<alias>.]$1[:<column>] ...] <FROM Clause>
- 例:
SELECT $1:id, $1:name FROM ... - テーブルスキーマ: ($1: Variant)。つまり、Variant Object Type の単一カラムで、各 Variant が行全体を表します
- 注意:
$1:columnのようなパス式の型も Variant です。式で使用したり、宛先テーブルのカラムへロードしたりする際にはネイティブ型へ自動キャストできますが、型固有の操作では、意味をより明確にするために事前に手動でキャストしたい場合があります(例:CAST($1:id AS INT))。
名前でカラムをクエリ
- サポートされるファイル形式: NDJSON, AVRO, Parquet, ORC
SELECT [<alias>.]<column> [, [<alias>.]<column> ...] <FROM Clause>
- 例:
SELECT id, name FROM ... - テーブルスキーマ: Parquet または ORC ファイルスキーマからマッピングされたカラム
- 注意:
- すべてのファイルは同じ Parquet/ORC スキーマを持っている必要があります。そうでない場合はエラーが返されます
位置でカラムをクエリ
- サポートされるファイル形式: CSV, TSV
SELECT [<alias>.]$<col_position>[, [<alias>.]$<col_position>, ...] <FROM Clause>
- 例:
SELECT $1, $2 FROM ... - テーブルスキーマ: 型
VARCHAR NULLのカラム - 注意
<col_position>は 1 から始まります
メタデータのクエリ
クエリにはファイルメタデータを含めることもできます。これは、データリネージの追跡やデバッグに役立ちます。
SELECT METADATA$FILENAME, METADATA$FILE_ROW_NUMBER, $1, <FROM Clause>
(
FILE_FORMAT => 'ndjson_query_format',
PATTERN => '.*[.]ndjson'
);
サポートされるファイル形式では、次のファイルレベルのメタデータフィールドを利用できます。
ユースケース:
- データリネージ: 各レコードに寄与したソースファイルを追跡する
- デバッグ: ファイル名と行番号で問題のあるレコードを特定する
- 増分処理: 特定のファイル、またはファイル内の特定範囲のみを処理する
ファイル形式別チュートリアル
Schema Evolution
- Schema Evolution: スキーマが変化する Parquet ファイルをロードする際に、新しいカラムをテーブルへ自動的に追加します。