MaxCompute SQLは、開発プロセスで一般的に使用される他の機能を提供します。 これらの機能は、ビジネス要件に基づいて使用できます。 このトピックでは、CAST、DECODE、LEASTなど、これらの関数のコマンド構文とパラメーターについて説明します。 このトピックでは、これらの関数の使用方法の例も示します。
関数 | 説明 |
バイナリ値をBase64-encoded文字列に変換します。 | |
指定された範囲に含まれる値または含まれない値を返します。 | |
式の計算結果に基づいて値を返します。 | |
式の結果を指定されたデータ型に変換します。 | |
パラメーターリストの最初のnull以外の値を返します。 | |
GZIPアルゴリズムを使用して、STRING型またはBINARY型の入力パラメーターを圧縮します。 | |
STRINGまたはBINARYタイプの値の巡回冗長検査 (CRC) 値を計算します。 | |
| |
GZIPアルゴリズムを使用して、BINARY型の入力パラメーターを解凍します。 | |
IDカード番号に基づいて年齢を年単位で返します。 | |
IDカード番号に基づいて生年月日を返します。 | |
IDカード番号に基づいて性別を返します。 | |
現在のアカウントのIDを取得します。 | |
入力パラメーターの最大値を返します。 | |
入力パラメーターに基づいてハッシュ値を計算します。 | |
指定された条件がtrueかどうかをチェックします。 | |
入力パラメーターの最小値を返します。 | |
パーティションテーブル内の最大レベル1パーティションの名前を返します。 | |
2つの入力パラメーターの値が同じかどうかを確認します。 | |
値がnullのパラメーターの戻り値を指定します。 | |
入力変数の値を昇順でソートし、指定した位置にランク付けされた値を返します。 | |
指定されたパーティションがテーブルに存在するかどうかをチェックします。 | |
読み取られたすべての列値をサンプリングし、サンプリング条件を満たさない行を除外します。 | |
STRING型またはBINARY型の値のSHA-1ハッシュ値を計算します。 | |
STRING型またはBINARY型の値のSHA-1ハッシュ値を計算します。 | |
STRING型またはBINARY型の値のSHA-2ハッシュ値を計算します。 | |
指定したパラメーターグループを指定した行数に分割します。 | |
指定された区切り文字で文字列を分割し、キーと値のペアを返します。 | |
指定されたテーブルが存在するかどうかをチェックします。 | |
1行のデータを複数の行に変換します。 この関数は、列内の固定区切り文字で区切られた配列を複数の行に転置するユーザー定義のテーブル値関数 (UDTF) です。 | |
1行のデータを複数の行に変換します。 この関数は、列を行に転置するUDTFです。 | |
Base64-encoded文字列をバイナリ値に変換します。 | |
一意のIDを返します。 この関数は、UUID関数よりも効率的です。 | |
ランダムなIDを返します。 |
BASE64
構文
string base64(binary <value>)
説明
バイナリ値をBase64-encoded文字列に変換します。
パラメーター
value: 必須です。 変換する値であるBINARY型の値。
戻り値
STRING型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1:
cast ('alibaba' as binary)
のバイナリ結果をBase64-encoded文字列に変換します。 例:-- The return value is YWxpYmFiYQ==. select base64(cast ('alibaba' as binary));
例2: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select base64(null);
表現と表現の間
構文
<a> [NOT] between <b> and <c>
説明
フィールドaの値を返します。 値は、bとcの間の範囲に収まるか、収まる必要があります。
パラメーター
a: 必須です。 値を取得するフィールド。
bおよびc: 必須。 2つのパラメータは、値の範囲を指定する。 2つのパラメーターのデータ型は、パラメーターのデータ型と同じである必要があります。
戻り値
指定された範囲に含まれる値または含まれない値が返されます。
a、b、またはcパラメーターが空の場合、nullが返されます。
例
emp
テーブルには、次のデータが含まれます。| empno | ename | job | mgr | hiredate| sal| comm | deptno | 7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20 7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30 7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30 7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20 7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30 7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30 7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10 7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20 7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10 7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30 7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20 7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30 7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20 7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10 7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10 7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10 7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10
sal
が1000から1500までのデータを照会します。 例:select * from emp where sal between 1000 and 1500;
次の応答が返されます。
+-------+-------+-----+------------+------------+------------+------------+------------+ | empno | ename | job | mgr | hiredate | sal | comm | deptno | +-------+-------+-----+------------+------------+------------+------------+------------+ | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 00:00:00 | 1250.0 | 500.0 | 30 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 00:00:00 | 1250.0 | 1400.0 | 30 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 00:00:00 | 1500.0 | 0.0 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 00:00:00 | 1100.0 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 00:00:00 | 1300.0 | NULL | 10 | | 7956 | TEBAGE | CLERK | 7748 | 1982-12-30 00:00:00 | 1300.0 | NULL | 10 | +-------+-------+-----+------------+------------+------------+------------+------------+
ケースWHEN式
構文
MaxComputeは、次の
CASE WHEN
構文を提供します。case <value> when <value1> then <result1> when <value2> then <result2> ... else <resultn> end
case when (<_condition1>) then <result1> when (<_condition2>) then <result2> when (<_condition3>) then <result3> ... else <resultn> end
説明
valueまたは _conditionの計算結果に基づいて、resultの値を返します。
パラメーター
value: 必須です。 比較に使用される値。
_condition: 必須です。 比較に使用される条件。
result: 必須です。 戻り値。
戻り値
すべての結果値のデータ型がBIGINTおよびDOUBLEのみの場合、値はデータ型がDOUBLE型に変換された後に返されます。
STRING型の結果値が存在する場合、値は返される前にSTRING型に変換されます。 データ型変換がサポートされていない場合、エラーが返されます。 たとえば、BOOLEAN型のデータをSTRING型に変換することはできません。
他のデータ型間の変換は許可されません。
例
sale_detail
テーブルには、shop_name (STRING) 、customer_id (STRING) 、およびtotal_price (DOUBLE)
列が含まれます。 このテーブルには、次のデータが含まれます。+------------+-------------+-------------+------------+------------+ | shop_name | customer_id | total_price | sale_date | region | +------------+-------------+-------------+------------+------------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s3 | c3 | 100.3 | 2013 | china | | null | c5 | NULL | 2014 | shanghai | | s6 | c6 | 100.4 | 2014 | shanghai | | s7 | c7 | 100.5 | 2014 | shanghai | +------------+-------------+-------------+------------+------------+
例:
select case when region='china' then 'default_region' when region like 'shang%' then 'sh_region' end as region from sale_detail;
次の応答が返されます。
+------------+ | region | +------------+ | default_region | | default_region | | default_region | | sh_region | | sh_region | | sh_region | +------------+
CAST
構文
cast(<expr> as <type>)
説明
exprで指定されたデータソースのデータ型を、typeで指定されたデータ型に変換します。
パラメーター
expr: 必須です。 データ型を変換するデータソース。
type: 必須です。 データを変換するデータ型。 使用:
キャスト (bigintとしてダブル): DOUBLE型の値をBIGINT型に変換します。
cast(string as bigint)
: STRING型の値をBIGINT型に変換します。 文字列がINTEGER形式で表された数字で構成されている場合、文字列はBIGINT型に変換されます。 文字列がFLOATまたはEXPONENTIAL形式で表された数字で構成されている場合、文字列はDOUBLE型に変換され、次にBIGINT型に変換されます。デフォルトの日付形式
yyyy-mm-dd hh:mi:ss
は、cast(string as datetime)
およびcast(datetime as string)
に使用されます。
戻り値
指定されたデータ型の値が返されます。
setproject odps.function.strictmode=false
を指定した場合、文字の前の数字が返されます。setproject odps.function.strictmode=true
を指定した場合、エラーが返されます。値をDECIMAL型に変換し、
odps.sql.de cimal.tostring.trimzero
をtrueに設定すると、小数点が削除された後に0の値が返されます。 値をDECIMAL型に変換し、odps.sql.de cimal.tostring.trimzero
をfalseに設定すると、小数点以下が0の値が返されます。重要odps.sql.de cimal.tostring.trimzero
パラメーターは、テーブルからデータを読み取る場合にのみ有効です。 このパラメーターは静的値には影響しません。
例
例1: 一般的な使用法。 例:
-- The return value is 1. select cast('1' as bigint);
例2: STRING型の値をBOOLEAN型に変換します。 STRING型の値が空の文字列の場合、
false
が返されます。 それ以外の場合は、true
が返されます。 例:STRING型の値は空の文字列です。
select cast("" as boolean); -- The return value is false. +------+ | _c0 | +------+ | false | +------+
STRING型の値は空ではない文字列です。
select cast("false" as boolean); -- The return value is true. +------+ | _c0 | +------+ | true | +------+
例3: 文字列を日付に変換します。
-- Convert a string into a date. select cast("2022-12-20" as date); -- The following result is returned: +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+ -- Convert a date string that contains the hour, minute, and second parts into a date. select cast("2022-12-20 00:01:01" as date); -- The following result is returned: +------------+ | _c0 | +------------+ | NULL | +------------+ -- To ensure that a valid date is returned, run the following commands: set odps.sql.executionengine.enable.string.to.date.full.format= true; select cast("2022-12-20 00:01:01" as date); -- The following result is returned: +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+
説明デフォルトでは、
odps.sql.exe cutionengine.enable.string.to.date.full.format
パラメーターはfalse
に設定されます。 時、分、秒の部分を含む日付文字列を変換する場合は、このパラメーターをtrue
に設定する必要があります。例4 :( 不正な使用) 型変換が失敗するか、サポートされていない場合、エラーが返されます。 誤ったサンプル文:
select cast('abc' as bigint);
例5:
setproject odps.function.strictmode=false
を指定します。setprojectodps.function.strictmode=false; select cast('123abc'as bigint); -- The following result is returned: +------------+ |_c0| +------------+ |123| +------------+
例6:
setproject odps.function.strictmode=true
を指定します。setprojectodps.function.strictmode=true; select cast('123abc' as bigint); -- The following result is returned: FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint.
例7:
odps.sql.de cimal.tostring.trimzero
パラメーターを指定します。-- Create a table. create table mf_dot (dcm1 decimal(38,18), dcm2 decimal(38,18)); -- Insert data into the table. insert into table mf_dot values (12.45500BD,12.3400BD); -- Set the odps.sql.decimal.tostring.trimzero parameter to true, or do not configure the odps.sql.decimal.tostring.trimzero parameter. set odps.sql.decimal.tostring.trimzero=true; -- Remove the 0s at the end of the decimal. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; -- The following result is returned: +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.34 | +------------+------------+ -- Set the odps.sql.decimal.tostring.trimzero parameter to false. set odps.sql.decimal.tostring.trimzero=false; -- Retain the 0s at the end of the decimal. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; -- The following result is returned: +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.340 | +------------+------------+ -- The odps.sql.decimal.tostring.trimzero parameter does not take effect for static values. set odps.sql.decimal.tostring.trimzero=false; select cast(round(12345.120BD,3) as string); -- The following result is returned: +------------+ | _c0 | +------------+ | 12345.12 | +------------+
COALESCE
構文
coalesce(<expr1>, <expr2>, ...)
説明
<expr1> 、<expr2> 、...
の最初のnull以外の値を返します。パラメーター
expr: 必須です。 チェックする値。
戻り値
戻り値のデータ型は、入力パラメーターのデータ型と同じです。
例
例1: 一般的な使用法。 例:
-- The return value is 1. select coalesce(null,null,1,null,3,5,7);
例2: パラメーター値のデータ型が定義されていない場合、エラーが返されます。
誤ったサンプル文:
-- The value abc cannot be identified because the data type of the value abc is not defined. An error is returned. select coalesce(null,null,1,null,abc,5,7);
正しいサンプル文:
select coalesce(null,null,1,null,'abc',5,7);
例3: データがテーブルから読み取られず、入力パラメーターのすべての値がnullの場合、エラーが返されます。 誤ったサンプル文:
-- An error is returned because non-null values do not exist. select coalesce(null,null,null,null);
例4: データがテーブルから読み取られ、入力パラメーターのすべての値がnullの場合、nullが返されます。
元のデータテーブル:
+-----------+-------------+------------+ | shop_name | customer_id | toal_price | +-----------+-------------+------------+ | ad | 10001 | 100.0 | | jk | 10002 | 300.0 | | ad | 10003 | 500.0 | | tt | NULL | NULL | +-----------+-------------+------------+
元のテーブルのtt shopのフィールド値はすべてnullです。 次のステートメントが実行されると、値nullが返されます。
select coalesce(customer_id,total_price) from sale_detail where shop_name='tt';
圧縮
構文
binary compress(string <str>) binary compress(binary <bin>)
説明
GZIPアルゴリズムを使用してstrまたはbinを圧縮します。
パラメーター
str: 必須です。 STRING型の値。
bin: 必須です。 BINARY型の値、
戻り値
BINARY型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
-- The return value is =1F=8B=08=00=00=00=00=00=00=03=CBH=CD=C9=C9=07=00=86=A6=106=05=00=00=00. select compress('hello');
例2: 入力パラメーターが空です。 例:
-- The return value is =1F=8B=08=00=00=00=00=00=00=03=03=00=00=00=00=00=00=00=00=00. select compress('');
例3: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select compress(null);
CRC32
構文
bigint crc32(string|binary <expr>)
説明
exprで指定した値のCRC値を計算します。 値はSTRING型またはBINARY型です。
パラメーター
expr: 必須です。 STRING型またはBINARY型の値。
戻り値
BIGINT型の値が返されます。 戻り値は、次のルールによって異なります。
入力パラメーターがnullに設定されている場合、nullが返されます。
入力パラメーターが空の場合、0が返されます。
例
例1: 文字列
ABC
のCRC値を計算します。 例:-- The return value is 2743272264. select crc32('ABC');
例2: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select crc32(null);
DECODE
構文
decode(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])
説明
IF-THEN-ELSE
ロジックを実装します。パラメーター
expression: 必須です。 比較する式。The expression that you want to compare.
search: 必須です。 式との比較に使用される検索項目。
result: 必須です。 searchの値がexpressionの値と同じ場合に返される値です。
default: オプション。 式に一致する検索項目がない場合、defaultの値が返されます。 このパラメーターに値を指定しない場合は、nullが返されます。
説明NULL値を除いて、resultパラメーターの他のすべての値は同じデータ型でなければなりません。 値が異なるデータ型の場合、エラーが返されます。
searchとexpressionの値は同じデータ型である必要があります。 それ以外の場合は、エラーが返されます。
戻り値
検索項目が式と一致する場合、結果が返されます。
式に一致する検索項目がない場合、defaultが返されます。
defaultパラメーターに値が指定されていない場合、nullが返されます。
重複した検索項目が式と一致する場合、最初の検索項目の値が返されます。
ほとんどの場合、MaxCompute SQLが
null=NULL
を計算すると、NULLが返されます。 ただし、DECODE関数は、2つのnull値が同じであると見なします。
例
sale_detail
テーブルには、shop_name (STRING) 、customer_id (STRING) 、およびtotal_price (DOUBLE)
列が含まれます。 このテーブルには、次のデータが含まれます。+------------+-------------+-------------+------------+------------+ | shop_name | customer_id | total_price | sale_date | region | +------------+-------------+-------------+------------+------------+ | s1 | c1 | 100.1 | 2013 | china | | s2 | c2 | 100.2 | 2013 | china | | s3 | c3 | 100.3 | 2013 | china | | null | c5 | NULL | 2014 | shanghai | | s6 | c6 | 100.4 | 2014 | shanghai | | s7 | c7 | 100.5 | 2014 | shanghai | +------------+-------------+-------------+------------+------------+
例:
-- If the value of customer_id is c1, Taobao is returned. If the value is c2, Alipay is returned. If the value is c3, Aliyun is returned. If the value is null, N/A is returned. In other cases, Others is returned. select decode(customer_id, 'c1', 'Taobao', 'c2', 'Alipay', 'c3', 'Aliyun', Null, 'N/A', 'Others') as result from sale_detail; -- The preceding statement is equivalent to the following statement: if customer_id = c1 then result := 'Taobao'; elsif customer_id = c2 then result := 'Alipay'; elsif customer_id = c3 then result := 'Aliyun'; ... else result := 'Others'; end if;
次の応答が返されます。
+------------+ | result | +------------+ | Others | | Others | | Others | | Taobao | | Alipay | | Aliyun | +------------+
デコンプレス
構文
binary decompress(binary <bin>)
説明
GZIPアルゴリズムを使用してbinを解凍します。
パラメーター
bin: 必須です。 BINARY型の値。
戻り値
BINARY型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1: 文字列
hello, world
の圧縮結果を解凍し、解凍結果を文字列に変換します。 例:-- The return value is hello, world. select cast(decompress(compress('hello, world')) as string);
例2: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select decompress(null);
GET_IDCARD_AGE
構文
get_idcard_age(<idcardno>)
説明
IDカード番号に基づいて現在の年齢を返します。 現在の年齢は、IDカード番号の現在の年から誕生年を引いたものです。
パラメーター
idcardno: 必須です。 ストリングタイプの15桁または18桁のIDカード番号。 計算中、IDカードの有効性は、州コードとIDカード番号の最後の桁に基づいてチェックされます。 チェックが失敗した場合、nullが返されます。
戻り値
BIGINT型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
GET_IDCARD_BIRTHDAY
構文
get_idcard_birthday(<idcardno>)
説明
IDカード番号に基づいて生年月日を返します。
パラメーター
idcardno: 必須です。 ストリングタイプの15桁または18桁のIDカード番号。 計算中、IDカードの有効性は、州コードとIDカード番号の最後の桁に基づいてチェックされます。 チェックが失敗した場合、nullが返されます。
戻り値
DATETIME型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
GET_IDCARD_SEX
構文
get_idcard_sex(<idcardno>)
説明
IDカード番号に基づいて性別を返します。 有効な値:
M
およびF
。Mは男性を示し、Fは女性を示す。パラメーター
idcardno: 必須です。 ストリングタイプの15桁または18桁のIDカード番号。 計算中、IDカードの有効性は、州コードとIDカード番号の最後の桁に基づいてチェックされます。 チェックが失敗した場合、nullが返されます。
戻り値
STRING型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
GET_USER_ID
構文
get_user_id()
説明
現在のアカウントのID (ユーザーIDまたはユーザー識別子 (UID)) を取得します。
パラメーター
パラメータは必要ありません。
戻り値
現在のアカウントのIDが返されます。
例
select get_user_id(); -- The following result is returned: +------------+ | _c0 | +------------+ | 1117xxxxxxxx8519 | +------------+
GREATEST
構文
greatest(<var1>, <var2>[,...])
説明
入力パラメーターの最大値を返します。
パラメーター
var1およびvar2: 必須です。 パラメータは、BIGINT、DOUBLE、DECIMAL、DATETIME、またはSTRING型である。
戻り値
入力パラメーターの最大値が返されます。 暗黙的な変換を実行しない場合、戻り値は入力パラメーターと同じデータ型になります。
値nullは最小値として解釈されます。
入力パラメータが異なるデータ型である場合、DOUBLE、BIGINT、DECIMAL、およびSTRING型の入力パラメータは、比較のためにDOUBLE型に変換され、STRINGおよびDATETIME型の入力パラメータは、比較のためにDATETIME型に変換される。 他のデータ型の暗黙的な変換は許可されません。
odps.sql.hive.com patible
がtrueに設定され、入力パラメーターがnullに設定されている場合、nullが返されます。
HASH
構文
Hive互換データ型エディションを使用するMaxComputeプロジェクトの構文:
int hash(<value1>, <value2>[, ...]);
Hive互換データ型エディションを使用しないMaxComputeプロジェクトの構文:
bigint hash(<value1>, <value2>[, ...]);
説明
value1とvalue2に対してハッシュ演算を実行した後に取得されるハッシュ値を返します。
パラメーター
value1およびvalue2: 必須です。 これらのパラメーターは、ハッシュ操作を実行するパラメーターを指定します。 パラメータは、異なるデータ型であってもよい。 Hive互換データ型エディションと非Hive互換データ型エディションでサポートされているデータ型は異なります。
Hive互換データ型エディションでサポートされているデータ型: TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL、BOOLEAN、STRING、CHAR、VARCHAR、DATETIME、およびDATE。
非Hive互換データ型エディションでサポートされているデータ型: BIGINT、DOUBLE、BOOLEAN、STRING、およびDATETIME。
説明2つの入力パラメーターが同じ値に設定されている場合、返されるハッシュ値は同じです。 ただし、返された2つのハッシュ値が同じである場合、2つの入力パラメータの値は同じではなく、ハッシュ衝突が発生する可能性があります。
戻り値
INTまたはBIGINT型の値が返されます。 入力パラメーターが空のまままたはnullに設定されている場合、0が返されます。
例
例1: 同じデータ型の入力パラメーターのハッシュ値を計算します。 例:
-- The return value is 66. select hash(0, 2, 4);
例2: 異なるデータ型の入力パラメータのハッシュ値を計算します。 例:
-- The return value is 97. select hash(0, 'a');
例3: 入力パラメータが空のままであるか、またはnullに設定されている。 例:
-- The return value is 0. select hash(0, null); -- The return value is 0. select hash(0, '');
IF
構文
if(<testCondition>, <valueTrue>, <valueFalseOrNull>)
説明
testConditionがtrueかどうかをチェックします。 testConditionがtrueの場合、valueTrueの値が返されます。 それ以外の場合、valueFalseOrNullの値が返されます。
パラメーター
testCondition: 必須です。 評価する式。The expression that you want to evaluate. 値はBOOLEAN型です。
valueTrue: 必須です。 testConditionがtrueの場合に返される値。
valueFalseOrNull: testConditionがfalseの場合に返される値。 このパラメーターはnullに設定できます。
戻り値
戻り値のデータ型は、valueTrueまたはvalueFalseOrNullのデータ型と同じです。
例
-- The return value is 200. select if(1=2, 100, 200);
LEAST
構文
least(<var1>, <var2>[,...])
説明
入力パラメーターの最小値を返します。
パラメーター
var: 必須です。 入力パラメーターの値。 パラメータは、BIGINT、DOUBLE、DECIMAL、DATETIME、またはSTRING型である。
戻り値
入力パラメーターの最小値が返されます。 暗黙的な変換を実行しない場合、戻り値は入力パラメーターと同じデータ型になります。
DOUBLE型、BIGINT型、およびSTRING型間でデータ型の変換を実行すると、DOUBLE型の値が返されます。 STRING型とDATETIME型の間でデータ型の変換を実行すると、DATETIME型の値が返されます。 DECIMAL型、DOUBLE型、BIGINT型、およびSTRING型の間でデータ型の変換を実行すると、DECIMAL型の値が返されます。 他のデータ型の暗黙的な変換は許可されません。
値nullは最小値として解釈されます。
すべての入力パラメーターの値がnullの場合、nullが返されます。
例
-- The return value is 2. select least(5, 2, 7);
MAX_PT
構文
max_pt(<table_full_name>)
説明
パーティションテーブル内のデータを含む最大のレベル1パーティションの名前を返し、このパーティションのデータを読み取ります。 この関数は、パーティションをアルファベット順にソートすることによって最大のパーティションを決定します。
MAX_PT
関数が使用されているステートメントの代わりに、標準のSQLステートメントを使用することもできます。 たとえば、select * from table where pt = max_pt("table");
の代わりに、select * from table where pt = (select max(pt) from table);
を使用できます。説明MaxComputeは
MIN_PT
機能を提供しません。 パーティションテーブルにデータが格納されている最小のパーティションを取得する必要がある場合は、SQL文select * from table where pt = min_pt("table");
を使用することはできません。 代わりに、標準のSQLステートメントselect * from table where pt = (select min(pt) from table);
を使用して、MAX_PT
関数と同じ効果を得ることができます。パラメーター
table_full_name: 必須です。 STRING型の値。 このパラメータは、テーブルの名前を指定します。 テーブルの読み取り権限が必要です。
戻り値
最大のパーティションの名前が返されます。
説明ALTER TABLE
ステートメントを使用してパーティションを追加し、パーティションにデータが含まれていない場合、このパーティションの名前は返されません。例
例1: tblテーブルはパーティションテーブルです。 テーブル内のパーティションは20120901と20120902で、どちらもデータを含んでいます。 次の文を実行すると、この
関数
は'20120902'
を返し、MaxCompute SQL文は20120902
パーティションからデータを読み取ります。 例:select * from tbl where pt=max_pt('myproject.tbl'); -- The preceding statement is equivalent to the following statement: select * from tbl where pt = (select max(pt) from myproject.tbl);
例2: パーティションテーブルに複数のレベルのパーティションが含まれている場合は、標準のSQLステートメントを使用して、最大のパーティションからデータを取得します。 例:
select * from table where pt1 = (select max(pt1) from table) and pt2 = (select max(pt2) from table where pt1 = (select max(pt1) from table));
NULLIF
構文
T nullif(T <expr1>, T <expr2>)
説明
expr1とexpr2の値を比較します。 値が同じ場合は、nullが返されます。 値が異なる場合、expr1の値が返されます。
パラメーター
expr1およびexpr2: 必須です。 任意のデータ型の式。
T
は、入力データのタイプを指定します。 型は、MaxComputeでサポートされているデータ型です。戻り値
expr1またはnullの値が返されます。
例
-- The return value is 2. select nullif(2, 3); -- The return value is null. select nullif(2, 2); -- The return value is 3. select nullif(3, null);
NVL
構文
nvl(T <value>, T <default_value>)
説明
valueがnullの場合、default_valueを返します。 それ以外の場合、valueが返されます。 valueパラメーターとdefault_valueパラメーターは同じデータ型である必要があります。
パラメーター
value: 必須です。 入力パラメーター
T
は、入力データのタイプを指定します。 型は、MaxComputeでサポートされているデータ型です。default_value: 必須です。 nullを置き換えるために使用される値。 default_valueのデータ型は、valueのデータ型と同じである必要があります。
例
t_data
という名前のテーブルには、c1 string
、c2 bigint
、c3 datetime
の3つの列があります。 c1列はSTRING型です。 c2列はBIGINT型です。 c3列はDATETIME型です。 このテーブルには、次のデータが含まれます。+----+------------+------------+ | c1 | c2 | c3 | +----+------------+------------+ | NULL | 20 | 2017-11-13 05:00:00 | | ddd | 25 | NULL | | bbb | NULL | 2017-11-12 08:00:00 | | aaa | 23 | 2017-11-11 00:00:00 | +----+------------+------------+
NVL
関数が呼び出された後、c1
のnull値は00000、c2
のnull値は0、c3
のnull値はハイフン (-
) として返されます。 例:select nvl(c1,'00000'),nvl(c2,0),nvl(c3,'-') from nvl_test; -- The following result is returned: +-----+------------+-----+ | _c0 | _c1 | _c2 | +-----+------------+-----+ | 00000 | 20 | 2017-11-13 05:00:00 | | ddd | 25 | - | | bbb | 0 | 2017-11-12 08:00:00 | | aaa | 23 | 2017-11-11 00:00:00 | +-----+------------+-----+
ORDINAL
構文
ordinal(bigint <nth>, <var1>, <var2>[,...])
説明
入力変数の値を昇順でソートし、n番目にランク付けされた値を返します。
パラメーター
nth: 必須です。 1から始まる値の位置。 BIGINT型の値。 このパラメーターは、返す値の位置を指定します。 値がnullの場合、nullが返されます。
var: 必須です。 ソートする値。The values that you want to sort. BIGINT、DOUBLE、DATETIME、またはSTRING型の値。
戻り値
n番目にランク付けされた値が返されます。 暗黙的な変換を実行しない場合、戻り値は入力パラメーターと同じデータ型になります。
DOUBLE型、BIGINT型、およびSTRING型の間でデータ型の変換を実行すると、DOUBLE型の値が返されます。 STRING型とDATETIME型の間でデータ型の変換を実行すると、DATETIME型の値が返されます。 他のデータ型の暗黙的な変換は許可されません。
値nullは最小値として解釈されます。
例
-- The return value is 3. SELECT ordinal(3, 1, 3, 7, 5, 2, 4, 6);
PARTITION_EXISTS
構文
boolean partition_exists(string <table_name>, string... <partitions>)
説明
指定されたパーティションがテーブルに存在するかどうかをチェックします。
パラメーター
table_name: 必須です。 STRING型のテーブル名。 テーブル名にプロジェクト名を指定できます。 テーブルの名前は
my_proj.my_table
です。 プロジェクト名を指定しない場合は、現在のプロジェクト名が使用されます。partitions: 必須です。 STRING型のパーティションの名前。 このパラメーターでは、列の順序に基づいて、テーブルのパーティションキー列の値を指定する必要があります。 値の数は、パーティションキー列の数と同じである必要があります。
戻り値
BOOLEAN型の値が返されます。 指定されたパーティションが存在する場合、Trueが返されます。 それ以外の場合は、falseが返されます。
例
-- Create a partitioned table named foo. create table foo (id bigint) partitioned by (ds string, hr string); -- Add partitions to the partitioned table foo. alter table foo add partition (ds='20190101', hr='1'); -- Check whether partitions 20190101 and 1 exist. True is returned. select partition_exists('foo', '20190101', '1');
SAMPLE
構文
boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]])
説明
xおよびyに基づいてcolume_nameから読み取られたすべての値をサンプリングし、サンプリング条件を満たさない行を除外します。
パラメーター
xおよびy: xが必要です。 xおよびyは、0より大きい整数定数である。 それらの値はBIGINT型です。 2つのパラメータは、値がハッシュ関数に基づいてxの部分に分類され、y番目の部分が使用されることを示します。
yはオプションです。 yパラメーターに値を指定しない場合、最初のオプションが使用され、colume_nameを指定する必要はありません。
xまたはyが別のデータ型の場合、xまたはyの値が0以下の場合、またはyがxより大きい場合、エラーが返されます。 xまたはyの値がnullの場合、nullが返されます。
column_name: オプションです。 サンプリングが実行される列の名前。 このパラメーターに値を指定しない場合、xとyの値に基づいてランダムサンプリングが実行されます。 列の名前は任意のデータ型にすることができ、列の値はnullにすることができます。 暗黙的な変換は実行されません。 colume_nameがnullに設定されている場合、エラーが返されます。
説明null値によるデータスキューを防ぐために、colume_nameのnull値のx部分で均一ハッシュが実行されます。 column_nameパラメーターに値を指定せず、データ量が少ない場合、出力は必ずしも均一ではありません。 この場合、column_nameの値を指定して、統一された出力を取得することを推奨します。
ランダムサンプリングは、BIGINT、DATETIME、BOOLEAN、DOUBLE、STRING、BINARY、CHAR、およびVARCHARのデータ型の列に対してのみ実行できます。
戻り値
BOOLEAN型の値が返されます。
例
tbla
テーブルはcola
列を含む。-- The values in the cola column fall into four portions based on the hash function, and the first portion is used. True is returned. select * from tbla where sample (4, 1 , cola); -- The values in each row are randomly hashed to four portions, and the second portion is used. True is returned. select * from tbla where sample (4, 2);
SHA
構文
string sha(string|binary <expr>)
説明
STRING型またはBINARY型のexprのSHA-1ハッシュ値を計算し、SHA-1ハッシュ値を16進文字列形式で返します。
パラメーター
expr: 必須です。 STRING型またはBINARY型の値。
戻り値
STRING型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1: 文字列
ABC
のSHAハッシュ値を計算します。 例:-- The return value is 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha('ABC');
例2: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select sha(null);
SHA1
構文
string sha1(string|binary <expr>)
説明
STRING型またはBINARY型のexprのSHA-1ハッシュ値を計算し、SHA-1ハッシュ値を16進文字列形式で返します。
パラメーター
expr: 必須です。 STRING型またはBINARY型の値。
戻り値
STRING型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1: 文字列
ABC
のSHA-1ハッシュ値を計算します。 例:-- The return value is 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha1('ABC');
例2: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select sha1(null);
SHA2
構文
string sha2(string|binary <expr>, bigint <number>)
説明
STRING型またはBINARY型のexprのSHA-2ハッシュ値を計算し、numberで指定された形式でSHA-2ハッシュ値を返します。
パラメーター
expr: 必須です。 STRING型またはBINARY型の値。
number: 必須です。 BIGINT型の値。 このパラメーターは、ハッシュビット長を指定します。224、256、384、512、または0である必要があります。 このパラメーターが256に設定されている場合に返される値は、このパラメーターが0に設定されている場合に返される値と同じです。
戻り値
STRING型の値が返されます。 戻り値は、次のルールによって異なります。
入力パラメーターはnullに設定されます。
numberの値が有効な値の範囲に含まれていません。
例
例1: 文字列
ABC
のSHA-2ハッシュ値を計算します。 例:-- The return value is b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78. select sha2('ABC', 256);
例2: 入力パラメーターをnullに設定します。 例:
-- The return value is null. select sha2('ABC', null);
スタック
構文
stack(n, expr1, ..., exprk)
説明
expr1, ..., exprk
をn行に分割する。 特に指定のない限り、出力結果はデフォルトの列名col0, col1 ..
を使用します。パラメーター
n: 必須です。 分割後に取得された行の数。
expr: 必須です。 分割するパラメーター。The parameter that you want to split.
expr1,... exprk
はINTEGER型である必要があり、パラメーターの数はの整数倍である必要があります。n. パラメーターは、完全なn行に分割できる必要があります。 それ以外の場合は、エラーが返されます。
戻り値
特定の数の列を持つn行が返されます。 列の数は、パラメータの数をnで割ったものに等しい。
例
-- Split the parameter group of 1, 2, 3, 4, 5, 6 into three rows. select stack(3, 1, 2, 3, 4, 5, 6); -- The following result is returned: +------+------+ | col0 | col1 | +------+------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | +------+------+ -- Split 'A',10,date '2015-01-01','B',20,date '2016-01-01' into two rows. select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2); -- The following result is returned: +------+------+------+ | col0 | col1 | col2 | +------+------+------+ | A | 10 | 2015-01-01 | | B | 20 | 2016-01-01 | +------+------+------+ -- Split the parameter group of a, b, c, and d into two rows. If the source table contains multiple rows, this function is called for each row. select stack(2,a,b,c,d) as (col,value) from values (1,1,2,3,4), (2,5,6,7,8), (3,9,10,11,12), (4,13,14,15,null) as t(key,a,b,c,d); -- The following result is returned: +------+-------+ | col | value | +------+-------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | | 7 | 8 | | 9 | 10 | | 11 | 12 | | 13 | 14 | | 15 | NULL | +------+-------+ -- Use this function with the LATERAL VIEW clause. select tf.* from (select 0) t lateral view stack(2,'A',10,date '2015-01-01','B',20, date '2016-01-01') tf as col0,col1,col2; -- The following result is returned: +------+------+------+ | col0 | col1 | col2 | +------+------+------+ | A | 10 | 2015-01-01 | | B | 20 | 2016-01-01 | +------+------+------+
STR_TO_MAP
構文
str_to_map([string <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])
説明
delimiter1を使用してtextをキーと値のペアに分割し、delimiter2を使用してキーと値のペアの値からキーを分離します。
パラメーター
mapDupKeyPolicy: オプション。 STRING型の値。 このパラメーターは、重複キーの処理に使用されるメソッドを指定します。 有効な値:
exception: エラーが返されます。
last_win: 後者のキーは前者のキーを上書きします。
セッションレベルで
odps.sql.map.key.de dup.policy
パラメーターを指定して、重複キーの処理に使用されるメソッドを構成することもできます。 たとえば、odps.sql.map.key.de dup.policy
を例外に設定できます。 このパラメーターを指定しない場合、デフォルト値last_winが使用されます。説明MaxComputeの動作実装は、mapDupKeyPolicyに基づいて決定されます。 mapDupKeyPolicyを指定しない場合、
odps.sql.map.key.de dup.policy
の値が使用されます。text: 必須です。 分割する文字列 (string型) 。
delimiter1: オプション。 STRING型の区切り文字。 このパラメーターに値を指定しない場合はコンマ (
,
) が使用されます。delimiter2: オプション。 STRING型の区切り文字。 このパラメーターに値を指定しない場合は、等号 (
=
) が使用されます。説明区切り文字が正規表現または特殊文字の場合、エスケープのために区切り文字の前に2つのバックスラッシュ (\\) を追加する必要があります。 次の特殊文字を区切り文字として使用できます。 ? + * :.
戻り値
MAP<STRING, STRING>
型の値が返されます。 戻り値は、textで指定された文字列がdelimiter1とdelimiter2を使用して分割されることを示します。例
-- The return value is {test1:1, test2:2}. select str_to_map('test1&1-test2&2','-','&'); -- The return value is {test1:1, test2:2}. select str_to_map("test1.1,test2.2", ",", "\\."); -- The return value is {test1:1, test2:3}. select str_to_map("test1.1,test2.2,test2.3", ",", "\\.");
TABLE_EXISTS
構文
boolean table_exists(string <table_name>)
説明
指定されたテーブルが存在するかどうかをチェックします。
パラメーター
table_name: 必須です。 テーブルの名前。 STRING型の値。 テーブル名にプロジェクト名を指定できます。 テーブルの名前は
my_proj.my_table
です。 プロジェクト名を指定しない場合は、現在のプロジェクト名が使用されます。戻り値
BOOLEAN型の値が返されます。 指定されたテーブルが存在する場合、Trueが返されます。 それ以外の場合は、falseが返されます。
例
-- Use this function for the list in the SELECT statement. select if(table_exists('abd'), col1, col2) from src;
TRANS_ARRAY
制限事項
キー
として使用されるすべての列は、転置する列の前に配置する必要があります。SELECT
ステートメントで使用できるUDTFは1つだけです。この関数は、
GROUP BY
、CLUSTER BY
、DISTRIBUTE BY
、またはSORT BY
句では使用できません。
構文
trans_array (<num_keys>, <separator>, <key1>,<key2>,...,<col1>,<col2>,<col3>) as (<key1>,<key2>,...,<col1>, <col2>)
説明
1行のデータを複数の行に変換します。 この関数は、列内の固定区切り文字で区切られた配列を複数の行に転置するUDTFです。
パラメーター
num_keys: 必須です。 値はBIGINT型の定数であり、
0
以上でなければなりません。 このパラメーターは、1行を複数行に転置するときにキー
として使用できる列の数を指定します。separator: 必須。 値はSTRING型の定数です。 このパラメーターは、文字列を複数の要素に分割するために使用されます。 このパラメーターを空のままにすると、エラーが返されます。
keys: 必須です。 1つの行を複数の行に転置するときに
キー
として使用される列。 keyの数はnum_keysで指定します。 すべての列がkey
として使用され、num_keysがすべての列の総数と等しい場合、1行のみが返されます。cols: 必須です。 このパラメーターは、行に転置する配列を指定します。
keys
に続くすべての列は、転置する配列と見なされます。Hangzhou;Beijing;Shanghai
などのSTRING形式で配列を格納するには、このパラメーターの値はSTRING型である必要があります。 この配列の値は、セミコロン (;
) で区切ります。
戻り値
転置行が返されます。 新しい列名は
as
で指定します。キー
として使用される列のデータ型は変更されません。 他のすべての列はSTRING型です。 転置行の数は、最大要素数の配列に基づいています。 行数が不足している場合は、null値が追加されます。例
例1:
t_table
テーブルには、次のデータが含まれています。+----------+----------+------------+ | login_id | login_ip | login_time | +----------+----------+------------+ | wangwangA | 192.168.0.1,192.168.0.2 | 20120101010000,20120102010000 | | wangwangB | 192.168.45.10,192.168.67.22,192.168.6.3 | 20120111010000,20120112010000,20120223080000 | +----------+----------+------------+ -- Execute the following SQL statement: select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table; -- The following result is returned: +----------+----------+------------+ | login_id | login_ip | login_time | +----------+----------+------------+ | wangwangB | 192.168.45.10 | 20120111010000 | | wangwangB | 192.168.67.22 | 20120112010000 | | wangwangB | 192.168.6.3 | 20120223080000 | | wangwangA | 192.168.0.1 | 20120101010000 | | wangwangA | 192.168.0.2 | 20120102010000 | +----------+----------+------------+ -- The table contains the following data: Login_id LOGIN_IP LOGIN_TIME wangwangA 192.168.0.1,192.168.0.2 20120101010000 -- The value null is added to supplement the array in which data is insufficient. Login_id Login_ip Login_time wangwangA 192.168.0.1 20120101010000 wangwangA 192.168.0.2 NULL
例2: mf_fun_array_test_tテーブルには、次のデータが含まれています。
+------------+------------+------------+------------+ | id | name | login_ip | login_time | +------------+------------+------------+------------+ | 1 | Tom | 192.168.100.1,192.168.100.2 | 20211101010101,20211101010102 | | 2 | Jerry | 192.168.100.3,192.168.100.4 | 20211101010103,20211101010104 | +------------+------------+------------+------------+ -- Use the id and name columns as keys to transpose data in the table. Execute the following SQL statement: select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t; -- The following result is returned: +------------+------------+------------+------------+ | id | name | login_ip | login_time | +------------+------------+------------+------------+ | 1 | Tom | 192.168.100.1 | 20211101010101 | | 1 | Tom | 192.168.100.2 | 20211101010102 | | 2 | Jerry | 192.168.100.3 | 20211101010103 | | 2 | Jerry | 192.168.100.4 | 20211101010104 | +------------+------------+------------+------------+
TRANS_COLS
制限事項
キー
として使用されるすべての列は、転置する列の前に配置する必要があります。SELECT
ステートメントで使用できるUDTFは1つだけです。
構文
trans_cols (<num_keys>, <key1>,<key2>,...,<col1>, <col2>,<col3>) as (<idx>, <key1>,<key2>,...,<col1>, <col2>)
説明
1行のデータを複数の行に変換します。 この関数は、列を行に転置するUDTFです。
パラメーター
num_keys: 必須です。 値はBIGINT型の定数であり、
0
以上でなければなりません。 このパラメーターは、1行を複数行に転置するときにキーとして使用できる列の数を指定します。keys: 必須です。 このパラメーターは、1行を複数行に転置するときにkeyとして使用される列を指定します。 keyの数はnum_keysで指定します。 すべての列がkeyとして使用され、num_keysの値がすべての列の総数と等しい場合、1行のみが返されます。
idx: 必須です。 行が転置された後の行のID。
cols: 必須です。 行に転置する列。
戻り値
転置行が返されます。 新しい列名は
as
で指定します。 第1の出力列は、1から始まる転置下付き文字である。 キーとして使用される列のデータ型は変更されず、他の列のデータ型は変更されません。例
t_table
テーブルには、次のデータが含まれます。+----------+----------+------------+ | Login_id | Login_ip1 | Login_ip2 | +----------+----------+------------+ | wangwangA | 192.168.0.1 | 192.168.0.2 | +----------+----------+------------+ -- Execute the following SQL statement: select trans_cols(1, login_id, login_ip1, login_ip2) as (idx, login_id, login_ip) from t_table; -- The following result is returned: idx login_id login_ip 1 wangwangA 192.168.0.1 2 wangwangA 192.168.0.2
UNBASE64
構文
binary unbase64(string <str>)
説明
strで指定したBase64-encoded文字列をバイナリ値に変換します。
パラメーター
str: 必須です。 STRING型の値。 変換するBase64-encoded文字列です。
戻り値
BINARY型の値が返されます。 入力パラメーターがnullに設定されている場合、nullが返されます。
例
例1: 文字列
YWxpYmFiYQ==
をバイナリ値に変換します。 例:-- The return value is alibaba. select unbase64('YWxpYmFiYQ==');
例2: 入力パラメーターがnullに設定されています。 例:
-- The return value is null. select unbase64(null);
UNIQUE_ID
構文
string unique_id()
説明
29347a88-1e57-41ae-bb68-a9edbdd9 ****_1
などの一意のIDを返します。 この関数はUUID関数よりも効率的で、返されるIDは長くなります。 UUID関数と比較して、この関数は_1
のような接尾辞 "_Digit" で終わる一意のIDを返します。
UUID
構文
string uuid()
説明
29347a88-1e57-41ae-bb68-a9edbdd9 ****
などのランダムなIDを返します。説明戻り値はランダムなグローバルIDで、ほとんどの場合一意です。