メインコンテンツまでスキップ
バージョン: 2.1

Export マニュアル

このドキュメントでは、Dorisに格納されたデータをエクスポートするためのEXPORTコマンドの使用方法について説明します。

Exportは、Dorisが提供するデータを非同期でエクスポートする機能です。この機能により、ユーザーが指定したTableやパーティションのデータを、指定されたファイル形式でオブジェクトストレージ、HDFS、またはローカルファイルシステムを含むターゲットストレージシステムにエクスポートできます。

Exportは非同期で実行されるコマンドです。コマンドが正常に実行されると、すぐに結果が返されます。ユーザーはShow Exportコマンドを通じてExportタスクの詳細情報を確認できます。

EXPORTコマンドの詳細については、EXPORTを参照してください。

SELECT INTO OUTFILEEXPORTの選択方法については、Export 概要を参照してください。

適用可能なシナリオ

Exportは以下のシナリオに適用できます:

  • 大量のデータを持つ単一Tableのエクスポートで、単純なフィルタリング条件のみが必要な場合。
  • タスクを非同期で実行する必要があるシナリオ。

Exportを使用する際は、以下の制限事項に注意してください:

  • 現在、圧縮されたテキストファイル形式でのエクスポートはサポートされていません。
  • Selectの結果セットのエクスポートはサポートされていません。Select結果セットをエクスポートする必要がある場合は、OUTFILE Exportを使用してください。

クイックスタート

Table作成とデータインポート

CREATE TABLE IF NOT EXISTS tbl (
`c1` int(11) NULL,
`c2` string NULL,
`c3` bigint NULL
)
DISTRIBUTED BY HASH(c1) BUCKETS 20
PROPERTIES("replication_num" = "1");


insert into tbl values
(1, 'doris', 18),
(2, 'nereids', 20),
(3, 'pipelibe', 99999),
(4, 'Apache', 122123455),
(5, null, null);

Export Jobの作成

HDFSへのExport

tblTableからすべてのデータをHDFSにエクスポートします。エクスポートジョブのファイル形式をcsv(デフォルト形式)に設定し、列区切り文字を,に設定します。

EXPORT TABLE tbl
TO "hdfs://host/path/to/export/"
PROPERTIES
(
"line_delimiter" = ","
)
with HDFS (
"fs.defaultFS"="hdfs://hdfs_host:port",
"hadoop.username" = "hadoop"
);

Object Storageへのエクスポート

tblTable内のすべてのデータをobject storageにエクスポートし、エクスポートジョブのファイル形式をcsv(デフォルト形式)に設定し、列区切り文字を,に設定します。

EXPORT TABLE tbl TO "s3://bucket/export/export_" 
PROPERTIES (
"line_delimiter" = ","
) WITH s3 (
"s3.endpoint" = "xxxxx",
"s3.region" = "xxxxx",
"s3.secret_key"="xxxx",
"s3.access_key" = "xxxxx"
);

View Export Jobs

ジョブを送信した後、SHOW EXPORTコマンドを使用してエクスポートジョブのステータスを照会できます。結果の例は以下の通りです:

mysql> show export\G
*************************** 1. row ***************************
JobId: 143265
Label: export_0aa6c944-5a09-4d0b-80e1-cb09ea223f65
State: FINISHED
Progress: 100%
TaskInfo: {"partitions":[],"parallelism":5,"data_consistency":"partition","format":"csv","broker":"S3","column_separator":"\t","line_delimiter":"\n","max_file_size":"2048MB","delete_existing_files":"","with_bom":"false","db":"tpch1","tbl":"lineitem"}
Path: s3://bucket/export/export_
CreateTime: 2024-06-11 18:01:18
StartTime: 2024-06-11 18:01:18
FinishTime: 2024-06-11 18:01:31
Timeout: 7200
ErrorMsg: NULL
OutfileInfo: [
[
{
"fileNumber": "1",
"totalRows": "6001215",
"fileSize": "747503989",
"url": "s3://bucket/export/export_6555cd33e7447c1-baa9568b5c4eb0ac_*"
}
]
]
1 row in set (0.00 sec)

show export コマンドの詳細な使用方法と返される結果の各列の意味については、SHOW EXPORTを参照してください。

Export ジョブのキャンセル

Export ジョブを送信した後、Export タスクが成功または失敗する前に、CANCEL EXPORT コマンドを使用してエクスポートジョブをキャンセルできます。キャンセルコマンドの例は以下の通りです:

CANCEL EXPORT FROM dbName WHERE LABEL like "%export_%";

Export手順

Exportデータソース

EXPORTは現在、以下のタイプのTableまたはビューのエクスポートをサポートしています:

  • DorisのInternalTable
  • DorisのLogicalビュー
  • 外部カタログのTable

Exportデータ保存場所

Exportは現在、以下の保存場所へのエクスポートをサポートしています:

  • オブジェクトストレージ: Amazon S3、COS、OSS、OBS、Google GCS
  • HDFS

