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

MaxCompute:使用方法ガイド

最終更新日:Jun 23, 2026

このトピックでは、トンネルコマンドの機能と、それらのコマンドによるデータのアップロードおよびダウンロード方法について説明します。

対応ツール

Tunnel コマンドは、odpscmd および MaxCompute Studio で実行できます。詳細については、「ローカルクライアント (odpscmd) を使用した接続」および「MaxCompute Studio の概要」をご参照ください。

トンネルコマンドの機能

クライアントで利用可能なトンネルコマンドは、Dship ツールに代わるものです。これらのコマンドを使用して、データをアップロードおよびダウンロードできます。コマンドは次のとおりです:

  • アップロード:ローカルファイルから MaxCompute テーブルにデータをアップロードします。各アップロード操作では、単一のテーブルまたは単一のパーティションにデータを書き込むことができます。パーティションテーブルの場合、宛先パーティションを指定する必要があります。多段パーティション化テーブルの場合、最下位レベルのパーティションを指定する必要があります。詳細については、「アップロード」をご参照ください。

  • ダウンロード:MaxCompute テーブルのデータまたは特定のインスタンスの結果をローカルファイルにダウンロードします。各ダウンロード操作では、1つのテーブルまたは1つのパーティションを1つのファイルにダウンロードできます。パーティションテーブルの場合、ソースパーティションを指定する必要があります。多段パーティション化テーブルの場合、最下位レベルのパーティションを指定する必要があります。詳細については、「ダウンロード」をご参照ください。

  • レジューム:ネットワークの問題や Tunnel サービスのエラーでアップロードが失敗した場合、Resume コマンドを使用してファイルのアップロードを続行できます。このコマンドは、以前のアップロード操作を再開します。現在、Resume コマンドはダウンロード操作をサポートしていません。詳細については、「レジューム」をご参照ください。

  • Show:履歴タスクに関する情報を表示します。詳細については、「Show」をご参照ください。

  • パージ:セッションディレクトリをクリアします。デフォルトでは、このコマンドは過去3日間のログを削除します。詳細については、「パージ」をご参照ください。

  • Help:ヘルプ情報を表示します。各コマンドとオプションで、短いコマンド形式がサポートされています。

  • アップサート:Update と Insert のセマンティクスを組み合わせてデータを書き込みます。このコマンドは、Transaction Table 2.0 テーブルでのみサポートされます。

    宛先テーブルに一致するデータが見つからない場合は、新しいデータが挿入されます。データがすでに存在する場合は、更新されます。

トンネルのアップロードとダウンロードの制限

  • 現在、トンネル機能およびトンネルソフトウェア開発キット (SDK) は、外部テーブルでの操作をサポートしていません。トンネルを使用して、データを MaxCompute の内部テーブルに直接アップロードできます。または、OSS Python SDK を使用してデータを OSS にアップロードし、MaxCompute で外部テーブルを作成してデータにマッピングすることもできます。外部テーブルの詳細については、「外部テーブルの概要」をご参照ください。

  • トンネルコマンドは、ARRAY、MAP、STRUCT 型のデータのアップロードまたはダウンロードをサポートしていません。

  • サーバーサイドでの各トンネルセッションのライフサイクルは24時間です。セッションは作成後24時間以内に使用できます。また、プロセスやスレッド間で共有することもできます。ただし、同じ BlockId を再利用しないようにする必要があります。

    説明

    トンネルセッション:サーバーサイドでは、アップロードまたはダウンロードごとにセッションが作成され、操作を識別するための一意の UploadId または DownloadId が生成されます。サーバーサイドでのトンネルセッションのライフサイクルは24時間です。24時間経過すると、セッションは非アクティブになります。

  • セッションを使用してデータをダウンロードする場合、Alibaba Cloud アカウントが作成したセッションは、その Alibaba Cloud アカウントまたはその RAM ユーザーのみがダウンロードに使用できることに注意してください。

テーブルデータのアップロードとダウンロード

