stage 内の Avro ファイルのクエリ
構文
Avro クエリ機能の概要
TiDB Cloud Lake は、stage から直接 Avro ファイルをクエリするための包括的なサポートを提供します。これにより、データを最初にテーブルへロードすることなく、柔軟にデータの探索や変換を行えます。
- Variant 表現: Avro ファイル内の各行は variant として扱われ、
$1で参照されます。これにより、Avro データ内のネストされた構造へ柔軟にアクセスできます。 - 型マッピング: 各 Avro 型は、TiDB Cloud Lake 内の対応する variant 型にマッピングされます。
- メタデータアクセス:
METADATA$FILENAMEやMETADATA$FILE_ROW_NUMBERのようなメタデータカラムにアクセスして、ソースファイルや行に関する追加のコンテキストを取得できます。
チュートリアル
このチュートリアルでは、stage に保存された Avro ファイルをクエリする方法を示します。
ステップ 1. Avro ファイルを準備する
user という名前の次のスキーマを持つ Avro ファイルを考えます。
{
"type": "record",
"name": "user",
"fields": [
{
"name": "id",
"type": "long"
},
{
"name": "name",
"type": "string"
}
]
}
ステップ 2. 外部 stage を作成する
Avro ファイルが保存されている独自の S3 バケットと認証情報を使用して、外部 stage を作成します。
CREATE STAGE avro_query_stage
URL = 's3://load/avro/'
CONNECTION = (
ACCESS_KEY_ID = '<your-access-key-id>'
SECRET_ACCESS_KEY = '<your-secret-access-key>'
);
ステップ 3. Avro ファイルをクエリする
基本的なクエリ
stage から直接 Avro ファイルをクエリします。
SELECT
CAST($1:id AS INT) AS id,
$1:name AS name
FROM @avro_query_stage
(
FILE_FORMAT => 'AVRO',
PATTERN => '.*[.]avro'
);
メタデータ付きでクエリする
METADATA$FILENAME や METADATA$FILE_ROW_NUMBER のようなメタデータカラムを含めて、stage から直接 Avro ファイルをクエリします。
SELECT
METADATA$FILENAME,
METADATA$FILE_ROW_NUMBER,
CAST($1:id AS INT) AS id,
$1:name AS name
FROM @avro_query_stage
(
FILE_FORMAT => 'AVRO',
PATTERN => '.*[.]avro'
);
Variant への型マッピング
TiDB Cloud Lake の Variant は JSONB として保存されます。ほとんどの Avro 型はそのままマッピングされますが、いくつか特別な考慮事項があります。
- 時刻型:
TimeMillisとTimeMicrosは、JSONB にネイティブな Time 型がないため、INT64にマッピングされます。これらの値を処理する際は、元の型を認識しておく必要があります。 - Decimal 型: Decimal は
DECIMAL128またはDECIMAL256としてロードされます。精度がサポートされる上限を超える場合、エラーが発生することがあります。 - Enum 型: Avro の
ENUM型は、TiDB Cloud Lake ではSTRING値にマッピングされます。