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

MaxCompute:TableTunnel

最終更新日:Jan 08, 2025

TableTunnelは、MaxCompute Tunnelサービスのエントリクラスです。 TableTunnelを使用して、テーブルデータのみをアップロードまたはダウンロードできます。 ビューはアップロードまたはダウンロードできません。

定義

次のコードは、TableTunnelを定義します。 詳細については、Java-sdk-docをご参照ください。

public class TableTunnel {
 public DownloadSession createDownloadSession(String projectName, String tableName);
 public DownloadSession createDownloadSession(String projectName, String tableName, PartitionSpec partitionSpec);
 public UploadSession createUploadSession(String projectName, String tableName,boolean overwrite);
 public UploadSession createUploadSession(String projectName, String tableName, PartitionSpec partitionSpec,boolean overwrite);
 public DownloadSession getDownloadSession(String projectName, String tableName, PartitionSpec partitionSpec, String id);
 public DownloadSession getDownloadSession(String projectName, String tableName, String id);
 public UploadSession getUploadSession(String projectName, String tableName, PartitionSpec partitionSpec, String id);
 public UploadSession getUploadSession(String projectName, String tableName, String id);
}

次の表に、インターフェイスを示します。

  • TableTunnelインスタンスのライフサイクルは、作成時からデータのアップロードまたはダウンロードが完了するまでに開始されます。

  • TableTunnelは、UploadSessionおよびDownloadSessionオブジェクトを作成するメソッドを提供します。 TableTunnel.UploadSessionはデータのアップロードに使用されます。 TableTunnel.DownloadSessionはデータのダウンロードに使用されます。

  • セッションとは、テーブルまたはパーティションをアップロードまたはダウンロードするプロセスを指します。 セッションは、Tunnel RESTful APIへの1つ以上のHTTPリクエストで構成されます。

  • アップロードセッションでは、各RecordWriterはHTTPリクエストと一致し、一意のブロックIDによって識別されます。 ブロックIDは、RecordWriterに対応するファイルの名前である。

  • 同じブロックIDを使用して同じセッションでRecordWriterを複数回有効にすると、RecordWriterが最後にclose() メソッドを呼び出したときにアップロードされたデータが以前のすべてのデータを上書きします。 この機能は、アップロードに失敗したデータブロックを再送信するために使用できます。

  • TableTunnelのUploadSessionで:

    • boolean overwriteパラメーターが指定されていない場合、INSERT INTOステートメントが使用されます。

    • boolean overwriteパラメーターがTrueに設定されている場合、INSERT OVERWRITEステートメントが使用されます。

    • boolean overwriteパラメーターがFalseに設定されている場合、INSERT INTOステートメントが使用されます。

    INSERT OVERWRITEとINSERT INTOの説明:

    • INSERT INTO: 同じテーブルまたはパーティションのアップロードセッションは、互いに影響しません。 各セッションでアップロードされたデータは、異なるディレクトリに保存されます。

    • INSERT OVERWRITE: テーブルまたはパーティション内のすべてのデータは、現在のアップロードセッションのデータによって上書きされます。 この文を使用してデータをアップロードする場合は、同じテーブルまたはパーティションに対して同時操作を実行しないでください。

実装プロセス

  1. RecordWriter.write() メソッドは、データをファイルとして一時ディレクトリにアップロードします。

  2. RecordWriter.close() メソッドは、一時ディレクトリからデータディレクトリにファイルを移動します。

  3. session.com mit() は、データディレクトリから必要なテーブルが保存されているディレクトリにすべてのファイルを移動し、テーブルのメタデータを更新します。 これにより、現在のジョブによってテーブルに移動されたデータは、SQLやMapReduceジョブなどの他のMaxComputeジョブに表示されます。

制限事項

  • ブロックIDの値は0以上で20000未満でなければなりません。 ブロックにアップロードするデータのサイズは、100 GBを超えることはできません。

  • セッションは、そのIDによって一意に識別される。 セッションのライフサイクルは24時間です。 大量のデータの転送によりセッションがタイムアウトした場合は、複数のセッションでデータを転送する必要があります。

  • RecordWriterに対応するHTTPリクエストのライフサイクルは120秒です。 120秒以内にHTTP接続を介してデータが流れない場合、サーバーは接続を閉じます。

    説明

    HTTPには8 KBのバッファがあります。 RecordWriter.write() メソッドを呼び出すと、データがバッファに保存され、HTTP接続を介してインバウンドトラフィックが流れない場合があります。 この場合、TunnelRecordWriter.flush() メソッドを呼び出して、バッファからデータを強制的にフラッシュできます。

  • RecordWriterを使用してMaxComputeにログを書き込むと、予期しないトラフィックの変動により書き込み操作がタイムアウトすることがあります。 次の操作を実行することを推奨します。

    • データレコードごとにRecordWriterを使用しないことを推奨します。 各データレコードにRecordWriterを使用すると、各RecordWriterがファイルに対応するため、多数の小さなファイルが生成されます。 これはMaxComputeのパフォーマンスに影響します。

    • キャッシュされたコードのサイズが64 MBに達する場合は、RecordWriterを使用して一度に複数のデータレコードを書き込むことを推奨します。

  • RecordReaderのライフサイクルは300秒です。

  • MaxComputeサービスへのアクセスに使用されるエンドポイントがパブリックエンドポイントの場合、ユーザーはデータのダウンロードに対して課金されます。 パブリックエンドポイントの詳細については、「エンドポイント」をご参照ください。

  • ダウンロード制御機能が有効になっている場合、パブリックエンドポイントを使用してデータをダウンロードするユーザーには、関連するダウンロード権限が必要です。 権限付与の詳細については、「ダウンロードコントロール」をご参照ください。