Exportファイルタイプ

EXPORTは現在、以下のファイル形式へのエクスポートをサポートしています:

  • Parquet
  • ORC
  • csv
  • csv_with_names
  • csv_with_names_and_types

高可用性が有効なHDFSクラスターへのExport

HDFSで高可用性が有効になっている場合、HA情報を提供する必要があります。例:

EXPORT TABLE tbl 
TO "hdfs://HDFS8000871/path/to/export_"
PROPERTIES
(
"line_delimiter" = ","
)
with HDFS (
"fs.defaultFS" = "hdfs://HDFS8000871",
"hadoop.username" = "hadoop",
"dfs.nameservices" = "your-nameservices",
"dfs.ha.namenodes.your-nameservices" = "nn1,nn2",
"dfs.namenode.rpc-address.HDFS8000871.nn1" = "ip:port",
"dfs.namenode.rpc-address.HDFS8000871.nn2" = "ip:port",
"dfs.client.failover.proxy.provider.HDFS8000871" = "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
);

高可用性とKerberos認証が有効なHDFSクラスターへのエクスポート

HDFSクラスターで高可用性とKerberos認証の両方が有効になっている場合は、以下のSQLステートメントを参照してください:

EXPORT TABLE tbl 
TO "hdfs://HDFS8000871/path/to/export_"
PROPERTIES
(
"line_delimiter" = ","
)
with HDFS (
"fs.defaultFS"="hdfs://hacluster/",
"hadoop.username" = "hadoop",
"dfs.nameservices"="hacluster",
"dfs.ha.namenodes.hacluster"="n1,n2",
"dfs.namenode.rpc-address.hacluster.n1"="192.168.0.1:8020",
"dfs.namenode.rpc-address.hacluster.n2"="192.168.0.2:8020",
"dfs.client.failover.proxy.provider.hacluster"="org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider",
"dfs.namenode.kerberos.principal"="hadoop/_HOST@REALM.COM"
"hadoop.security.authentication"="kerberos",
"hadoop.kerberos.principal"="doris_test@REALM.COM",
"hadoop.kerberos.keytab"="/path/to/doris_test.keytab"
);

Export用のパーティション指定

Export ジョブは、Dorisの内部Tableの一部のパーティションのみをエクスポートすることをサポートしています。例えば、testTableのパーティションp1とp2のみをエクスポートします。

EXPORT TABLE test
PARTITION (p1,p2)
TO "s3://bucket/export/export_"
PROPERTIES (
"columns" = "k1,k2"
) WITH s3 (
"s3.endpoint" = "xxxxx",
"s3.region" = "xxxxx",
"s3.secret_key"="xxxx",
"s3.access_key" = "xxxxx"
);

エクスポート時のデータフィルタリング

エクスポートジョブは、エクスポート処理中に述語条件に従ってデータをフィルタリングし、条件を満たすデータのみをエクスポートすることをサポートしています。例えば、k1 < 50という条件を満たすデータのみをエクスポートします。

EXPORT TABLE test
WHERE k1 < 50
TO "s3://bucket/export/export_"
PROPERTIES (
"columns" = "k1,k2",
"column_separator"=","
) WITH s3 (
"s3.endpoint" = "xxxxx",
"s3.region" = "xxxxx",
"s3.secret_key"="xxxx",
"s3.access_key" = "xxxxx"
);

Export External Table Data

Export ジョブは 外部カタログ 内のTableのデータをサポートします。

-- Create a hive catalog
CREATE CATALOG hive_catalog PROPERTIES (
'type' = 'hms',
'hive.metastore.uris' = 'thrift://172.0.0.1:9083'
);

-- Export hive table
EXPORT TABLE hive_catalog.sf1.lineitem TO "s3://bucket/export/export_"
PROPERTIES(
"format" = "csv",
"max_file_size" = "1024MB"
) WITH s3 (
"s3.endpoint" = "xxxxx",
"s3.region" = "xxxxx",
"s3.secret_key"="xxxx",
"s3.access_key" = "xxxxx"
);

エクスポート前にエクスポートディレクトリをクリアする

EXPORT TABLE test TO "s3://bucket/export/export_"
PROPERTIES (
"format" = "parquet",
"max_file_size" = "512MB",
"delete_existing_files" = "true"
) WITH s3 (
"s3.endpoint" = "xxxxx",
"s3.region" = "xxxxx",
"s3.secret_key"="xxxx",
"s3.access_key" = "xxxxx"
);

"delete_existing_files" = "true"が設定されている場合、エクスポートジョブは最初にs3://bucket/export/ディレクトリ下のすべてのファイルとディレクトリを削除し、その後このディレクトリにデータをエクスポートします。

