メインコンテンツまでスキップ

Export data using EXPORT

EXPORTを使用してデータをエクスポートする

このトピックでは、StarRocksクラスタから指定されたテーブルまたはパーティションのデータをCSVデータファイルとして外部ストレージシステムにエクスポートする方法について説明します。外部ストレージシステムは、HDFSのような分散ファイルシステムまたはAWS S3などのクラウドストレージシステムである場合があります。

注意

StarRocksのテーブルからデータをエクスポートするには、StarRocksテーブルに対してEXPORT権限を持つユーザーとしてのみデータをエクスポートできます。EXPORT権限がない場合は、GRANTの手順に従って、StarRocksクラスタに接続するために使用するユーザーにEXPORT権限を付与してください。

背景情報

v2.4以前では、StarRocksはデータをエクスポートする際に、StarRocksクラスタと外部ストレージシステムの間の接続を確立するためにブローカーに依存していました。したがって、EXPORTステートメントで使用するブローカーを指定するためにWITH BROKER "<broker_name>"を入力する必要があります。これを「ブローカーベースのアンロード」と呼びます。ブローカーは、独立したステートレスなサービスであり、ファイルシステムインターフェースと統合されており、StarRocksがデータを外部ストレージシステムにエクスポートするのを支援します。

v2.5以降、StarRocksはデータをエクスポートする際に、StarRocksクラスタと外部ストレージシステムの間の接続を確立するためにブローカーに依存しなくなりました。したがって、EXPORTステートメントでブローカーを指定する必要はなくなりましたが、WITH BROKERキーワードは引き続き保持する必要があります。これを「ブローカーフリーアンロード」と呼びます。

ただし、データがHDFSに格納されている場合、ブローカーフリーアンロードは機能しない場合があり、ブローカーベースのアンロードに頼る必要があります。

  • 複数のHDFSクラスタにデータをエクスポートする場合は、各HDFSクラスタに独立したブローカーを展開および構成する必要があります。
  • 単一のHDFSクラスタにデータをエクスポートし、複数のKerberosユーザーを構成している場合は、独立したブローカーを展開する必要があります。

注意

SHOW BROKERステートメントを使用して、StarRocksクラスタに展開されているブローカーを確認できます。ブローカーが展開されていない場合は、ブローカーの展開の手順に従ってブローカーを展開できます。

サポートされるストレージシステム

  • 分散ファイルシステムHDFS
  • AWS S3などのクラウドストレージシステム

注意事項

  • 1回のエクスポートでエクスポートするデータ量は、数十GBを超えないことを推奨します。1回に非常に大量のデータをエクスポートすると、エクスポートが失敗する可能性があり、エクスポートの再試行コストが増加します。
  • ソースのStarRocksテーブルに大量のデータが含まれている場合は、テーブルの全データがエクスポートされるまで、テーブルの一部のパーティションからのみデータをエクスポートすることをお勧めします。
  • StarRocksクラスタのFEが再起動されるか、エクスポートジョブが実行中の新しいリーダーFEが選ばれると、エクスポートジョブは失敗します。この状況では、エクスポートジョブを再度送信する必要があります。
  • StarRocksクラスタのFEが再起動されるか、エクスポートジョブが終了した後に新しいリーダーFEが選ばれた場合、SHOW EXPORTステートメントによって返される一部のジョブ情報が失われる場合があります。
  • StarRocksはベーステーブルのデータのみをエクスポートします。StarRocksは、基本テーブルに作成されたマテリアライズドビューのデータはエクスポートしません。
  • エクスポートジョブにはデータスキャンが必要であり、I/Oリソースを占有し、クエリの待ち時間を増加させます。

ワークフロー

エクスポートジョブを提出すると、StarRocksはエクスポートジョブに関与するすべてのテーブレットを識別します。次に、StarRocksは関与するテーブレットをグループに分割し、クエリプランを生成します。クエリプランは、関与するテーブレットからデータを読み取り、指定された宛先ストレージシステムのパスにデータを書き込むために使用されます。

以下の図は一般的なワークフローを示しています。

img

一般的なワークフローは、次の3つのステップで構成されています。

  1. ユーザーはリーダーFEにエクスポートジョブを提出します。
  2. リーダーFEは、StarRocksクラスタのすべてのBEにsnapshot命令を発行し、BEがエクスポートするデータの整合性を確保するために関与するテーブレットのスナップショットを取得します。さらに、リーダーFEは複数のエクスポートタスクを生成します。各エクスポートタスクはクエリプランであり、各クエリプランは関与するテーブレットの一部を処理するために使用されます。
  3. リーダーFEはエクスポートタスクをBEに配布します。

原則

StarRocksがクエリプランを実行する際、まず宛先ストレージシステムの指定されたパスに__starrocks_export_tmp_xxxという名前の一時フォルダを作成します。一時フォルダの名前では、xxxはエクスポートジョブのIDを表します。一時フォルダの例としては、__starrocks_export_tmp_921d8f80-7c9d-11eb-9342-acde48001122という名前があります。StarRocksがクエリプランを正常に実行すると、一時フォルダに一時ファイルが生成され、エクスポートされたデータが生成された一時ファイルに書き込まれます。

すべてのデータがエクスポートされた後、StarRocksはRENAMEステートメントを使用して生成された一時ファイルを指定されたパスに保存します。

関連するパラメータ

