內(nèi)建函數(shù)概述
MaxCompute自身預(yù)置了諸多函數(shù),可以滿足大部分業(yè)務(wù)場景的數(shù)據(jù)處理需求。本文為您介紹MaxCompute提供的函數(shù)類型及函數(shù)使用相關(guān)說明。
背景信息
MaxCompute預(yù)置的函數(shù)類型如下。
函數(shù)類型 | 說明 |
支持處理DATE、DATETIME、TIMESTAMP等日期類型數(shù)據(jù),實現(xiàn)加減日期、計算日期差值、提取日期字段、獲取當(dāng)前時間、轉(zhuǎn)換日期格式等業(yè)務(wù)處理能力。 | |
支持處理BIGINT、DOUBLE、DECIMAL、FLOAT等數(shù)值類型數(shù)據(jù),實現(xiàn)轉(zhuǎn)換進(jìn)制、數(shù)學(xué)運算、四舍五入、獲取隨機數(shù)等業(yè)務(wù)處理能力。 | |
支持在指定的開窗列中,實現(xiàn)求和、求最大最小值、求平均值、求中間值、數(shù)值排序、數(shù)值偏移、抽樣等業(yè)務(wù)處理能力。 | |
支持將多條輸入記錄聚合成一條輸出值,實現(xiàn)求和、求平均值、求最大最小值、求平均值、參數(shù)聚合、字符串連接等業(yè)務(wù)處理能力。 | |
支持處理STRING類型字符串,實現(xiàn)截取字符串、替換字符串、查找字符串、轉(zhuǎn)換大小寫、轉(zhuǎn)換字符串格式等業(yè)務(wù)處理能力。 | |
支持處理MAP、ARRAY、STRUCT及JSON類型數(shù)據(jù),實現(xiàn)去重元素、聚合元素、元素排序、合并元素等業(yè)務(wù)處理能力。其中JSON函數(shù)的使用限制請參見JSON函數(shù)的使用限制。 | |
支持處理STRING、BINARY類型的表數(shù)據(jù),實現(xiàn)加密、解密等業(yè)務(wù)處理能力。 | |
除上述函數(shù)之外,提供支持其他業(yè)務(wù)場景的函數(shù)。 |
各類型函數(shù)與開源函數(shù)的對照關(guān)系,請參見與Hive、MySQL、Oracle內(nèi)建函數(shù)對照表。
注意事項
在使用內(nèi)建函數(shù)時,需要注意:
內(nèi)建函數(shù)的入?yún)㈩愋汀⑷雲(yún)?shù)量、函數(shù)格式必須滿足函數(shù)語法要求,否則MaxCompute無法成功解析函數(shù),SQL運行會報錯。
如果內(nèi)建函數(shù)的入?yún)⑸婕?.0新數(shù)據(jù)類型(例如TINYINT、SMALLINT、INT、FLOAT、VARCHAR、TIMESTAMP或BINARY),您需要打開2.0新數(shù)據(jù)類型開關(guān),否則運行會報錯。開關(guān)打開方式如下:
Session級別:您需要在SQL語句前加上
set odps.sql.type.system.odps2=true;
,與SQL語句一起提交執(zhí)行。該配置僅對本次運行的SQL有效。Project級別:Project Owner可根據(jù)需要對MaxCompute項目進(jìn)行設(shè)置,等待10~15分鐘后才會生效。該配置對后續(xù)運行的所有SQL有效。
setproject odps.sql.type.system.odps2=true;
當(dāng)MaxCompute項目打開2.0新數(shù)據(jù)類型開關(guān)時,部分隱式類型轉(zhuǎn)換會被禁用,包括STRING轉(zhuǎn)換為BIGINT、STRING轉(zhuǎn)換為DATETIME、DOUBLE轉(zhuǎn)換為BIGINT、DECIMAL轉(zhuǎn)換為DOUBLE、DECIMAL轉(zhuǎn)換為BIGINT,都有精度損失或報錯的風(fēng)險。此時,您可以通過CAST函數(shù)執(zhí)行強制轉(zhuǎn)換解決該問題,或關(guān)閉2.0新數(shù)據(jù)類型開關(guān)。
當(dāng)自定義函數(shù)的名稱與內(nèi)建函數(shù)的名稱相同時,自定義函數(shù)會覆蓋同名的內(nèi)建函數(shù)。例如,MaxCompute中存在一個名稱為CONCAT的自定義函數(shù),則系統(tǒng)默認(rèn)會調(diào)用自定義的CONCAT,不會調(diào)用內(nèi)建函數(shù)CONCAT。如果您希望調(diào)用內(nèi)建函數(shù),需要在內(nèi)建函數(shù)前增加
::
符號,例如select ::concat('ab', 'c');
。如果MaxCompute項目的全局屬性設(shè)置不同,內(nèi)建函數(shù)運行的結(jié)果可能會不一致,您可以通過
setproject;
命令查看項目的全局屬性信息。
JSON函數(shù)的使用限制
目前支持的開發(fā)工具包括odpscmd客戶端和Studio,暫不支持DataWorks,Dataphin等外圍生態(tài),如果需要跟外部系統(tǒng)做組合使用時,請先確認(rèn)后再使用。使用odpscmd客戶端和Studio時需要關(guān)注以下內(nèi)容。
使用odpscmd客戶端
使用Studio
需要將客戶端升級到最新版本,否則無法使用
desc json_table
命令。需要將客戶端安裝路徑下的conf\odps_config.ini文件中的參數(shù)
use_instance_tunnel
設(shè)置為false,否則查詢會報錯。
Studio只支持查詢JSON類型的操作,不支持上傳、下載JSON類型數(shù)據(jù)。
如果表存在其他引擎讀取情況,比如Hologres等,目前不支持讀取JSON數(shù)據(jù)類型。
暫不支持對一張表新增JSON列。
暫不支持對JSON類型的比較操作,也不支持對JSON類型進(jìn)行
ORDER BY
、GROUP BY
或作為JOIN
的key等。目前JSON NUMBER的整數(shù)和小數(shù)分別使用BIGINT和DOUBLE類型進(jìn)行存儲。當(dāng)整數(shù)部分超出BIGINT范圍時會溢出,小數(shù)轉(zhuǎn)為DOUBLE時會損失精度。
生成JSON類型數(shù)據(jù)所用的字符串里不支持UNICODE
\u0000
。Java UDF和Python UDF暫不支持JSON類型。
目前JSON類型不支持Cluster表。
字符串函數(shù)的使用限制
以下函數(shù)只支持英文字符的轉(zhuǎn)換:
TRIM/RTRIM/LTRIM:trimChars只支持英文字符。
REVERSE:在Hive模式下只支持英文字符。
SOUNDEX:僅轉(zhuǎn)換英文字符。
TOLOWER:將字符串中的英文字符轉(zhuǎn)換為小寫形式。
TOUPPER:將字符串中的英文字符轉(zhuǎn)換為大寫形式。
INITCAP:將字符串中每個單詞首字母(英文字符)轉(zhuǎn)化為大寫形式,其余為小寫。