Tablestore コンソールで配信タスクを作成して、Tablestore からオブジェクトストレージサービス (OSS) バケットにデータを送信できます。
前提条件
OSS がアクティブ化されています。Tablestore インスタンスが存在するリージョンにバケットが作成されています。詳細については、OSSのアクティブ化 を参照してください。
データ配信を使用すると、同じリージョン内の Tablestore インスタンスから OSS バケットにデータを送信できます。MaxCompute などの別のウェアハウスにデータを送信するには、チケットを送信してください。
使用上の注意
データ配信は、中国 (杭州)、中国 (上海)、中国 (北京)、中国 (深圳)、中国 (張家口) リージョンでご利用いただけます。
データ配信時に、Tablestore データの削除操作は無視されます。削除操作を実行しても、OSS に配信された Tablestore データは削除されません。
配信タスクの作成時の初期化には最大 1 分かかります。
データが一定の速度で書き込まれる場合、レイテンシは 3 分以内です。データが同期される場合、P99 レイテンシは 10 分以内です。
説明P99 レイテンシは、過去 10 秒間のリクエストのうち最も遅い 1% の平均レイテンシを示します。
データ配信タスクの作成
インスタンス管理ページに移動します。
Tablestore コンソールにログインします。
ページの上部で、リソースグループとリージョンを選択します。インスタンスリストで管理する Tablestore インスタンスを見つけます。次に、インスタンス名またはアクション列のインスタンスの管理をクリックします。
インスタンス管理ページで、OSS にデータを送信タブをクリックします。
(オプション) サービスリンクロール AliyunServiceRoleForOTSDataDelivery を作成します。
初めてデータ配信を設定する場合は、Tablestore が OSS バケットにデータを書き込むことを承認するために使用される AliyunServiceRoleForOTSDataDelivery ロールを作成する必要があります。詳細については、Tablestore サービスリンクロールを参照してください。
説明サービスリンクロールの詳細については、サービスリンクロールを参照してください。
OSS にデータを送信タブで、配信サービスのロールをクリックします。
ロールの詳細メッセージで、関連情報を確認します。OKをクリックします。
配信タスクを作成します。
OSS にデータを送信タブで、タスクの作成をクリックします。
タスクの作成ダイアログボックスで、次のパラメータを設定します。
パラメータ
説明
タスク名
配信タスクの名前。
名前は 3 ~ 16 文字で、小文字、数字、ハイフン (-) のみを含めることができます。小文字または数字で始まり、小文字または数字で終わる必要があります。
送信先リージョン
Tablestore インスタンスと OSS バケットが配置されているリージョン。
ソーステーブル
Tablestore テーブルの名前。
送信先バケット
データを送信する OSS バケットの名前。
重要Tablestore インスタンスと同じリージョンにバケットが作成されていることを確認してください。
送信先プレフィックス
バケット内のフォルダのプレフィックス。データは Tablestore からフォルダに配信されます。送信先フォルダのパスは、次の時間変数をサポートしています: $yyyy、$MM、$dd、$HH、$mm。詳細については、このトピックの時間でデータをパーティション分割するセクションを参照してください。
パスで時間変数を使用する場合、OSS フォルダはデータが書き込まれた時刻に基づいて動的に生成されます。このようにして、OSS 内のデータは、hive パーティション命名規則に従って、時間に基づいて編成、パーティション分割、および配布されます。
パスで時間変数を使用しない場合、すべてのファイルはこのプレフィックスを含む名前の OSS フォルダに配信されます。
同期モード
配信タスクのタイプ。有効な値:
増分: 増分データのみが同期されます。
フル: テーブル内のすべてのデータがスキャンされ、同期されます。
差分: 増分データが同期される前に、フルデータが同期されます。
Tablestore が増分データを同期する場合、データが最後に配信された時刻と配信タスクのステータスを表示できます。
送信先オブジェクト形式
配信されたデータは Parquet 形式で保存されます。デフォルトでは、データ配信はエンコードに PLAIN を使用します。PLAIN は、すべてのタイプのデータをエンコードするために使用できます。
スキーマ生成タイプ
配信する列を指定します。Tablestore テーブル内のフィールドのソート順は、スキーマ内のフィールドの順序と異なる場合があります。OSS に保存されている Parquet データは、スキーマ内のフィールドの順序に基づいて配布されます。
スキーマ生成タイプを選択します。
スキーマ生成タイプパラメータが手動に設定されている場合は、配信のソースフィールド、送信先フィールド名、および送信先フィールドタイプを設定する必要があります。
スキーマ生成タイプパラメータが自動生成に設定されている場合、システムは配信用のフィールドを識別して照合します。
重要データ型は、ソースフィールドと送信先フィールド間で一致している必要があります。そうでない場合、フィールドはダーティデータとして破棄されます。フィールドタイプのマッピングの詳細については、このトピックのデータ型マッピングセクションを参照してください。
スキーマを設定する場合、次の操作を実行できます。
+ フィールドを追加をクリックして、配信用のフィールドを追加します。
または アイコンをクリックして、フィールドの順序を調整します。アイコンは、調整対象のフィールドに対応するアクション列にあります。
アイコンをクリックして、対応するフィールドをアクション列から削除します。
スキーマ設定
OKをクリックします。
テーブル作成ステートメントの表示メッセージで、E-MapReduce (EMR) の外部テーブルを作成するために使用されるステートメントを表示できます。また、EMR の外部テーブルを作成して OSS 内のデータにアクセスするためのステートメントをコピーすることもできます。
配信タスクが作成された後、次の操作を実行できます。
タスク名、テーブル名、送信先バケット、送信先プレフィックス、ステータス、データが最後に同期された時刻など、配信タスクの詳細を表示します。
テーブルを作成するためのステートメントを表示またはコピーします。
アクション列のテーブル作成ステートメントの表示をクリックします。EMR などのコンピューティングエンジンを使用して外部テーブルを作成するためのステートメントを表示またはコピーできます。詳細については、EMR の使用を参照してください。
配信後に返されたエラーメッセージを表示します。
OSS バケットと配信権限の設定が正しくない場合、データ配信を完了できません。配信タスクのステータスページで、関連するエラーメッセージを表示できます。エラー処理の詳細については、このトピックのエラー処理セクションを参照してください。
配信タスクを削除します。
配信タスクに対応するアクション列の削除をクリックします。配信タスクを削除できます。配信タスクが初期化プロセスにある場合、システムはエラーを返します。後でタスクを削除できます。
OSS データの表示
配信タスクが初期化され、データが配信された後、OSS コンソール、API、SDK、またはコンピューティングエンジン EMR を使用して、OSS に配信されたデータを表示できます。詳細については、概要を参照してください。
OSS オブジェクト URL の例:
oss://BucketName/TaskPrefix/TaskName_ConcurrentID_TaskPrefix__SequenceID
この例では、BucketName はバケットの名前を示します。最初の TaskPrefix は送信先フォルダのプレフィックスを示します。2 番目の TaskPrefix はタスクのプレフィックス情報を示します。TaskName はタスクの名前を示します。ConcurrentID は、システムによって決定される同時実行処理の数を示します。数値は 0 から始まり、スループットが増加すると増加します。SequenceID は、配信されたファイルのシーケンス ID を示し、1 から増加します。
時間でデータをパーティション分割する
データ配信では、システムが Tablestore にデータが書き込まれた時刻を記録できます。時刻は、次の変数で構成されます: $yyyy (4 桁の年)、$MM (2 桁の月)、$dd (2 桁の日)、$HH (2 桁の時間)、$mm (2 桁の分)。時刻は、変換後に送信先バケットのプレフィックスとして使用できます。
OSS オブジェクトのサイズは 4 MB 以上にすることをお勧めします。コンピューティングエンジンを使用して OSS データを読み込む場合、パーティションの数が多いほど、パーティションの読み込みに時間がかかります。したがって、ほとんどのリアルタイムデータ書き込みシナリオでは、データをパーティション分割する基準となる時間は、分単位ではなく、日単位または時間単位にすることをお勧めします。
この例では、2020 年 8 月 31 日 16:03 に Tablestore にデータが書き込まれた配信タスクを使用しています。次の表は、異なる送信先プレフィックス設定に基づいて OSS で生成された最初のオブジェクトの URL を示しています。
OSS バケット | タスク名 | 送信先プレフィックス | OSS オブジェクト URL |
myBucket | testTask | myPrefix | oss://myBucket/myPrefix/testTask_0_myPrefix__1 |
myBucket | testTaskTimeParitioned | myPrefix/$yyyy/$MM/$dd/$HH/$mm | oss://myBucket/myPrefix/2020/08/31/16/03/testTaskTimeParitioned_0_myPrefix_2020_08_31_16_03__1 |
myBucket | testTaskTimeParitionedHiveNamingStyle | myPrefix/year=$yyyy/month=$MM/day=$dd | oss://myBucket/myPrefix/year=2020/month=08/day=31/testTaskTimeParitionedHiveNamingStyle_0_myPrefix_year=2020_month=08 |
myBucket | testTaskDs | ds=$yyyy$MM$dd | oss://myBucket/ds=20200831/testTaskDs_0_ds=20200831__0 |
データ型マッピング
Parquet 論理型 | Tablestore のデータ型 |
Boolean | Boolean |
Int64 | Int64 |
Double | Double |
UTF8 | String |
エラー処理
エラーメッセージ | 説明 | 解決策 |
UnAuthorized | Tablestore は OSS にアクセスする権限がありません。 | サービスリンクロール AliyunServiceRoleForOTSDataDelivery が存在するかどうかを確認します。 ロールが存在しない場合は、配信タスクを作成して、Tablestore がロールを作成するようにトリガーする必要があります。 |
InvalidOssBucket | 指定された OSS バケットが存在しません。 |
OSS バケットが作成されると、すべてのデータが OSS バケットに再度書き込まれます。配信の進捗状況が更新されます。 |