メインコンテンツまでスキップ
に最終更新

ロードの概要

Apache Dorisには、さまざまなデータソースからデータベースへ書き込むためのロード方法と連携方法があります。このドキュメントでは、代表的な業務シナリオを出発点として、リアルタイム書き込み、ストリーミング同期、バッチロード、外部データソース連携の四つの分類から適切な方法を選ぶための指針を説明します。

クイックナビゲーション​

データソースとデータの鮮度要件に応じて、次の表から推奨されるロード方法を確認できます。

業務シナリオデータソース推奨されるロード方法
アプリケーションからのリアルタイム書き込み(少量、約5分に一度)JDBCクライアントJDBC INSERT
アプリケーションからの高同時実行・高頻度の小規模バッチ書き込みJDBC / HTTPGroup CommitとJDBC INSERTまたはStream Load
アプリケーションからの高スループット書き込みHTTPStream Load
リアルタイムデータストリームの取り込みFlinkFlink Doris Connector
リアルタイムメッセージキューの取り込みKafkaRoutine LoadまたはDoris Kafka Connector
トランザクションデータベースのリアルタイム同期(外部コンポーネント不要)MySQL / PostgreSQLStreaming Jobによる継続的なロード
トランザクションデータベースのCDC同期MySQL / PostgreSQLなどFlink CDCまたはDataX
オブジェクトストレージからの継続的なロード(増分ファイルの自動ロード)S3Streaming Jobによる継続的なロード
オブジェクトストレージ / HDFSのファイルのバッチロードS3 / OSS / HDFSBroker LoadまたはINSERT INTO SELECT
ローカルファイルのバッチロードローカルディスクStream LoadまたはDoris Streamloader
外部データソース(データレイク / 外部テーブル)のクエリとロードHive / Iceberg / JDBCなどCatalogとINSERT INTO SELECT

Dorisでは、各ロードはデフォルトで暗黙的なトランザクションとして実行されます。トランザクションの詳細については、トランザクションを参照してください。

シナリオ別のロード方法の選び方​

リアルタイム書き込み:アプリケーションからの直接書き込み​

アプリケーションがHTTPまたはJDBCを通じてDorisのテーブルにリアルタイムでデータを書き込むシナリオに適しています。リアルタイムの分析やクエリが必要な業務でよく使用されます。

  • 少量のデータ(約5分に一度):JDBC INSERTを使用してデータを書き込みます。
  • 高い同時実行数または高頻度(同時実行数が20を超える、または1分間に複数回書き込む場合):Group Commitを有効にし、JDBC INSERTまたはStream Loadと組み合わせて使用します。
  • 高スループットの書き込み:HTTPプロトコル経由でStream Loadを使用してデータを書き込みます。

ストリーミング同期:リアルタイムデータストリームの取り込み​

リアルタイムデータストリーム(Flink、Kafka、トランザクションデータベースのCDCなど)を通じて、データをDorisのテーブルへ継続的に同期するシナリオに適しています。

  1. Flinkのリアルタイムデータストリーム

    Flink Doris Connectorを使用して、FlinkのリアルタイムデータストリームをDorisのテーブルに書き込みます。

  2. Kafkaのリアルタイムデータストリーム

    Routine LoadとDoris Kafka Connectorから選択します。違いは次のとおりです。

    方法データの流れ対応フォーマット
    Routine LoadDorisがKafkaからデータを能動的に取得csv、json
    Kafka ConnectorKafkaがDorisへデータを能動的にプッシュavro、json、csv、protobuf
  3. トランザクションデータベースのCDC同期

    Flink CDCまたはDataXを使用して、トランザクションデータベースのCDCデータストリームをDorisに書き込みます。

  4. Streaming Jobによる継続的なロード(外部コンポーネント不要)

    Dorisに組み込まれたStreaming Jobを使用すると、MySQL、PostgreSQL、S3などのデータソースからデータを継続的に読み取り、FlinkやKafkaなどの外部コンポーネントに依存せずにDorisへ書き込めます。次の二つの同期方法に対応しています。

    同期方法内部の仕組みテーブルの自動作成セマンティクスの保証代表的なシナリオ
    SQL Mapping SyncJob + TVF(INSERT INTO SELECT)事前作成が必要exactly-once列の絞り込み、フィールド名の変更、型変換、条件によるフィルタリングが必要な場合
    Auto Table Creation SyncJob + ネイティブなデータベース全体のDDL初回実行時に自動作成at-least-onceデータベース全体またはテーブル群をミラーリングし、同期先のテーブルスキーマを同期元に自動追従させる場合

バッチロード:外部ストレージからのファイルのロード​

