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

Tablestore:配信タスクの作成

最終更新日:Dec 28, 2024

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

重要

インストールされている Tablestore SDK for Go のバージョンがデータ配信機能をサポートしていることを確認してください。

前提条件

  • OSS がアクティブ化されている。Tablestore インスタンスがデプロイされているリージョンにバケットが作成されている。詳細については、OSS のアクティブ化 を参照してください。

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

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

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

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

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

パラメーター

パラメーター

説明

TableName

データテーブルの名前。

TaskName

配信タスクの名前。

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

TaskConfig

配信タスクの構成。以下の内容が含まれます。

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

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

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

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

  • OssEndpoint: OSS バケットがデプロイされているリージョンのエンドポイント。

  • OssRoleName: Tablestore サービスリンクロールの ARN。

  • Format: 配信されるデータの形式。配信されるデータは Parquet 形式で保存されます。デフォルトでは、データ配信機能は PLAIN を使用してすべてのタイプのデータをエンコードします。

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

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

    スキーマでは、ソースフィールドと宛先フィールドの名前、およびソースフィールドを配信する順序を指定できます。データが OSS に配信されると、データはスキーマのフィールドの順序に基づいて配信されます。

    重要

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

TaskType

配信タスクのタイプ。デフォルト値: BaseIncTask。有効な値:

  • IncTask: 差分データ配信タイプ。差分データのみが同期されます。

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

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

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

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

func CreateTaskSample(client *tablestore.TableStoreClient) {
    createTask := &tablestore.CreateDeliveryTaskRequest{
        TableName: "<TABLE_NAME>",
        TaskName: "<TASK_NAME>",
        TaskType: tablestore.BaseIncTask,
        TaskConfig: &tablestore.OSSTaskConfig{
            OssPrefix:   "sample/year=$yyyy/month=$MM",
            OssBucket:      "datadeliverytest",
            OssEndpoint:    "oss-cn-hangzhou.aliyuncs.com",
            OssRoleName:    "acs:ram::17************45:role/aliyunserviceroleforotsdatadelivery",
            Schema: []*tablestore.TaskSchema{
                {
                    ColumnName: "PK1",
                    OssColumnName: "PK1",
                    Type: tablestore.ParquetInt64,
                },
                {
                    ColumnName: "PK2",
                    OssColumnName: "PK2",
                    Type: tablestore.ParquetUtf8,
                },
                {
                    ColumnName: "Col1",
                    OssColumnName: "Col1",
                    Type: tablestore.ParquetDouble,
                },
            },
        },
    }
    createResp, err := client.CreateDeliveryTask(createTask)
    if err != nil {
        log.Fatal("create delivery task failed ", err) // 配信タスクの作成に失敗しました
    }
    fmt.Println("create delivery task success ", createResp.RequestId) // 配信タスクの作成に成功しました
}