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

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内のすべてのデータをオブジェクトストレージにエクスポートし、エクスポートジョブのファイル形式を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タスクが成功または失敗する前に、CANCEL EXPORTコマンドを使用してエクスポートジョブをキャンセルできます。キャンセルコマンドの例は以下の通りです:

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

Export Instructions

Export Data Sources

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

  • DorisのInternal tables
  • DorisのLogical views
  • 外部カタログのTables

Export Data Storage Locations

Exportは現在、以下のストレージロケーションへのエクスポートをサポートしています:

  • Object storage:Amazon S3、COS、OSS、OBS、Google GCS
  • HDFS

Export File Types

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

  • Parquet
  • ORC
  • csv
  • csv_with_names
  • csv_with_names_and_types

Examples

Export to an HDFS Cluster with High Availability Enabled

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"
);

High AvailabilityとKerberos認証が有効なHDFSクラスターへのエクスポート

HDFSクラスターでhigh availabilityと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 jobは、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"
);

Export時のデータフィルタリング

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

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"
);

外部Tableデータのエクスポート

エクスポートジョブは、外部カタログ内の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_*"
}
]
]
注意

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