開始する前に、data.txt という名前のデータファイルを作成し、d:\data.txt に保存します。ファイルには、次のデータが含まれています。

shopx,x_id,100
shopy,y_id,200
shopz,z_id
説明

data.txt ファイルのデータの 3 行目は、作成されるパーティションテーブル sale_detail のスキーマと一致しません。sale_detail テーブルは3つの列で定義されていますが、この行には列が2つしかありません。

次の手順では、テーブルデータをアップロードおよびダウンロードする方法について説明します。

  1. MaxCompute クライアントで、次のステートメントを実行してパーティションテーブル sale_detail を作成し、パーティションを追加します。

    CREATE TABLE IF NOT EXISTS sale_detail(
          shop_name     STRING,
          customer_id   STRING,
          total_price   DOUBLE)
    PARTITIONED BY (sale_date STRING,region STRING);
    
    alter table sale_detail add partition (sale_date='201312', region='hangzhou');
  2. upload コマンドを使用して、data.txt データファイルをパーティションテーブル sale_detail にアップロードします。

    • コマンド例

      tunnel upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false;
    • 実行結果

      Upload session: 20230505xxxxxxxxxxxb0b02dbb6bd
      Start upload:d:\data.txt
      Using \r\n to split records
      Upload in strict schema mode: false
      Total bytes:42   Split input to 1 blocks
      2023-05-05 10:11:35     upload block: '1'
      ERROR: column mismatch -,expected 3 columns, 2 columns found, please check data or delimiter
      説明

      data.txt にはダーティデータが含まれているため、データのインポートは失敗します。セッション ID とエラーメッセージが返されます。

  3. 次のステートメントを実行して、データを確認します。

    • コマンド例

      select * from sale_detail where sale_date='201312';
    • 実行結果

      ID = 20230505xxxxxxxxxxxvc61z5
      +-----------+-------------+-------------+-----------+--------+
      | shop_name | customer_id | total_price | sale_date | region |
      +-----------+-------------+-------------+-----------+--------+
      +-----------+-------------+-------------+-----------+--------+
      説明

      ダーティデータが原因でデータのインポートが失敗し、テーブルは空のままです。

  4. show コマンドを使用して、失敗したアップロードのセッション ID を照会します。

    • コマンド例

      tunnel show history;
    • 実行結果

      20230505xxxxxxxxxxxb0b02dbb6bd  failed  'upload d:\data.txt sale_detail/sale_date=201312,region=hangzhou -s false'
  5. data.txt サンプルデータファイルを、sale_detail のテーブルスキーマと一致する次のデータが含まれるように変更します。

    shopx,x_id,100
    shopy,y_id,200
  6. resume コマンドを実行して、データのアップロードを再開します。このコマンドでは、20230505xxxxxxxxxxxb0b02dbb6bd は失敗したアップロードのセッション ID です。

    • コマンド例

      tunnel resume 20230505xxxxxxxxxxxb0b02dbb6bd --force;
    • 実行結果

      start resume
      20230505xxxxxxxxxxxb0b02dbb6bd
      Upload session: 20230505xxxxxxxxxxxb0b02dbb6bd
      Start upload:d:\data.txt
      Using \r\n to split records
      Upload in strict schema mode: false
      Resume 1 blocks 
      2023-05-05 10:32:39     upload block: '1'
      2023-05-05 10:32:40     upload block complete, block id: 1
      upload complete, average speed is 0 bytes/s
      OK
  7. 次のステートメントを実行して、データが正常にアップロードされたことを確認します。

    • コマンド例

      select * from sale_detail where sale_date='201312';
    • 実行結果

      ID = 20230505xxxxxxxxxxxx7afc9qcg
       +-----------+-------------+-------------+-----------+--------+
       | shop_name | customer_id | total_price | sale_date | region |
       +-----------+-------------+-------------+-----------+--------+
       | shopx     | x_id        | 100.0       | 201312    | hangzhou|
       | shopy     | y_id        | 200.0       | 201312    | hangzhou|
       +-----------+-------------+-------------+-----------+--------+
  8. download コマンドを実行し、sale_detail テーブルのデータをローカルファイル result.txt にダウンロードします。

    説明

    データがダウンロードされるローカルパスpathの命名規則は次のとおりです:

    • ファイルを MaxCompute クライアントの bin ディレクトリに直接保存するには、pathfilename.extension に設定します。

    • ファイルを D ドライブの test フォルダーなど、別のパスに保存するには、pathD:\test\filename.extension に設定します。

    • 同じ名前のローカルファイルが存在する場合、上書きされます。

    tunnel download sale_detail/sale_date=201312,region=hangzhou result.txt;
  9. result.txt ファイルの内容を確認します。ファイルに次の内容が含まれていれば、ダウンロードは成功です。

    説明

    ダウンロードされたファイルには、非パーティションフィールドの値のみが表示されます。

    shopx,x_id,100.0
    shopy,y_id,200.0

