ODPS SQL採用類似SQL的文法,適用于海量資料(TB級)但即時性要求不高的分散式處理情境。
前提條件
您在工作空間配置頁面添加MaxCompute計算引擎執行個體後,當前頁面才會顯示MaxCompute目錄。詳情請參見建立並管理工作空間。背景資訊
因為每個作業從前期準備到提交等階段都需要花費較長時間,因此如果要求處理幾千至數萬筆事務的業務,您可以使用ODPS SQL順利完成。ODPS SQL是主要面向輸送量的OLAP應用。
使用限制
ODPS SQL節點的使用限制如下:
- ODPS SQL不支援單獨使用set、use語句,必須和具體的SQL語句一起執行,樣本如下。
set a=b; create table name(id string);
- ODPS SQL不支援關鍵字(set、use)語句後單獨加註釋,樣本如下。
create table name(id string); seta=b;--注釋 //ODPS SQL不支援在set語句後添加“--注釋”。 create table name1(id string);
- ODPS SQL不支援在已完結的語句結尾加註釋,樣本如下。 說明 SQL語句後添加英文分號(;),表示語句已完結。
select* --注釋//“select*”語句未完結,因此“--注釋”這個注釋可以添加。 fromdual;--注釋//“fromdual;”語句已完結,因此“--注釋”這個注釋不支援添加。 showtables;
- 資料開發與調度啟動並執行區別如下:
- 資料開發:合并當前任務代碼內所有的關鍵字(set、use)語句,作為所有SQL的前置語句。
- 調度運行:按照順序執行。
set a=b; create table name1(id string); set c=d; create table name2(id string);
運行結果如下表所示。執行SQL 資料開發 調度運行 第一條SQL語句 set a=b; set c=d; create table name1(id string);
set a=b; create table name1(id string);
第二條SQL語句 set a=b; set c=d; create table name2(id string);
set c=d; create table name2(id string);
- 調度參數配置必須是
key=value
的格式,且(=)前後不支援空格,樣本如下。time={yyyymmdd hh:mm:ss} --錯誤 a =b --錯誤
- 如果設定bizdate、date等關鍵字作為調度參數變數,格式必須是yyyymmdd。如果需要其它格式,請使用其它變數名稱,避免衝突,樣本如下。
bizdate=201908 --錯誤,不支援。
- 資料開發需要查詢結果,僅支援select和with起始的SQL語句,否則無結果輸出。
- 執行多條SQL語句時,請用分號(;)分隔,且需要換行。
- 錯誤樣本
create table1;create table2
- 正確樣本
create table1; create table2;
- 錯誤樣本
- MaxCompute 2.0擴充函數使用到新資料類型時,您需要在該函數的SQL語句前加
set odps.sql.type.system.odps2=true;
,並與SQL一起提交運行,以便正常使用新資料類型。 - SQL語句中添加註釋時,不支援在注釋中使用英文分號(;)。錯誤樣本:
create table1; --建立表格table1;再建立表格table2 create table2;
- 使用ODPS SQL節點進行SQL任務開發時,SQL代碼大小不能超過200KB,SQL命令條數不能超過200條。
操作步驟
進入資料開發頁面。
登入DataWorks控制台,切換至目標地區後,單擊左側導覽列的 ,在下拉框中選擇對應工作空間後單擊進入資料開發。
- 滑鼠移至上方至表徵圖,單擊 。您也可以找到相應的商務程序,按右鍵MaxCompute,選擇。
在建立節點對話方塊中,輸入節點名稱,並選擇路徑。
單擊確認。
- 在節點的編輯頁面,編輯並運行代碼。建立節點成功後,編寫符合文法的ODPS SQL代碼,SQL文法請參見SQL概述。說明 由於國際標準組織發布的中國時區資訊調整,通過DataWorks執行相關SQL時,日期顯示某些時間段會存在時間差異:1900~1928年的日期時間差異5分52秒,1900年之前的日期時間差異9秒。DataWorks不允許節點代碼中僅包含
set
語句。如果您需要運行SET語句,可以和其它SQL語句一起執行,如下所示。set odps.sql.allow.fullscan=true; select 1;
SET語句的詳情請參見SET操作。
以建立一張表並向表中插入資料,查詢結果為例,操作如下:
- 建立一張表test1。
CREATE TABLE IF NOT EXISTS test1 ( id BIGINT COMMENT '' , name STRING COMMENT '' , age BIGINT COMMENT '' , sex STRING COMMENT '');
- 插入準備好的資料。
INSERT INTO test1 VALUES (1,'張三',43,'男') ; INSERT INTO test1 VALUES (1,'李四',32,'男') ; INSERT INTO test1 VALUES (1,'陳霞',27,'女') ; INSERT INTO test1 VALUES (1,'王五',24,'男') ; INSERT INTO test1 VALUES (1,'馬靜',35,'女') ; INSERT INTO test1 VALUES (1,'趙倩',22,'女') ; INSERT INTO test1 VALUES (1,'周莊',55,'男') ;
- 查詢表資料。
select * from test1;
- SQL語句編輯完成後,單擊工具列中的表徵圖,系統會按照從上往下的順序執行SQL語句,並列印日誌。說明
- 如果當前工作空間綁定多個MaxCompute計算引擎,請選擇需要的MaxCompute引擎執行個體後,再執行查詢語句。
- 如果您選中的MaxCompute引擎執行個體使用的是隨用隨付預設資源群組,則可以在運行語句前,單擊工具列中的表徵圖,預估此次運行產生的費用(實際費用請以賬單為準)。
您在SQL中使用insert into
語句有可能造成不可預料的資料重複。雖然已經對insert into
語句取消SQL層級的重試,但仍然存在進行任務層級重試的可能性,請盡量避免使用insert into
語句。如果使用,作業記錄中會出現如下提示。在SQL中使用insert into語句有可能造成不可預料的資料重複,儘管對於insert into語句已經取消SQL層級的重試,但仍然存在進行任務層級重試的可能性,請盡量避免對insert into語句的使用! 如果繼續使用insert into語句,表明您已經明確insert into語句存在的風險,且願意承擔由於使用insert into語句造成的潛在的資料重複後果。
- 執行無誤後,單擊工具列中的表徵圖,儲存當前SQL代碼。
- 查看執行結果。DataWorks的查詢結果接入了試算表功能,方便您對資料結果進行操作。查詢的結果,會直接以試算表的形式展示。您可以在DataWorks中執行操作,或者在試算表中開啟,也可以自由複製內容粘貼至本地Excel中。
操作 描述 隱藏列 選中需要隱藏的一列或多列後,單擊隱藏列。 複製該行 左側選中需要複製的一行或多行後,單擊複製該行。 複製該列 頂部選中需要複製的一列或多列後,單擊複製該列。 複製選中 選中需要複製的內容後,單擊複製選中。 資料分析 單擊資料分析,即可跳轉至資料分析頁面。 搜尋 單擊搜尋後,在查詢結果的右上方會出現搜尋方塊,方便對錶中的資料進行搜尋。 下載 支援下載GBK和UTF-8兩種格式。
- 建立一張表test1。
- 單擊節點編輯地區右側的調度配置,配置節點的調度屬性。詳情請參見配置基礎屬性。
- 提交節點。重要 您需要設定節點的重跑屬性和依賴的上遊節點,才可以提交節點。
- 單擊工具列中的表徵圖。
- 在提交新版本對話方塊中,輸入變更描述並選中我確認繼續執行提交操作。如果出現輸入輸出和代碼血緣分析不匹配的警示,請確認是否忽略該警示,或是否需要調整依賴關係。
- 單擊確認。
如果您使用的是標準模式的工作空間,提交成功後,請單擊右上方的發布。具體操作請參見發布任務。 任務營運,詳情請參見周期任務基本營運操作。