このセクションでは、StarRocksクラスタのFEで設定できるいくつかのエクスポート関連のパラメータについて説明します。

  • export_checker_interval_second: エクスポートジョブがスケジュールされる間隔。デフォルトの間隔は5秒です。このパラメータをFEで再構成した後は、新しいパラメータ設定が有効になるように、FEを再起動する必要があります。
  • export_running_job_num_limit: 許可される実行中のエクスポートジョブの最大数。実行中のエクスポートジョブの数がこの制限を超える場合、過剰なエクスポートジョブはsnapshotの実行後に待機状態に入ります。デフォルトの最大数は5です。エクスポートジョブが実行されている場合にこのパラメータを再構成できます。
  • export_task_default_timeout_second: エクスポートジョブのタイムアウト期間。デフォルトのタイムアウト期間は2時間です。エクスポートジョブが実行されている場合にこのパラメータを再構成できます。
  • export_max_bytes_per_be_per_task: 各BEからエクスポートタスクごとにエクスポートできる最大データ量(圧縮されたまま)です。このパラメータに基づいて、StarRocksは同時に実行できるエクスポートタスクにエクスポートジョブを分割するポリシーを提供します。デフォルトの最大量は256MBです。
  • export_task_pool_size: スレッドプールで同時に実行できるエクスポートタスクの最大数。デフォルトの最大数は5です。

基本的な操作

エクスポートジョブの提出

StarRocksデータベースdb1tbl1という名前のテーブルが含まれているとします。tbl1のパーティションp1p2から列col1col3のデータをHDFSクラスタのexportパスにエクスポートする場合、次のコマンドを実行します。

EXPORT TABLE db1.tbl1 
PARTITION (p1,p2)
(col1, col3)
TO "hdfs://HDFS_IP:HDFS_Port/export/lineorder_"
PROPERTIES
(
"column_separator"=",",
"load_mem_limit"="2147483648",
"timeout" = "3600"
)
WITH BROKER
(
"username" = "user",
"password" = "passwd"
);

詳細な構文とパラメータの説明、およびデータをAWS S3にエクスポートするコマンドの例については、EXPORTを参照してください。

エクスポートジョブのクエリIDの取得

エクスポートジョブを提出した後、SELECT LAST_QUERY_ID()ステートメントを使用してエクスポートジョブのクエリIDを取得できます。クエリIDを使用してエクスポートジョブを表示またはキャンセルすることができます。

詳細な構文とパラメータの説明については、last_query_idを参照してください。

エクスポートジョブのステータスの表示

エクスポートジョブを提出した後、SHOW EXPORTステートメントを使用してエクスポートジョブのステータスを表示できます。例:

SHOW EXPORT WHERE queryid = "edee47f0-abe1-11ec-b9d1-00163e1e238f";

注意

上記の例では、queryidはエクスポートジョブのクエリIDです。

以下のような情報が返されます。

JobId: 14008
State: FINISHED
Progress: 100%
TaskInfo: {"partitions":["*"],"mem limit":2147483648,"column separator":",","line delimiter":"\n","tablet num":1,"broker":"hdfs","coord num":1,"db":"default_cluster:db1","tbl":"tbl3",columns:["col1", "col3"]}
Path: oss://bj-test/export/
CreateTime: 2019-06-25 17:08:24
StartTime: 2019-06-25 17:08:28
FinishTime: 2019-06-25 17:08:34
Timeout: 3600
ErrorMsg: N/A

詳細な構文とパラメータの説明については、SHOW EXPORTを参照してください。

エクスポートジョブのキャンセル

提出したエクスポートジョブをキャンセルするために、CANCEL EXPORTステートメントを使用することができます。例:

CANCEL EXPORT WHERE queryid = "921d8f80-7c9d-11eb-9342-acde48001122";

注意

上記の例では、queryidはエクスポートジョブのクエリIDです。

詳細な構文とパラメータの説明については、CANCEL EXPORTを参照してください。

ベストプラクティス

クエリプランの分割

エクスポートジョブが分割されるクエリプランの数は、エクスポートジョブに関与するテーブレットの数と、クエリプランごとに処理できる最大データ量によって異なります。エクスポートジョブはクエリプランとしてリトライされます。クエリプランが許可される最大量を超えるデータ量がクエリプランで処理されると、クエリプランはリモートストレージのジッタなどのエラーに遭遇します。その結果、クエリプランのリトライコストが増加します。各BEごとに処理できる最大データ量は、export_max_bytes_per_be_per_taskパラメータで指定されます。デフォルトでは256MBです。クエリプランでは、少なくとも1つのテーブレットが割り当てられ、export_max_bytes_per_be_per_taskパラメータで指定された制限を超えないデータ量をエクスポートできます。

エクスポートジョブの複数のクエリプランは同時に実行されます。FEパラメータexport_task_pool_sizeを使用して、スレッドプールによって同時に実行できるエクスポートタスクの最大数を指定できます。このパラメータのデフォルト値は5です。

通常、エクスポートジョブの各クエリプランは、スキャンとエクスポートの2つのパートのみで構成されています。クエリプランによって必要とされる計算を実行するためのロジックは、メモリをほとんど消費しません。したがって、デフォルトの2GBのメモリ制限はほとんどのビジネス要件を満たすことができます。ただし、特定の状況では、クエリプランが多くのテーブレットをスキャンするか、テーブレットに多数のバージョンがある場合など、2GBのメモリ容量が不十分な場合があります。このような場合は、load_mem_limitパラメータを使用して、4GBや8GBなどのより高いメモリ容量制限を指定する必要があります。