データエクスポートの概要
データエクスポート機能は、クエリ結果セットまたは Apache Doris のテーブルデータを、指定したファイル形式で指定したストレージシステムに書き出します。主に結果セットのダウンロードやシステム間のデータ交換に使用します。
データエクスポートとデータバックアップの違い
データエクスポートとデータバックアップは、どちらも Apache Doris から外部ストレージにデータを出力できますが、対象とする用途が異なります。主な違いを以下の表に示します。
| 比較項目 | データエクスポート | データバックアップ |
|---|---|---|
| 最終的な保存先 | HDFS、オブジェクトストレージ、ローカルファイルシステム | HDFS、オブジェクトストレージ |
| データ形式 | Parquet、ORC、CSV などのオープンな形式 | Apache Doris の内部ストレージ形式 |
| 実行速度 | 中程度(データの読み取りと目的の形式への変換が必要) | 高速(Doris のデータファイルを直接アップロードし、解析や変換は不要) |
| 柔軟性 | SQL によりエクスポート範囲を柔軟に指定できる | テーブル単位の完全バックアップのみをサポート |
| 主な用途 | 結果セットのダウンロード、異なるシステム間でのデータ交換 | データバックアップ、Apache Doris クラスター間のデータ移行 |
エクスポート方法の選択
Apache Doris には、用途に応じて選べる次の3つのデータエクスポート方法があります。
- SELECT INTO OUTFILE:任意の SQL 結果セットをエクスポートできます。
- EXPORT:テーブル単位でデータの一部または全部をエクスポートできます。
- MySQL DUMP:MySQL Dump コマンドと互換性のあるデータエクスポート方法です。
3つの方法の機能比較
次の表では、実行方式、SQL の機能、同時実行、対応形式について3つのエクスポート方法を比較します。
| 比較項目 | SELECT INTO OUTFILE | EXPORT | MySQL DUMP |
|---|---|---|---|
| 同期/非同期 | 同期 | 非同期(送信後、SHOW EXPORT で進捗を確認) | 同期 |
| 任意の SQL に対応 | 対応 | 非対応 | 非対応 |
| 指定したパーティションのエクスポート | 対応 | 対応 | 非対応 |
| 指定したタブレットのエクスポート | 対応 | 非対応 | 非対応 |
| 同時エクスポート | 対応、高い同時実行性(ORDER BY などの単一ノードのオペレーターによる制約あり) | 対応、高い同時実行性(タブレット単位で同時実行) | 非対応、シングルスレッドでエクスポート |
| 対応するエクスポート形式 | Parquet、ORC、CSV | Parquet、ORC、CSV | MySQL Dump 独自形式 |
| 外部テーブルに対応 | 対応 | 一部対応 | 非対応 |
| ビューに対応 | 対応 | 対応 | 対応 |
| 対応するエクスポート先 | S3、HDFS | S3、HDFS | LOCAL |
適した用途
SELECT INTO OUTFILE
次の用途に適しています。
- エクスポートするデータに、フィルタリング、集計、結合などの複雑な計算が必要な場合。
- 同期タスクの実行が適している場合。
詳しい使い方は SELECT INTO OUTFILE を参照してください。
EXPORT
次の用途に適しています。
- 単純なフィルター条件だけで大量のデータを単一テーブルからエクスポートする場合。
- 非同期でタスクを送信する必要がある場合。
詳しい使い方は 非同期エクスポート を参照してください。
MySQL Dump
次の用途に適しています。
- MySQL エコシステムとの互換性が必要で、テーブルスキーマとデータの両方をエクスポートする場合。
- 開発、テスト、またはデータ量がごく少ない場合に限って使用する場合。
詳しい使い方は MySQL Dump を参照してください。
エクスポートファイルの列型マッピング
Parquet と ORC のファイル形式にはそれぞれ独自のデータ型定義があり、Apache Doris はエクスポート時に内部データ型を対応する Parquet/ORC 型に自動変換します。CSV には型定義がなく、すべてのデータがテキストとして出力されます。
Apache Doris のデータ型と ORC および Parquet の形式との対応関係を以下に示します。
UUID 値が36文字の小文字の正規形式テキストとしてエクスポートされるのは、CSV の場合のみです。Parquet では、UUID 列は Parquet の UUID 論理型アノテーションが付いた FIXED_LEN_BYTE_ARRAY(16) として、正規のビッグエンディアンのバイト順で書き込まれます。ORC には標準の UUID 型がないため、UUID 列は Doris 固有の doris.logical_type=uuid 属性が付いた BINARY として書き込まれます。ARRAY、MAP、STRUCT にネストされた UUID 要素も、最上位の列と同じ表現を使用します。Doris が書き込んだ ORC ファイル、または UUID 論理型アノテーションが付いた Parquet ファイルをテーブル値関数で再読み込みすると、dev ではネイティブの UUID 型が復元されます。Iceberg の UUID フィールドへの書き込みには、Iceberg の列型マッピングが適用されます。
ORC 型マッピング
| Doris 型 | ORC 型 |
|---|---|
| boolean | boolean |
| tinyint | tinyint |
| smallint | smallint |
| int | int |
| bigint | bigint |
| largeInt | string |
| date | string |
| datev2 | date |
| datetime | string |
| datetimev2 | timestamp |
| timestamptz | timestamp with local time zone(ORC TIMESTAMP_INSTANT。4.1.5 以降、時点の意味を保持) |
| varbinary | binary |
| float | float |
| double | double |
| char / varchar / string | string |
| uuid | binary |
| decimal | decimal |
| struct | struct |
| map | map |
| array | array |
| json | string |
| variant | string |
| bitmap | binary |
| quantile_state | binary |
| hll | binary |
Parquet 型マッピング
Apache Doris が Parquet ファイル形式にエクスポートする際は、まずメモリ上の Doris データを Arrow のメモリ内形式に変換し、その後 Arrow が Parquet ファイルに書き出します。対応関係は次のとおりです。
| Doris 型 | Arrow 型 | Parquet 物理型 | Parquet 論理型 |
|---|---|---|---|
| boolean | boolean | BOOLEAN | |
| tinyint | int8 | INT32 | INT_8 |
| smallint | int16 | INT32 | INT_16 |
| int | int32 | INT32 | INT_32 |
| bigint | int64 | INT64 | INT_64 |
| largeInt | utf8 | BYTE_ARRAY | UTF8 |
| date | utf8 | BYTE_ARRAY | UTF8 |
| datev2 | date32 | INT32 | DATE |
| datetime | utf8 | BYTE_ARRAY | UTF8 |
| datetimev2 | timestamp | INT96 / INT64 | TIMESTAMP(MICROS/MILLIS/SECONDS) |
| float | float32 | FLOAT | |
| double | float64 | DOUBLE | |
| char / varchar / string | utf8 | BYTE_ARRAY | UTF8 |
| uuid | fixed_size_binary(16) | FIXED_LEN_BYTE_ARRAY | UUID |
| decimal | decimal128 | FIXED_LEN_BYTE_ARRAY | DECIMAL(scale, precision) |
| struct | struct | Parquet Group | |
| map | map | Parquet Map | |
| array | list | Parquet List | |
| json | utf8 | BYTE_ARRAY | UTF8 |
| variant | utf8 | BYTE_ARRAY | UTF8 |
| bitmap | binary | BYTE_ARRAY | |
| quantile_state | binary | BYTE_ARRAY | |
| hll | binary | BYTE_ARRAY |
Parquet Export と Outfile では、enable_int96_timestamps プロパティを使用して Doris の DATETIMEV2 値の物理エンコーディングを選択します。デフォルトは false で、Parquet の timestamp 論理型が付いた INT64 として書き込みます。Hive 2 や Hive 3 など、古い下流のリーダーで必要な場合に限り、true に設定して非推奨の INT96 エンコーディングで書き込みます。非同期 Export では、このプロパティをエクスポートジョブとともに保存し、ジョブ実行時に適用します。明示的にエクスポートした INT96 ファイルを後で Doris が読み込む場合、FileScannerV2 が元の壁時計時刻の値を復元できるよう、Hive Catalog またはファイルのテーブル値関数で hive.parquet.time-zone をエクスポートセッションのタイムゾーンに設定してください。このデフォルトは 4.1.5 以降に適用され、プロパティに指定できる値は true または false のみです。
関連ドキュメント
- 非同期エクスポート:
EXPORTコマンドを使用して、テーブルまたはパーティションのデータを非同期にエクスポートします。 - SELECT INTO OUTFILE:
SELECT INTO OUTFILEを使用して、クエリ結果を同期的にエクスポートします。 - MySQL Dump:
mysqldumpツールを使用して、テーブルスキーマとデータをエクスポートします。 - データエクスポートのベストプラクティス:エクスポートの同時実行数の調整と、エクスポート速度の評価方法を説明します。