DataWorks提供的MaxCompute SQL節點,可用於周期性調度MaxCompute的SQL任務,並支援與其他類型節點整合以及聯合調度。MaxCompute SQL任務採用類似SQL的文法,適用于海量資料(TB級)但即時性要求不高的分散式處理情境。本文為您介紹在DataWorks上開發MaxCompute SQL節點任務。
節點介紹
MaxCompute SQL用於處理和查詢MaxCompute中的資料,支援常見的SQL操作,例如SELECT、INSERT、UPDATE、DELETE等,以及特定的MaxCompute文法和函數。使用ODPS SQL,您可以編寫類似於SQL的語句進行查詢和處理資料,而無需編寫複雜的資料處理邏輯,SQL文法詳情請參見SQL概述。
前提條件
已為DataWorks工作空間綁定MaxCompute計算資源。
(可選,RAM帳號需要)進行任務開發的RAM帳號已被添加至對應工作空間中,並具有開發或空間管理員(許可權較大,謹慎添加)角色許可權,新增成員的操作詳情請參見為工作空間增加空間成員。
說明如果您使用的是主帳號,則忽略該添加操作。
使用限制
使用MaxCompute SQL節點進行SQL開發的限制如下:
分類 | 說明 |
注釋使用 | 支援 更多詳情參見MaxCompute SQL注釋。 另外,還有以下注釋限制。
|
SQL下發 | ODPS SQL不支援單獨使用SET、USE語句,必須和具體的SQL語句一起執行。 |
SQL開發 | SQL代碼大小不能超過128 KB,SQL命令條數不能超過200條。 |
查詢結果 | 僅支援SELECT和WITH起始的SQL語句輸出格式化的結果集。 查詢結果有如下限制:
說明 如您遇到查詢結果限制,可以通過以下辦法下載查詢結果到本地進行查看:
|
注意事項
請確保執行MaxCompute SQL任務的帳號具備對應MaxCompute專案的相關許可權,詳情請參見DataWorks On MaxCompute許可權控制、MaxCompute許可權。
MaxCompute的SQL任務執行依賴Quota資源,如果您的任務執行時間較久,請前往MaxCompute控制台查看Quota資源消耗,確儲存在資源來執行任務。詳情請參見:計算資源-Quota管理。
開發MaxCompute SQL節點任務時,若涉及特殊參數(如OSS地址)必須使用雙引號包裹,未添加引號會導致任務解析異常,進而引發任務執行失敗。
DataWorks上不同環境運行關鍵字(SET、USE)相關語句時,執行順序不同。詳情請參見附錄:不同環境下SQL執行順序。
部分極端情況下(如伺服器異常斷電、主備切換等),DataWorks可能無法徹底終止MaxCompute的相關任務進程,此時請前往MaxCompute計算資源對應專案中終止作業。
建立MaxCompute SQL節點
建立入口參考:建立MaxCompute SQL節點。
開發MaxCompute SQL節點
在MaxCompute SQL節點編輯頁面,執行如下開發操作。
開發SQL代碼
DataWorks提供調度參數,可實現調度情境下代碼動態入參,您可在MaxCompute SQL節點中通過${變數名}的方式定義代碼中的變數,並在調度配置的調度參數處,為該變數賦值。調度參數支援的格式,詳情請參見調度參數支援格式。MaxCompute 的SQL命令類似於標準SQL文法,支援DDL、DML和DQL語句以及特定的MaxCompute文法。詳細文法和樣本請參見SQL概述。
根據不同的情境需求,為您提供以下三種操作樣本:
MaxCompute 2.0擴充函數使用到新資料類型時,您需要在該函數的SQL語句前加
SET odps.sql.type.system.odps2=true;,並與SQL一起提交運行,以便正常使用新資料類型。2.0資料類型詳情請參見2.0資料類型版本。MaxCompute SQL語句在資料開發與營運中心環境的執行次序不同。如需瞭解,請參見附錄:不同環境下SQL執行順序。
建立表
您可使用CREATE TABLE語句建立非分區表、分區表、外部表格及聚簇表,詳情請參見CREATE TABLE。SQL樣本如下:
--建立一張分區表students
CREATE TABLE IF NOT EXISTS students
( id BIGINT,
name STRING,
age BIGINT,
birth DATE)
partitioned BY (gender STRING); 插入資料
您可使用INSERT INTO或INSERT OVERWRITE語句向目標表中插入更新資料,詳情請參見插入或覆寫資料(INSERT INTO | INSERT OVERWRITE)。
請盡量避免使用INSERT INTO語句插入資料,可能會造成不可預料的資料重複。推薦您使用INSERT OVERWRITE的方式,詳情請參見插入或覆寫資料。
SQL樣本如下:
--插入資料
INSERT OVERWRITE students PARTITION(gender='boy') VALUES (1,'ZhangSan',15,DATE '2008-05-15') ;INSERT語句可觸發對比DDL欄位,可用來檢查對比SELECT子句SQL語句與寫入目標表欄位之間的DDL對比。
暫不支援MaxCompute專案開啟schema三層模型,但租戶層級不開啟的情況。

