すべてのプロダクト
Search
ドキュメントセンター

Tablestore:配信タスクを作成する

最終更新日:Dec 28, 2024

Tablestore のデータテーブルのデータをオブジェクトストレージサービス (OSS) バケットに配信するには、CreateDeliveryTask オペレーションを呼び出して配信タスクを作成します。

重要

Tablestore SDK for Java V5.10.3 以降は、データ配信機能をサポートしています。データ配信機能をサポートするバージョンの Tablestore SDK for Java を使用していることを確認してください。Tablestore SDK for Java の詳細については、Tablestore SDK for Java のバージョン履歴を参照してください。

前提条件

  • OSS が有効化されていること。Tablestore インスタンスがデプロイされているリージョンにバケットが作成されていること。詳細については、OSS を有効化するを参照してください。

  • Tablestore サービスリンクロール (AliyunServiceRoleForOTSDataDelivery) が Tablestore コンソールで作成されていること。ロールの Alibaba Cloud Resource Name (ARN) が記録されていること。詳細については、データ配信タスクを作成するを参照してください。

    RAM コンソールで以下の操作を実行して、Tablestore サービスリンクロール (AliyunServiceRoleForOTSDataDelivery) の ARN を取得できます。

    ロールページで、AliyunServiceRoleForOTSDataDelivery を検索します。次に、RAM ロールの名前をクリックします。ロールの詳細ページで、ロールに関する ARN 情報を表示およびコピーできます。

  • OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するを参照してください。

  • データテーブルが作成され、データがデータテーブルに書き込まれていること。

パラメーター

パラメーター

説明

tableName

テーブルの名前。

taskName

配信タスクの名前。

名前は 3 ~ 16 文字で、小文字、数字、ハイフン (-) のみを含めることができます。小文字または数字で開始および終了する必要があります。

taskConfig

配信タスクの構成。有効な値:

  • ossPrefix: バケット内のフォルダーのプレフィックス。データは Tablestore からフォルダーに配信されます。配信先フォルダーのパスは、次の時間変数をサポートしています:$yyyy、$MM、$dd、$HH、$mm。

    • パスが配信に時間変数を使用する場合、OSS フォルダーはデータが書き込まれた時刻に基づいて動的に生成されます。このようにして、データは Hive がデータをパーティション分割するときに従う命名規則に基づいてパーティション分割されます。OSS のオブジェクトは、時間に基づいて整理、パーティション分割、および分散されます。

    • パスが時間変数を使用しない場合、すべてのファイルは特定のプレフィックスを含む名前の OSS フォルダーに配信されます。

  • ossBucket: OSS バケットの名前。

  • ossEndpoint: OSS バケットがデプロイされているリージョンのサービスアドレス。

  • ossStsRole: Tablestore サービスリンクロールの Alibaba Cloud Resource Name (ARN)。

  • format: 配信されるデータの形式。配信されるデータは Parquet 形式で保存されます。デフォルトでは、配信サービスは PLAIN を使用して任意のタイプのデータをエンコードします。

  • eventTimeColumn: イベント時間列。このパラメーターは、列の時刻に基づいてデータをパーティション分割することを指定します。このパラメーターを指定しない場合、データは Tablestore に書き込まれた時刻に基づいてパーティション分割されます。

  • parquetSchema: 配信する列を指定します。配信するには、ソースフィールド、配信先フィールド、および配信先フィールドタイプを構成する必要があります。

    Tablestore でフィールドがソートされる順序は、スキーマのフィールドの順序と異なる場合があります。OSS に保存されている Parquet データは、スキーマのフィールドの順序に基づいて分散されます。

    重要

    データ型は、ソースフィールドと配信先フィールド間で一致している必要があります。フィールド間のデータ型が一致しない場合、フィールドはダーティデータとして破棄されます。フィールドタイプのマッピングの詳細については、クイックスタートトピックの「データタイプのマッピング」セクションを参照してください。

taskType

データ配信モード。デフォルト値:BASE_INC。有効な値:

  • INC: 差分データ配信モード。差分データのみが同期されます。

  • BASE: フルデータ配信モード。テーブル内のすべてのデータがスキャンされ、同期されます。

  • BASE_INC: 差分データ配信モード。フルデータが同期された後、Tablestore は差分データを同期します。

    差分モードでデータを同期する場合、データが最後に配信された時刻と現在の配信タスクのステータスを表示できます。

次のサンプルコードは、データテーブルの配信タスクを作成する方法の例を示しています。

private static void createDeliveryTask(SyncClient client) {
    String tableName = "<TABLE_NANE>";
    String taskName = "<TASK_NAME>";
    OSSTaskConfig taskConfig = new OSSTaskConfig();
    taskConfig.setOssPrefix("sampledeliverytask/year=$yyyy/month=$MM");
    taskConfig.setOssBucket("datadeliverytest");
    taskConfig.setOssEndpoint("oss-cn-hangzhou.aliyuncs.com");
    taskConfig.setOssStsRole("acs:ram::17************45:role/aliyunserviceroleforotsdatadelivery"); // eventColumn はオプションです。eventColumn は、列の時刻に基づいてデータをパーティション分割することを指定します。このパラメーターを指定しない場合、データは Tablestore に書き込まれた時刻に基づいてパーティション分割されます。
    EventColumn eventColumn = new EventColumn("PK1", EventTimeFormat.RFC1123);
    taskConfig.setEventTimeColumn(eventColumn);
    taskConfig.addParquetSchema(new ParquetSchema("PK1", "PK1", DataType.UTF8));
    taskConfig.addParquetSchema(new ParquetSchema("PK2", "PK2", DataType.BOOL));
    taskConfig.addParquetSchema(new ParquetSchema("Col1", "Col1", DataType.UTF8));
    CreateDeliveryTaskRequest request = new CreateDeliveryTaskRequest();
    request.setTableName(tableName);
    request.setTaskName(taskName);
    request.setTaskConfig(taskConfig);
    request.setTaskType(DeliveryTaskType.BASE_INC);
    CreateDeliveryTaskResponse response = client.createDeliveryTask(request);
    System.out.println("resquestID: "+ response.getRequestId());
    System.out.println("traceID: " + response.getTraceId());
    System.out.println("create delivery task success");
}