全部產品
Search
文件中心

MaxCompute:使用本地用戶端(odpscmd)串連

更新時間:Jun 27, 2024

如果您習慣使用命令列工具或者需要快速執行任務且不需要圖形介面,建議您使用MaxCompute用戶端訪問MaxCompute專案並執行命令。MaxCompute用戶端直接在您的本機電腦上運行,提供了一個簡單且高效的方式來執行命令和管理MaxCompute服務。本文為您介紹下載、安裝、配置和運行用戶端並提供用戶端相關使用說明資訊。

前提條件

在使用MaxCompute用戶端前,請您確認已滿足如下條件:

  • 待安裝MaxCompute用戶端的裝置已安裝Java 8或以上版本。

  • 已建立MaxCompute專案。

    更多建立MaxCompute專案操作,請參見建立MaxCompute專案

  • 使用MaxCompute用戶端的RAM使用者已被添加至MaxCompute專案所屬的DataWorks工作空間。

    更多添加工作空間成員操作,請參見授權給其他使用者

使用限制

MaxCompute用戶端從v0.28.0版開始支援JDK 1.9,v0.28.0以下版本只支援JDK 1.8。您可以啟動MaxCompute用戶端後,在命令列介面查看用戶端版本號碼。更多啟動用戶端操作,請參見運行MaxCompute用戶端

費用說明

使用MaxCompute用戶端串連專案不收費,但是通過用戶端執行的操作可能會觸發MaxComput計費。例如,當您使用用戶端提交一個SQL查詢和寫入命令,此SQL命令在MaxCompute上運行會消耗計算資源,同時寫入資料會佔用儲存空間,將產生計算費用和儲存費用。MaxCompute計費詳情請參見計費項目與計費方式概述

注意事項

  • MaxCompute用戶端的輸出格式不承諾向前相容,不同版本間的用戶端命令格式及行為有差異,請勿依賴用戶端的輸出格式執行任何解析工作。更多用戶端版本,請參見aliyun-odps-console

  • 當您通過MaxCompute用戶端首次執行tunnel download命令時,MaxCompute用戶端會為您在當前裝置的用戶端安裝目錄plugins/dship下建立一個session檔案夾,用於存放日誌。如果多名使用者共用同一裝置執行tunnel download命令時,為確保資料安全,可以通過如下方式解決該問題:

    • 通過裝置自身的檔案夾許可權管理功能,管控session檔案夾許可權。

    • tunnel download命令中添加-sd <新session檔案夾名稱>-session-dir <新session檔案夾名稱>參數,將資料下載至其他session檔案夾。更多tunnel download命令資訊,請參見Download

  • MaxCompute用戶端的命令列使用兩個減號(--)作為注釋。

  • 用戶端預設編碼為UTF-8,因此您需要注意您原生環境編碼。若本機環境編碼不是UTF-8,則當您通過用戶端查詢MaxCompute表資料傳回值有中文可能會出現亂碼或者您通過用戶端執行Tunnel命令上傳本機資料檔案到MaxCompute,也可能會出現中文亂碼。

安裝並配置MaxCompute用戶端

說明

用戶端從v0.27.0版本開始支援MaxCompute 2.0新資料類型,推薦使用新資料類型。支援的資料類型列表,請參見2.0資料類型版本