インスタンスデータのダウンロード

  • 方法1:tunnel download コマンドを使用して、特定のインスタンスの実行結果をローカルファイルにダウンロードします。

    1. SELECT ステートメントを実行して、sale_detail テーブルを照会します。

      select * from sale_detail;
      説明

      パーティションテーブル sale_detail でフルテーブルスキャンが無効になっている場合、このコマンドはエラー Table(xxxx) is full scan with all partitions, please specify partition predicates を返します。この問題の解決方法の詳細については、「付録:エラーコード」をご参照ください。

    2. 次のトンネルコマンドを実行して、実行結果をローカルファイルにダウンロードします。

      -- SELECT コマンドのインスタンス ID を表示します
      show p;
      
      -- ダウンロードコマンドを実行します
      tunnel download instance://20170724071705393ge3csfb8 result.txt;
  • 方法2:パラメーターを設定し、デフォルトで InstanceTunnel 経由で SQL クエリ結果が出力されるように構成します。

    MaxCompute クライアントで use_instance_tunnel オプションを有効にすると、SELECT クエリの結果は、デフォルトで InstanceTunnel を使用してダウンロードされます。これにより、MaxCompute プラットフォームから SQL クエリ結果を取得する際のタイムアウトエラーやデータ量の制限を回避できます。この設定は、次の2つの方法のいずれかで有効にできます。

    説明

    InstanceTunnel の制約と制限の詳細については、「InstanceTunnel の制約と制限」をご参照ください。

    • クライアントの最新バージョンでは、このオプションは odps_config.ini ファイルでデフォルトで有効になっており、instance_tunnel_max_record はデフォルトで 10000 に設定されています。

      # Instance Tunnel 経由で SQL 結果をダウンロードします
      use_instance_tunnel=true
      # Instance Tunnel を使用して SQL 結果をダウンロードする際の最大レコード数
      instance_tunnel_max_record=10000
      説明

      instance_tunnel_max_record パラメーターは、InstanceTunnel 経由でダウンロードする SQL クエリ結果の最大レコード数を指定します。このパラメーターを設定しない場合、レコード数の制限なくダウンロードできます。

    • set console.sql.result.instancetunnel=true コマンドを実行して、この機能を有効にします。

      • InstanceTunnel オプションを有効にします。

        set console.sql.result.instancetunnel=true;
      • SELECT クエリを実行します。

        select * from wc_in;

        次の結果が返されます:

        ID = 20170724081946458g14csfb8
        Log view:
        http://logview/xxxxx.....
        +------------+
        | key        |
        +------------+
        | slkdfj     |
        | hellp      |
        | apple      |
        | tea        |
        | peach      |
        | apple      |
        | tea        |
        | teaa       |
        +------------+
        A total of 8 records fetched by instance tunnel. Max record number: 10000
      説明

      InstanceTunnel を使用して SELECT クエリの結果を出力すると、システムは最終行にメッセージを出力します。この例では、インスタンスの実行結果として合計8レコードが返されました。同様に、set console.sql.result.instancetunnel = false コマンドを実行して、この機能を無効にすることもできます。