TableTunnel は、MaxCompute Tunnel サービスにアクセスするための入り口のクラスです。TableTunnel.UploadSession インターフェイスは、データを MaxCompute テーブルにアップロードするセッションです。 TableTunnel.DownloadSession インターフェイスは、MaxCompute テーブルにデータをダウンロードするセッションです。

TableTunnel インターフェイスは、次のように定義されています。
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);
 public UploadSession createUploadSession(String projectName, String tableName, PartitionSpec partitionSpec);
 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 インスタンスの作成からプロセスの完了までを指します。
  • PublicClassTableTunnel: アップロードオブジェクトやダウンロードオブジェクトを作成するメソッドです。
  • セッション: テーブルまたはパーティションをアップロードおよびダウンロードするプロセスです。 1 つのセッションは、Tunnel RESTful API への 1 つ以上の HTTP リクエストで構成されます。
  • アップロードセッション: TableTunnel のアップロードセッションは、INSERT INTO セマンティクスです。つまり、同一テーブルやパーティションへのアップロードが発生しても、互いに干渉しません。 各アップロードセッションは、異なるディレクトリ内にあります。
  • ブロック ID: 対応するファイル名です。 アップロードセッションでは、各 RecordWriter が 1 つの HTTP リクエストに対応し、ブロック ID によって識別されます。また、サーバー側の 1 ファイルと対応します。
  • RecordWriter: 1 つのセッション内で、同じブロック ID を使用して RecordWriter を複数回オープンすると、データは上書きされます。 最後の RecordWriter close() によってアップロードされたデータが保持されます。 ブロックのアップロードが失敗した場合は、この機能を使用して、データ伝送を再開できます。
TableTunnel の実装プロセスは、次の通りです。
  1. RecordWriter.write() により、データは一時ディレクトリにアップロードされます。
  2. RecordWriter.close() により、前述のファイルが一時ディレクトリからデータディレクトリに移動されます。
  3. Session.commit() により、対応するデータディレクトリ内のすべてのファイルが、対応するテーブルを保有するディレクトリに移動され、テーブルのメタデータが更新されます。 つまり、テーブルに移動されたデータは、他の MaxCompute タスク (SQL や MR など) から参照できるようになります。
制限事項:
  • ブロック ID の範囲は、0 から 20000 です。 1 つのブロックでアップロード可能なデータサイズは、100 GB 以下です。
  • セッションのタイムアウトは、24 時間です。データ伝送時間が、しきい値である 24 時間を超えることが予想される場合は、大量データを複数のセッションに分けてください。
  • RecordWriter の HTTP リクエストのタイムアウトは、120 秒です。HTTP 接続によるデータ伝送が 120 秒間認識されないと、接続が自動的にクローズされます。
    デフォルトでは、HTTP のバッファは 8 KB です。 このため、RecordWriter.write() 呼び出しのたびに HTTP 接続によるデータフローを判断するのは困難です。 また、TunnelRecordWriter.flush() により、強制的にバッファ内のデータが消去されることがあります。
  • データフローが予測できないため、ログが書き込まれる間にタイムアウトが発生する可能性があります。 注:
    • すべてのタイプのデータに対して RecordWriter を使用することは推奨しません。 各 RecordWriter は、1 つのファイルに対応しているので、小さなファイルが多数生成され、MaxCompute のパフォーマンスに大きく影響します。
    • コードのキャッシュデータサイズが 64 MB を超える場合、バッチ処理内で RecordWriter を呼び出してデータを書き込むことを推奨します。
  • RecordReader タイムアウトのしきい値は、300 秒です。