查詢資料
您可使用SELECT語句實現巢狀查詢、分組查詢、排序等操作,詳情請參考SELECT文法。SQL樣本如下:
--開啟全表掃描,僅此Session有效
SET odps.sql.allow.fullscan=true;
--查詢所有男生的資訊,並按照ID進行升序排序
SELECT * FROM students WHERE gender='boy' ORDER BY id;RAM使用者預設沒有生產表查詢許可權,生產表查詢許可權請前往資訊安全中心申請,DataWorks上MaxCompute資料許可權預設以及存取控制,詳情請參見MaxCompute資料許可權控制詳情。MaxCompute命令授權詳情請參見通過命令系統管理使用者許可權。
使用SQL函數
MaxCompute支援使用內建函數和自訂函數進行資料開發及分析,您可根據業務需求建立使用SQL函數。內建函數詳情請參見內建函數概述,自訂函數詳情請參見MaxCompute UDF概述。下面樣本為您介紹如何使用SQL函數。
內建函數:內建函數為MaxCompute自身預置的函數,您可以直接調用。基於上述建立表、插入資料及查詢資料樣本,使用
dateadd函數對birth列按照指定單位和幅度變化,命令樣本如下:--開啟全表掃描,僅此Session有效 SET odps.sql.allow.fullscan=true; SELECT id, name, age, birth, dateadd(birth,1,'mm') AS birth_dateadd FROM students;自訂函數(UDF):使用自訂函數時,您需要自行編寫函數代碼、上傳為資源並註冊函數,具體操作請參見資源管理。
調試MaxCompute SQL節點
在節點編輯頁右側的調試配置中配置相關參數。
參數
配置說明
計算資源
選擇您已綁定的MaxCompute計算資源。
計算配額
選擇您所建立的計算配額(Quota),為計算作業提供所需計算資源(CPU及記憶體)。
如無可用計算配額,可在下拉式清單中單擊建立計算配額,在MaxCompute控制台建立配置Quota。
資源群組
選擇與計算資源測試連通性成功的調度資源群組。詳情請參見網路連通方案。
在工具列的參數對話方塊中選擇已建立的MaxCompute資料來源,單擊運行MaxCompute SQL任務。
返回結果查看
運行結果會直接以試算表的形式展示。您可以在DataWorks中執行操作,或者在試算表中開啟,也可以自由複製內容粘貼至本地Excel中。
說明由於國際標準組織發布的中國時區資訊調整,通過DataWorks執行相關SQL時,日期顯示某些時間段會存在時間差異:1900~1928年的日期時間差異為5分52秒,1900年之前的日期時間差異為9秒。
作業記錄查看:您可在運行結果的
頁簽,單擊查看LogView連結,詳情請參見使用Logview 2.0查看作業運行資訊。返回結果排序:您可在運行結果頁面對應的欄位上單擊下拉框,在排序中選擇升降序,單擊確認即可完成返回結果排序。
後續步驟
附錄:不同環境下SQL執行順序
MaxCompute SQL節點在DataWorks上不同環境運行關鍵字(SET、USE)相關語句時,執行順序不同。
在資料開發Data Studio中運行:將合并當前任務代碼內所有的關鍵字(SET、USE)語句,作為所有SQL的前置語句。
在調度環境運行:將按照實際編寫順序執行。
假設在節點中定義的代碼如下。
SET a=b;
CREATE TABLE name1(id string);
SET c=d;
CREATE TABLE name2(id string);不同環境執行順序如下:
執行SQL | 資料開發Data Studio | 調度營運 |
第一條SQL語句 | | |
第二條SQL語句 | | |
相關文檔
如果您想瞭解更多MaxCompute SQL任務樣本,可進入如下連結進行瞭解:
表徵圖喚起發布流程,通過該流程將任務發布至生產環境。專案目錄下的節點只有在發布至生產環境後,才會進行周期性調度。