Tablestore コンソールで配信タスクを作成し、Tablestore テーブルから OSS バケットにデータを配信します。
前提条件
OSS サービスをアクティブ化し、Tablestore インスタンスと同じリージョンにバケットを作成します。詳細については、「OSS のアクティブ化」をご参照ください。
データ配信では、Tablestore インスタンスと同じリージョン内にある任意の OSS バケットへデータを配信できます。MaxCompute などの他のデータウェアハウスにデータを配信するには、チケットを送信して、この機能の利用を申請してください。
注意事項
-
データ配信サービスは、中国(杭州)、中国(上海)、中国(北京)、中国(張家口)、中国(深圳)の各リージョンでご利用いただけます。
-
データ配信では、削除操作は無視されます。Tablestore で削除したデータは、配信先の OSS バケットからは削除されません。
-
新しい配信タスクの初期化には、最大 1 分かかる場合があります。
-
安定した書き込み速度の場合、同期レイテンシーは通常 3 分以内です。P99 レイテンシーは 10 分以内です。
説明P99 レイテンシーとは、レイテンシーの 99 パーセンタイル値のことで、リクエストの 99% がこの値以下のレイテンシーで完了することを意味します。
配信タスクの作成
-
インスタンスの管理 ページに移動します。
-
Tablestore コンソールにログインします。
-
上部のナビゲーションバーで、リソースグループとリージョンを選択します。インスタンスの名前をクリックするか、[操作] 列で インスタンスの管理 をクリックします。
-
-
インスタンスの管理 ページで、OSS へのデータ配信 をクリックします。
-
(オプション) サービスリンクロール AliyunServiceRoleForOTSDataDelivery を作成します。
データ配信を初めて設定する際は、Tablestore サービスリンクロール AliyunServiceRoleForOTSDataDelivery を作成する必要があります。このロールは、Tablestore に OSS バケットへのデータ書き込み権限を付与します。詳細については、「Tablestore サービスリンクロール」をご参照ください。
説明サービスリンクロールの詳細については、「サービスリンクロール」をご参照ください。
-
OSS へのデータ配信 ページで、[配信サービスのロール] をクリックします。
-
ロールの詳細 ダイアログボックスで情報を確認し、OK をクリックします。
-
-
配信タスクを作成します。
-
OSS へのデータ配信 ページで、タスクの作成 をクリックします。
-
タスクの作成 ダイアログボックスで、パラメーターを設定します。
パラメータ
説明
[タスク名]
配信タスクの名前です。
名前は 3~16 文字の長さで、小文字 (a-z)、数字、ハイフン (-) のみを含めることができます。先頭と末尾は小文字または数字である必要があります。
[書き込み先リージョン]
Tablestore インスタンスと OSS バケットが存在するリージョンです。
[書き込み先テーブル]
ソースとなる Tablestore テーブルの名前です。
[書き込み先バケット]
OSS バケットの名前です。
重要OSS バケットは事前に作成済みであり、かつ Tablestore インスタンスと同じリージョンに存在する必要があります。
[書き込み先プレフィックス]
配信される Tablestore データの、OSS バケット内におけるディレクトリプレフィックスです。宛先プレフィックスでは、$yyyy、$MM、$dd、$HH、$mm の 5 つの時間変数を使用できます。詳細については、「時間パーティショニング」をご参照ください。
-
宛先プレフィックスに時間変数を含めると、データの書き込み時刻に基づいて OSS ディレクトリが動的に生成されます。これにより、Hive パーティション命名と同様のスタイルで、時間によってデータがパーティション分割されます。
-
宛先プレフィックスに時間変数を含めない場合、すべてのファイルは指定された静的ディレクトリプレフィックスに配信されます。
[同期モード]
配信タスクのタイプです。有効な値:
-
[増分]: 増分データのみを同期します。
-
[完全]: テーブル全体のデータ同期を 1 回実行します。
-
[差分]:フルデータ同期が完了すると、タスクは増分データを同期します。
増分データ同期の場合、最新の配信時刻と現在の配信ステータスを確認できます。
[書き込み先のオブジェクト形式]
配信されたデータは、Parquet 列指向フォーマットで保存されます。デフォルトでは、データ配信は PLAIN エンコーディングを使用し、あらゆるタイプのデータに対応しています。
[スキーマ生成タイプ]
配信先ファイルに書き込むソースフィールドを選択し、その順序を指定し、新しい名前を割り当てることができます。スキーマ設定内の列の順序によって、OSS 内の最終的なデータレイアウトが決まります。
選択したスキーマ生成タイプに基づいて、配信スキーマを設定します。
-
スキーマ生成タイプ を 手動 に設定した場合、各配信フィールドのソースフィールド、宛先フィールド名、および宛先フィールドタイプを手動で設定する必要があります。
-
スキーマ生成タイプ を 自動生成 に設定すると、システムが自動的に配信フィールドを識別し、一致させます。
重要配信フィールドのデータ型は、対応するソースフィールドのデータ型と一致する必要があります。一致しない場合、そのフィールドはダーティデータとして破棄されます。データ型マッピングの詳細については、「データ型マッピング」をご参照ください。
配信スキーマを設定する際、次の操作を実行できます。
-
フィールドの追加 をクリックして、新しい配信フィールドを追加します。
-
[操作] 列で、
上矢印または
下矢印アイコンをクリックして、配信フィールドの順序を調整します。 -
[操作] 列で、
削除アイコンをクリックして、配信フィールドを削除します。
[スキーマ設定]
-
-
-
OK をクリックします。
ステートメントの表示 ダイアログボックスでは、EMR 外部テーブル用に自動生成されたテーブル作成ステートメントを表示できます。このステートメントをコピーして、EMR で外部テーブルをすばやく作成し、OSS のデータにアクセスできます。
配信タスクを作成した後、次の操作を実行できます。
-
タスク名、テーブル名、配信先バケット、宛先プレフィックス、最新同期時刻、ステータスなどの配信詳細を表示できます。
-
テーブル作成ステートメントを表示またはコピーできます。
[操作] 列で ステートメントの表示 をクリックすると、EMR などのコンピューティングエンジンで外部テーブルを作成するためのテーブル作成ステートメントを表示またはコピーできます。詳細については、「EMR の使用」をご参照ください。
-
配信エラーメッセージを表示できます。
OSS バケットまたは配信権限が正しく設定されていない場合、データ配信は失敗します。この場合、タスクステータスページで関連するエラーメッセージを確認できます。エラー処理の詳細については、「エラー処理」をご参照ください。
-
配信タスクを削除できます。
操作列で、削除 をクリックして配信タスクを削除します。 初期化段階にあるタスクを削除しようとすると、エラーが返されます。 この場合、後でもう一度お試しください。
-
OSS 内のデータの表示
配信タスクが初期化され、データが配信された後、OSS コンソール、API または SDK、または EMR などのコンピューティングエンジンを使用して、OSS 内のデータを表示できます。詳細については、「ファイルの概要」をご参照ください。
OSS オブジェクトのアドレス形式は次のとおりです。
oss://BucketName/TaskPrefix/TaskName_ConcurrentID_TaskPrefix__SequenceID
この形式の各要素は次のとおりです。BucketName はバケット名です。TaskPrefix はディレクトリプレフィックスで、ファイル名にも含まれます。TaskName は配信タスク名です。ConcurrentID は 0 から始まる内部並行処理 ID です。配信システムは、スループットの増加に応じて自動的に並行処理を増やします。SequenceID は 1 から始まるファイルシーケンス番号です。
時間パーティショニング
データ配信は、データが Tablestore に書き込まれた時刻を抽出できます。次の変数を使用して、データの書き込み時刻を OSS バケットのディレクトリプレフィックスに変換できます。$yyyy (4 桁の年)、$MM (2 桁の月)、$dd (2 桁の日)、$HH (2 桁の時)、$mm (2 桁の分)。
最適なパフォーマンスを得るために、OSS 内のファイルは少なくとも 4 MB にすることを推奨します。コンピューティングエンジンが OSS からデータをロードする際、パーティション数が多いほどトランザクション実行時間が長くなります。そのため、時間パーティショニングの粒度は細かすぎないようにする必要があります。ほとんどのリアルタイム書き込みシナリオでは、日単位または時間単位のパーティショニングで十分であり、分単位のパーティショニングは通常不要です。
たとえば、2020 年 8 月 31 日 16:03 に Tablestore に書き込まれたデータを考えてみます。次の表は、異なる宛先プレフィックス設定に対する OSS 内の結果オブジェクトパスを示しています。
|
OSS バケット |
TaskName |
宛先プレフィックス |
OSS オブジェクトパス |
|
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_day=31__1 |
|
myBucket |
testTaskDs |
ds=$yyyy$MM$dd |
oss://myBucket/ds=20200831/testTaskDs_0_ds=20200831__1 |
データ型マッピング
|
[Parquet 論理型] |
[Tablestore データ型] |
|
Boolean |
Boolean |
|
Int64 |
Int64 |
|
Double |
Double |
|
UTF8 |
String |
エラー処理
|
[エラーメッセージ] |
[原因] |
[解決策] |
|
Unauthorized |
Tablestore に必要な権限がありません。 |
RAM にサービスリンクロール AliyunServiceRoleForOTSDataDelivery が存在することを確認してください。 ロールが存在しない場合は、OSS へのデータ配信ページから作成します。配信タスクの作成を開始すると、コンソールが必要なロールの作成を促します。 |
|
InvalidOssBucket |
指定された OSS バケットが存在しません。 |
OSS バケットを作成すると、システムは自動的にデータの書き込みを再試行し、配信の進行状況を更新します。 |
配信タスクを作成した後に OSS にデータが配信されない理由の詳細については、「タスク作成後に OSS にデータが配信されない」をご参照ください。