外部ストレージシステム(オブジェクトストレージ、HDFS、ローカルファイル、NASなど)にあるファイルをDorisのテーブルへバッチでロードする、リアルタイム性を必要としないシナリオに適しています。

  • オブジェクトストレージ / HDFSのファイル:Broker Loadを使用してDorisにデータを書き込みます。
  • オブジェクトストレージ / HDFS / NASのファイル(同期または非同期):同期書き込みにはINSERT INTO SELECTを使用します。非同期で実行する場合は、JOBによるスケジューリングと組み合わせます。
  • ローカルファイル:Stream LoadまたはDoris Streamloaderを使用してDorisにデータを書き込みます。

外部データソース連携:Catalogを使用したフェデレーテッドクエリとロード​

外部データソース(Hive、JDBC、Icebergなど)と連携して外部データをクエリし、必要に応じてDorisのテーブルへロードするシナリオに適しています。

  • Catalogを作成して、外部データソースからデータを読み取ります。
  • INSERT INTO SELECTを使用して、外部データソースのデータをDorisへ同期的に書き込みます。非同期で実行する場合は、JOBによるスケジューリングと組み合わせます。

ロード時の部分列更新​

Dorisは、データのロード時に部分列更新をサポートしています。テーブルのすべての列に値を指定しなくても、特定の列だけを更新できます。この機能は、特に次のシナリオで役立ちます。

  • 列数の多いテーブルで少数のフィールドを更新する場合
  • 増分更新(部分列に対するUpsert)を実行する場合

Unique KeyテーブルとAggregateテーブルで部分列更新を行う方法については、列の更新を参照してください。

ロード方法の概要​

Dorisへのロードには、データソース、データフォーマット、ロード方法、エラーデータの処理、データ変換、トランザクションなど、さまざまな側面があります。次の表は、各方法に適したシナリオ、対応するファイルフォーマット、ロードモードをまとめたものです。

ロード方法用途対応するファイルフォーマットロードモード
Stream Loadローカルファイルのロードまたはアプリケーションからの書き込みcsv、json、parquet、orc同期
Broker LoadオブジェクトストレージやHDFSなどからのロードcsv、json、parquet、orc非同期
INSERT INTO VALUESJDBCなどのインターフェースを通じたロードSQL同期
INSERT INTO SELECT外部テーブル、オブジェクトストレージ、HDFSからのロードSQL同期
Routine LoadKafkaからのリアルタイムロードcsv、json非同期
MySQL Loadローカルデータからのロードcsv同期
Group Commit高頻度の小規模バッチロード使用するロード方法による-
Streaming JobMySQL、PostgreSQL、S3などのデータソースからの継続的なロードデータソースによる非同期

よくある質問​

Q1:同時実行数が多い小規模バッチ書き込みには、どのロード方法を選べばよいですか?

Group Commitを有効にし、JDBC INSERTまたはStream Loadと組み合わせて使用します。同時実行数が20を超える場合や、1分間に複数回書き込む場合、Group Commitによってロードの負荷を大幅に軽減できます。

Q2:Routine LoadとDoris Kafka Connectorの違いは何ですか?

  • Routine Load:Dorisがタスクをスケジュールし、Kafkaからデータを能動的に取得します。csvとjsonのフォーマットに対応しています。
  • Doris Kafka Connector:KafkaがDorisへデータを能動的にプッシュします。avro、json、csv、protobufのフォーマットに対応しています。

Q3:ローカルファイルをDorisにロードするには、どうすればよいですか?

Stream Load(小規模・中規模のファイルに適しています)またはDoris Streamloader(大きなファイルをバッチでロードする場合に適しています)を使用できます。

Q4:HiveやIcebergなどの外部データソースからDorisにデータをロードできますか?

はい。まずCatalogを通じて外部データソースに接続し、次にINSERT INTO SELECTを使用してデータをDorisへ同期的に書き込みます。非同期で実行する場合は、JOBによるスケジューリングと組み合わせます。

Q5:ロードにはトランザクションの保証がありますか?

はい。Dorisでは、各ロードはデフォルトで暗黙的なトランザクションとして実行されます。詳細については、トランザクションを参照してください。

Q6:Streaming JobとFlink CDCはどのように使い分ければよいですか?

  • Streaming Job:FlinkやKafkaなどの外部コンポーネントに依存しないDorisの組み込み機能です。MySQLとPostgreSQLに対するSQL Mapping SyncとAuto Table Creation Syncに加え、S3からの継続的なロードに対応しています。Auto Table Creation Syncは同期先のテーブルを自動的に作成し、SQL Mapping Syncはexactly-onceセマンティクスを提供し、SQL処理に対応しています。
  • Flink CDC:Flinkクラスターのデプロイが必要です。すでにFlinkによるストリーム処理基盤がある場合、複雑なETL処理が必要な場合、または複数の同期先が必要な場合に適しています。

MySQLまたはPostgreSQLのデータをDorisへ継続的に同期するだけで、外部のストリーム処理を必要としない場合は、Streaming Jobを優先してください。詳細については、継続的なロードの概要を参照してください。