安裝並配置MaxCompute用戶端的操作流程如下:

  1. 下載MaxCompute用戶端安裝包(Github)

    說明
    • 您可以通過上方連結進入用戶端發布介面,下載最新版本的MaxCompute用戶端安裝包(odpscmd_public.zip)。

    • 如果上方連結無法下載,您可以嘗試單擊此處的MaxCompute用戶端安裝包(OSS)進行下載。更多關於Github連結訪問失敗的問題,推薦您直接在搜尋引擎中尋找相關解決方案。

  2. 解壓下載的安裝包檔案,得到binconflibplugins檔案夾。

  3. 進入conf檔案夾,配置odps_config.ini檔案。

    odps_config.ini檔案中使用井號(#)作為注釋。參數說明如下。

    參數

    是否必填

    描述

    樣本

    project_name

    訪問的目標MaxCompute專案名稱。

    如果您建立了標準模式的工作空間,在配置project_name時,請注意區分生產環境與開發環境(_dev)的專案名稱,請參見必讀:簡單模式和標準模式的區別

    您可以登入MaxCompute控制台,在工作區> 專案管理頁面擷取MaxCompute專案名稱。

    doc_test_dev

    access_id

    阿里雲帳號或RAM使用者的AccessKey ID。

    您可以進入AccessKey管理頁面擷取AccessKey ID。

    access_key

    AccessKey ID對應的AccessKey Secret。

    您可以進入AccessKey管理頁面擷取AccessKey Secret。

    end_point

    MaxCompute服務的串連地址。

    您需要根據建立MaxCompute專案時選擇的地區以及網路連接方式配置Endpoint。各地區及網路對應的Endpoint值,請參見Endpoint

    重要
    • Endpoint用於MaxCompute服務,Tunnel Endpoint用於MaxCompute的Tunnel服務,此處請填寫Endpoint。

    • 如果Endpoint配置有誤,會出現無法訪問錯誤,請務必仔細確認。

    http://service.cn-hangzhou.maxcompute.aliyun.com/api

    log_view_host

    Logview地址。您可以通過該地址查看作業的詳細運行資訊,並為報錯處理提供依據。固定取值為:http://logview.odps.aliyun.com。

    說明

    推薦您配置該參數,如果不配置該參數,在作業報錯時無法快速定位問題。

    http://logview.odps.aliyun.com

    https_check

    是否開啟HTTPS訪問機制,對訪問MaxCompute專案的請求進行加密。取值範圍如下:

    • True:採用HTTPS機制。

    • False:採用HTTP機制。

    預設值為False。

    True

    data_size_confirm

    輸入資料量的最大值,單位為GB。取值範圍無限制。推薦設定為100 GB。

    100

    update_url

    預留參數,暫無需關注。

    use_instance_tunnel

    是否使用InstanceTunnel下載SQL執行結果。取值範圍如下:

    • True:使用InstanceTunnel下載SQL執行結果。

    • False:不使用InstanceTunnel下載SQL執行結果。

    預設值為False。

    True

    instance_tunnel_max_record

    用戶端返回的SQL執行結果的最大記錄數。如果use_instance_tunnel值為True,需要配置該參數。最大值為10000。

    10000

    tunnel_endpoint

    Tunnel服務的外網訪問連結。如果您未配置Tunnel Endpoint,Tunnel會自動路由到MaxCompute服務所在網路對應的Tunnel Endpoint。如果您配置了Tunnel Endpoint,則以配置為準,不進行自動路由。

    各地區及網路對應的Tunnel Endpoint值,請參見Endpoint

    http://dt.cn-hangzhou.maxcompute.aliyun.com

    set.<key>

    設定MaxCompute專案的屬性。

    更多屬性資訊,請參見屬性列表

    set.odps.sql.decimal.odps2=true

    說明

    請確保上述資訊配置正確,若資訊配置錯誤,會導致專案串連失敗。

運行MaxCompute用戶端

MaxCompute用戶端可通過如下方式啟動,您可以任選其中一種:

方式一:安裝包的指令檔

在MaxCompute用戶端安裝路徑下的bin檔案夾中,雙擊odpscmd.bat檔案(Windows系統)或者雙擊odpscmd檔案(macOS系統),即可啟動MaxCompute用戶端。返回如下資訊,表明已成功串連MaxCompute專案。image.png

方式二:系統的命令列執行視窗

在系統的命令列執行視窗,進入MaxCompute用戶端安裝路徑下的bin目錄,執行odpscmd命令(Windows系統)或sh odpscmd(Linux系統或Mac系統),即可啟動MaxCompute用戶端。返回如下資訊,表明已成功串連MaxCompute專案。

說明

在Ubuntu執行sh odpscmd會提示報錯,請您使用./odpscmd命令嘗試啟動。

image.png

如果您通過系統的命令列視窗啟動MaxCompute用戶端,可以指定參數來執行命令,更多參數資訊,請參見參考:啟動參數

MaxCompute用戶端相關操作

擷取全部命令協助

您可以通過如下方式快速擷取MaxCompute用戶端的命令協助,您可以任選其中一種:

在MaxCompute用戶端查看命令協助資訊

  • 查看全部命令的協助資訊。

    odps@project_name>help;
    --等價於如下命令。
    odps@project_name>h;
  • 通過指定關鍵字查看相關命令協助資訊。

    例如擷取與表操作相關的命令協助。

    odps@project_name>help table;
    --返回結果如下。
    Usage: alter table <tablename> merge smallfiles
    Usage: export table <tablename>
    Usage: show tables [in <project_name>] [like '<prefix>']
           list|ls tables [-p,-project <project_name>]
    Usage: describe|desc [<projectname>.]<tablename> [partition(<spec>)]
    Usage: read [<project_name>.]<table_name> [(<col_name>[,..])] [PARTITION (<partition_spec>)] [line_num]
    重要

    read命令屬於SQL文法,涉及收費詳細說明請參考SQL收費標準

在系統的命令列執行視窗查看命令協助資訊

在系統的命令列執行視窗,切換到MaxCompute用戶端安裝路徑下的bin目錄,執行如下命令查看全部命令的協助資訊。在命令列執行視窗啟動MaxCompute用戶端時,您可以指定一系列參數,參數資訊請參見參考:啟動參數

...\odpscmd\bin>odpscmd -h

擷取當前登入使用者資訊

您可以在運行MaxCompute用戶端後執行如下命令擷取當前登入使用者的資訊。

odps@project_name>whoami;

返回結果說明如下。

  • Name:當前登入的帳號資訊。

  • Source IP:MaxCompute用戶端所在裝置的IP地址。

  • End_Point:MaxCompute服務的串連地址。

  • Project:MaxCompute專案的名稱。

  • Schema:MaxCompute專案下的Schema。

退出MaxCompute用戶端

您可以在運行MaxCompute用戶端後執行如下命令退出。

odps@project_name>quit;
--等價於如下命令。
odps@project_name>q;

下一步

登入MaxCompute用戶端後,即可在MaxCompute專案內執行SQL命令,請參見通過用戶端使用MaxCompute

說明

MaxCompute用戶端支援的詳細命令文法資訊,請參見常用命令列表SQL命令及函數

常見報錯

配置完odps_config.ini檔案後啟動MaxCompute用戶端,常見報錯如下:

  • 報錯:no java found

    • 可能原因:

      您運行MaxCompute用戶端的機器未安裝Java。

    • 解決方案:

      請您在運行MaxCompute用戶端的機器安裝Java,並配環境變數。

      說明

      MaxCompute用戶端從v0.28.0版本起開始支援JDK 1.9,之前版本只支援JDK 1.8。

  • 報錯:找不到或無法載入主類 com.aliyun.openservices.odps.console.ODPSConsole

    • 可能原因:

      您可能下載了兩次用戶端安裝包,第二次的時候目錄被自動重新命名為odpscmd_public (1),目錄名稱裡包含了空格等字元,導致路徑識別錯誤。

    • 解決方案:

      刪除目錄名稱中的空格等字元。

  • 報錯:Accessing project '<projectname>' failed: ODPS-0420111: Project not found - '<projectname>'.

    • 可能原因:

      odps_config.ini設定檔中的專案名稱填寫錯誤。

    • 解決方案:

      請您登入MaxCompute控制台,在工作區>專案管理頁面擷取已建立正確的MaxCompute專案名稱後,修改odps_config.ini設定檔。

  • 報錯:Accessing project '<projectname>' failed: ODPS-0420095: Access Denied - Authorization Failed [4002], You don't exist in project <projectname>.

  • 報錯:Accessing project '<projectname>' failed: { "Code": "InvalidProjectTable", "Message": "The specified project or table name is not valid or missing."}Accessing project '<projectname>' failed: connect timed out

    • 可能原因:

      end_point參數值填寫錯誤。例如您在本機電腦上使用MaxCompute用戶端串連專案,您卻使用了阿里雲傳統網路串連方式下的Endpoint(外網環境使用了內網Endpoint)或填入了Tunnel Endpoint。

    • 解決方案:

      請您參照Endpoint文檔,選擇與您要串連專案所屬地區和網路環境相符的Endpoint。

      說明

      Endpoint用於MaxCompute服務,Tunnel Endpoint用於MaxCompute的Tunnel服務,end_point參數值應填寫Endpoint,請不要填入Tunnel Endpoint。

  • 報錯:Accessing project '<projectname>' failed: <endpoint>

    • 可能原因:

      end_point參數值填寫錯誤。例如您需要填寫華東1(杭州)地區的外網Endpoint(http://service.cn-hangzhou.maxcompute.aliyun.com/api),您卻輸入為了http://service.ch-hangzhou.maxcompute.aliyun.com/api

    • 解決方案:

      請您參照Endpoint文檔,複製您要串連專案所屬地區和網路環境相符的Endpoint,建議不要手動輸入。

參考:啟動參數

在系統的命令列執行視窗,您可以通過指定一系列參數快速執行命令,命令使用方法如下。

Usage: odpscmd [OPTION]...
where options include:
    --help                                  (-h)for help
    --config=<config_file>                  specify another config file
    --project=<prj_name>                    use project
    --endpoint=<http://host:port>           set endpoint
    -k <n>                                  will skip begining queries and start from specified position
    -r <n>                                  set retry times
    -f <"file_path;">                       execute command in file
    -e <"command;[command;]...">            execute command, include sql command

啟動參數說明如下。

命令

說明

命令樣本

--help-h

擷取MaxCompute用戶端的全部命令協助資訊。

odpscmd --help

--config

指定設定檔odps_config.ini的路徑。預設設定檔的路徑是odpscmd_public/conf/odps_config.ini

odpscmd --config=D:/odpscmd/conf/odps_config.ini

--project

指定訪問的MaxCompute專案名稱。

odpscmd --project=doc_test

--endpoint

指定串連MaxCompute服務的Endpoint資訊。更多Endpoint資訊,請參見Endpoint

odpscmd --endpoint=http://service.cn-shanghai.maxcompute.aliyun.com/api

-k

運行從指定位置開始的語句。當n≤0時,從第一條語句開始執行。每條語句以分號(;)分隔。

忽略前兩條語句,直接從第三條語句開始執行。odpscmd -k 3 -e "drop table table_name;create table table_name (dummy string);insert overwrite table table_name select count(*) from table_name;"

-r

設定作業運行失敗時的重試次數。

odpscmd -r 2 -e "select * from sale_detail;select * from table_test;"

-f

指定讀取的檔案。

  1. 準備本地指令檔script.txt,假設存放在D盤,檔案內容如下。

    drop table if exists test_table_mj;
    create table test_table_mj (id string, name string);
    drop table test_table_mj;
  2. 在系統命令列視窗,換到MaxCompute用戶端安裝路徑下的bin目錄,運行如下命令。

    ..\odpscmd\bin>odpscmd -f D:/script.txt;

-e

指定執行的命令。

odpscmd -e "select * from sale_detail;"

在Shell(或Windows命令列)執行視窗,使用者可能需要使用odpscmd -e <SQL語句>執行得到的動態傳回值,Shell的變數會擷取這個動態傳回值,然後在Shell中執行後續作業。此情境需要傳回值不包含運行資訊、表頭等額外資訊。為便於Shell調用,您需要配置odps_config.ini檔案中的use_instance_tunnel參數值為false,關閉Instance Tunnel服務。然後執行set odps.sql.select.output.format={"needHeader":false,"fieldDelim":" "}; 命令,關閉表頭顯示。

例如表noheader中有一列三行資料,為1、2、3。執行如下命令,將計算結果重新導向stdout到目標控制代碼,計算結果僅包含具體資料,不包含其他額外資訊:

--Windows命令列執行視窗運行命令如下。
...\odpscmd\bin>odpscmd -e "set odps.sql.select.output.format={""needHeader"":false,""fieldDelim"":"" ""};select * from noheader;" >D:\test.txt
--返回結果會儲存在D:\test.txt中。

--Shell執行視窗運行命令如下。
/Users/.../odpscmd/bin/odpscmd -e "set odps.sql.select.output.format={\"needHeader\":false,\"fieldDelim\":\"\"};select * from noheader;" >/Users/A/temp/test.txt 
--返回結果會儲存在/Users/A/temp/test.txt中。
--返回結果如下。
1
2
3

參考:版本更新記錄

MaxCompute用戶端近期版本的更新說明如下,詳細資料請單擊對應版本連結擷取。

版本

變更類型

描述

v0.47.0-public

新功能

  • HTTP命令:新增HTTP命令,使得使用者能夠便捷地以目前使用者的身份發起HTTP請求。

  • 保持會話變數:新增keep-session-variables啟動參數。開啟後,執行USE命令切換專案時,之前設定的會話變數將不會被清除。例如,set a=b,即使在不同的專案之間切換,這些設定也會被保持。

  • Tunnel命令升級:

    • tunnel uploadtunnel download 命令新增-qn 選項,用於指定訪問MaxCompute使用的Tunnel Quota名稱。

    • tunnel upload命令新增-dfp選項,用於設定上傳DATETIME類型文本的格式。

    Tunnel命令詳情,請參見Tunnel命令

v0.46.5-public

新功能

  • 支援USE功能 ,保持之前設定的SESSION層級Flag。

  • Tunnel命令升級

    • 支援tunnel upsert命令。詳情請參見Tunnel命令

    • 下載行級許可權的表時,返回執行資料過濾SQL的執行資訊。

v0.45.1-public

新功能

支援MaxCompute JSON資料類型MaxCompute TIMESTAMP_NTZ資料類型

v0.43.2-public

新功能

  • 支援建立External Volume。

  • Show命令支援查詢當前MaxCompute專案中所有內建函數、或符合某規則的內建函數的資訊。

v0.40.10-public

缺陷修複

刪除Log4j依賴。

v0.40.8-public

新功能

支援專案按Schema儲存。更多資訊請參見Schema操作

v0.37.5-public

新功能

支援複雜資料類型通過Tunnel上傳、下載。

v0.37.4-public

功能增強

  • 最佳化命令對應的協助資訊。

  • desc extended partition命令支援返回更多分區屬性資訊。

v0.36.0-public

新功能

支援建立External Project串連DLF(Data Lake Formation),實現湖倉一體功能。

缺陷修複

修複下載TIMESTAMP類型資料時,納秒(nano)部分處理不正確的問題。