delete_existing_filesパラメータを使用したい場合は、fe.confで設定enable_delete_existing_files = trueを追加し、FEを再起動する必要があります。その後でのみdelete_existing_filesが有効になります。この操作は外部システムのデータを削除するため、高リスクな操作です。外部システムの権限とデータセキュリティについては、ご自身で確保してください。

エクスポートファイルのサイズ設定

エクスポートジョブは、エクスポートファイルのサイズ設定をサポートしています。単一ファイルのサイズが設定値を超える場合、指定されたサイズに応じて複数のファイルに分割してエクスポートされます。

EXPORT TABLE test TO "s3://bucket/export/export_"
PROPERTIES (
"format" = "parquet",
"max_file_size" = "512MB"
) WITH s3 (
"s3.endpoint" = "xxxxx",
"s3.region" = "xxxxx",
"s3.secret_key"="xxxx",
"s3.access_key" = "xxxxx"
);

"max_file_size" = "512MB"を設定することで、エクスポートされる単一ファイルの最大サイズが512MBになります。

max_file_sizeは5MB未満にすることはできず、2GBを超えることもできません。

バージョン2.1.11と3.0.7では、2GBの最大制限が削除され、5MBの最小制限のみが残されました。

注意事項

  • エクスポートデータ量

    一度に大量のデータをエクスポートすることは推奨されません。Exportジョブの推奨最大エクスポートデータ量は数十ギガバイトです。過度なエクスポートは、より多くのジャンクファイルとより高い再試行コストを招きます。Tableデータ量が大きすぎる場合は、パーティションごとにエクスポートすることを推奨します。

    また、Exportジョブはデータをスキャンし、IOリソースを占有するため、システムのクエリレイテンシに影響を与える可能性があります。

  • エクスポートファイル管理

    Exportジョブが失敗した場合、すでに生成されたファイルは削除されず、ユーザーが手動で削除する必要があります。

  • エクスポートタイムアウト

    エクスポートされるデータ量が非常に大きく、エクスポートタイムアウト期間を超える場合、Exportタスクは失敗します。この場合、Exportコマンドでtimeoutパラメータを指定してタイムアウト期間を延長し、Exportコマンドを再実行できます。

  • エクスポート失敗

    Exportジョブの実行中に、FEが再起動またはマスターを切り替える場合、Exportジョブは失敗し、ユーザーが再提出する必要があります。show exportコマンドでExportタスクのステータスを確認できます。

  • エクスポートパーティション数

    Export Jobでエクスポートが許可されるパーティションの最大数は2000です。fe.confでmaximum_number_of_export_partitionsパラメータを追加し、FEを再起動してこの設定を変更できます。

  • データ整合性

    エクスポート操作が完了した後、エクスポートされたデータが完全で正確かどうかを検証し、データの品質と整合性を確保することを推奨します。

付録

基本原理

Exportタスクの基盤層はSELECT INTO OUTFILE SQL文を実行します。ユーザーがExportタスクを開始すると、DorisはExportでエクスポートされるTableに応じて1つ以上のSELECT INTO OUTFILE実行プランを構築し、これらのSELECT INTO OUTFILE実行プランをDorisのJob Scheduleタスクスケジューラに提出します。Job Scheduleタスクスケジューラは、これらのタスクを自動的にスケジュールして実行します。

ローカルファイルシステムへのエクスポート

ローカルファイルシステムへのエクスポート機能は、デフォルトで無効になっています。この機能はローカルでのデバッグと開発にのみ使用され、本番環境では使用すべきではありません。

この機能を有効にする場合は、fe.confenable_outfile_to_local=trueを追加し、FEを再起動してください。

例:tblTableのすべてのデータをローカルファイルシステムにエクスポートし、エクスポートジョブのファイル形式をcsv(デフォルト形式)に設定し、列区切り文字を,に設定します。

EXPORT TABLE tbl TO "file:///path/to/result_"
PROPERTIES (
"format" = "csv",
"line_delimiter" = ","
);

この関数は、BEが配置されているノードのディスクにデータをエクスポートして書き込みます。複数のBEノードが存在する場合、データはエクスポートタスクの並行性に応じて異なるBEノード上に分散され、各ノードはデータの一部を保持することになります。

この例のように、最終的にBEノードの/path/to/の下にresult_7052bac522d840f5-972079771289e392_0.csvのようなファイルセットが生成されます。

特定のBEノードのIPは、SHOW EXPORT結果のOutfileInfo列で確認できます。例えば:

[
[
{
"fileNumber": "1",
"totalRows": "0",
"fileSize": "8388608",
"url": "file:///172.20.32.136/path/to/result_7052bac522d840f5-972079771289e392_*"
}
],
[
{
"fileNumber": "1",
"totalRows": "0",
"fileSize": "8388608",
"url": "file:///172.20.32.137/path/to/result_22aba7ec933b4922-ba81e5eca12bf0c2_*"
}
]
]
注意

この関数は本番環境には適用されません。エクスポートディレクトリの権限とデータセキュリティについては、ご自身で確保してください。