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

MaxCompute:UploadSession

最終更新日:Jan 08, 2025

このトピックでは、UploadSessionを使用してデータをテーブルにアップロードする方法について説明します。

UploadSession定義

次の形式を使用してUploadSessionを定義します。

public class UploadSession {
    UploadSession(Configuration conf, String projectName, String tableName,
                  String partitionSpec) throws TunnelException;
    UploadSession(Configuration conf, String projectName, String tableName, 
                  String partitionSpec, String uploadId) throws TunnelException;
    public void commit(Long[] blocks);
    public Long[] getBlockList();
    public String getId();
    public TableSchema getSchema();
    public UploadSession.Status getStatus();
    public Record newRecord();
    public RecordWriter openRecordWriter(long blockId);
    public RecordWriter openRecordWriter(long blockId, boolean compress);
    public RecordWriter openBufferedWriter();
    public RecordWriter openBufferedWriter(boolean compress);
}

UploadSessionの説明

  • Time-to-live (TTL): アップロードインスタンスを作成するとプロセス全体が開始され、アップロードプロセスが完了すると終了します。

  • アップロードインスタンスを作成します。 Constructorメソッドを呼び出すか、TableTunnelを使用してUploadインスタンスを作成できます。

    • 同期モードでリクエストを送信します。

    • サーバーはアップロードインスタンスのセッションを作成し、アップロードインスタンスを識別するための一意のアップロードIDを生成します。 クライアントでgetIdコマンドを実行して、アップロードIDを取得できます。

  • データのアップロード:

    • 同期モードでリクエストを送信します。

    • openRecordWriterメソッドを呼び出して、RecordWriterインスタンスを生成します。 blockIdパラメーターは、アップロードするデータを識別し、テーブル内のデータの位置を記述します。 blockIdの値の範囲は [0, 20000] です。 データのアップロードが失敗した場合は、blockIdパラメーターに基づいてデータを再アップロードできます。

  • アップロードの表示:

    • 同期モードでリクエストを送信します。

    • getStatusメソッドを呼び出して、現在のアップロードステータスを取得します。

    • getBlockListメソッドを呼び出して、アップロードされたブロックのリストを取得します。 サーバーに送信したブロックIDリストと結果を比較し、アップロードに失敗したブロックを再アップロードします。

  • エンドアップロード:

    • 同期モードでリクエストを送信します。

    • commit(Long[] blocks) メソッドを呼び出します。 ブロックパラメータは、アップロードされたブロックを示します。 サーバは、ブロックリストを検証する。

    • この検証により、データの精度を高めることができる。 提供されたブロックリストがサーバ上のブロックリストと一致しない場合、エラーが返される。

    • コミット操作が失敗した場合は、もう一度お試しください。

  • 状態の説明:

    1. UNKNOWN: サーバーがセッションを作成するときの初期状態です。

    2. NORMAL: アップロードセッションが作成されました。

    3. CLOSING: completeメソッドを呼び出してアップロードセッションを終了すると、サーバーは状態をCLOSINGに変更します。

    4. CLOSED: アップロードが完了しました。 データは、結果テーブルが配置されているディレクトリに移動されます。

    5. EXPIRED: アップロードセッションがタイムアウトしました。

    6. CRITICAL: サービスエラーが発生しました。

説明
  • 同じアップロードセッション内で使用されるブロックIDは一意である必要があります。 ブロックIDを使用してRecordWriterを開き、データを書き込み、closeメソッドとcommitメソッドを呼び出す場合、このブロックIDを使用して別のRecordWriterを開くことはできません。

  • ブロックの最大サイズは100 GBです。 各ブロックに64 MBを超えるデータを保存することを推奨します。

  • サーバー上の各セッションのTTLは24時間です。

  • データをアップロードすると、RecordWriterが8 KBのデータを書き込むたびにネットワークアクションがトリガーされます。 120秒以内にネットワークアクションがトリガーされない場合、サーバーは接続を閉じ、RecordWriterは使用できなくなります。 データをアップロードするには、新しいRecordWriterを開く必要があります。

  • openBufferedWriterを使用してデータをアップロードすることを推奨します。 この操作では、blockIdの詳細は表示されず、内部データキャッシュが含まれます。 ブロックのアップロードに失敗すると、Writerは自動的にブロックを再アップロードします。 詳細については、「BufferedWriterを使用したデータのアップロード」をご参照ください。