MaxCompute SQL menyediakan sejumlah fungsi umum tambahan. Topik ini menjelaskan sintaks, parameter, dan contoh penggunaan untuk fungsi seperti CAST, FAILIF, dan HASH.
Function | Feature |
Anda dapat memfilter data yang berada dalam rentang tertentu. | |
Mengembalikan nilai berdasarkan hasil evaluasi suatu ekspresi. | |
Mengonversi hasil suatu ekspresi ke tipe data yang ditentukan. | |
Mengembalikan nilai pertama yang tidak null dalam daftar parameter. | |
Menggunakan algoritma GZIP untuk mengompres parameter input bertipe STRING atau BINARY. | |
Menghitung nilai Pemeriksaan redundansi siklik dari nilai bertipe STRING atau BINARY. | |
Menggunakan algoritma GZIP untuk mendekompres parameter input bertipe BINARY. | |
Mengembalikan true atau pesan error dengan informasi kustom berdasarkan hasil evaluasi suatu ekspresi. | |
Mengembalikan usia dalam tahun berdasarkan nomor KTP. | |
Mengembalikan tanggal lahir berdasarkan nomor KTP. | |
Mengembalikan jenis kelamin berdasarkan nomor KTP. | |
Memperoleh ID akun saat ini. | |
Menghitung nilai hash berdasarkan parameter input. | |
Memeriksa apakah kondisi tertentu bernilai true. | |
Mengembalikan nama partisi hash terbesar dalam tabel partisi. | |
Memeriksa apakah nilai dua parameter input sama. | |
Menentukan nilai kembali untuk parameter yang bernilai null. | |
Mengurutkan nilai variabel input secara ascending dan mengembalikan nilai pada posisi tertentu. | |
Memeriksa apakah partisi tertentu ada dalam tabel. | |
Mengonversi ekspresi (expr) ke tipe data target (type). | |
Mengambil sampel semua nilai kolom yang dibaca dan memfilter baris yang tidak memenuhi kondisi sampling. | |
Menghitung nilai hash SHA-1 dari nilai bertipe STRING atau BINARY. | |
Menghitung nilai hash SHA-1 dari nilai bertipe STRING atau BINARY. | |
Menghitung nilai hash SHA-2 dari nilai bertipe STRING atau BINARY. | |
Memisahkan grup parameter tertentu menjadi jumlah baris yang ditentukan. | |
Memisahkan string dengan delimiter tertentu dan mengembalikan pasangan kunci-nilai. | |
Memeriksa apakah tabel tertentu ada. | |
Memindahkan satu baris data menjadi beberapa baris. Fungsi ini adalah user-defined table-valued function (UDTF) yang memindahkan array yang dipisahkan oleh delimiter tetap dalam suatu kolom menjadi beberapa baris. | |
User-defined table-valued function (UDTF) yang mengubah satu baris menjadi beberapa baris dengan memisahkan satu atau beberapa kolom. | |
Mengembalikan ID unik. Fungsi ini lebih efisien daripada fungsi UUID. | |
Mengembalikan ID acak. |
BETWEEN AND expression
Sintaks
<a> [NOT] between <b> and <c>Deskripsi
Memeriksa apakah nilai a berada dalam rentang b dan c, atau di luar rentang b dan c.
Parameter
a: Wajib. Bidang yang akan diperiksa.
b dan c: Wajib. Parameter ini menentukan batas rentang nilai. Tipe data b dan c harus sama dengan tipe data parameter a.
Nilai kembali
Data yang memenuhi kondisi dikembalikan.
Jika salah satu parameter a, b, atau c bernilai null, fungsi ini mengembalikan null.
Contoh
Tabel
empberisi data berikut.| 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,,10Kueri data di mana nilai
salberada di antara 1.000 dan 1.500. Contoh pernyataan:select * from emp where sal between 1000 and 1500;Hasil berikut dikembalikan.
+-------+-------+-----+------------+------------+------------+------------+------------+ | 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 | +-------+-------+-----+------------+------------+------------+------------+------------+
CASE WHEN expression
Sintaks
MaxCompute menyediakan dua format berikut untuk ekspresi
CASE WHEN:case <value> when <value1> then <result1> when <value2> then <result2> ... else <resultn> endcase when (<_condition1>) then <result1> when (<_condition2>) then <result2> when (<_condition3>) then <result3> ... else <resultn> end
Deskripsi
Mengembalikan result berdasarkan evaluasi terhadap value atau _condition.
Parameter
value: Wajib. Nilai yang akan dibandingkan.
_condition: Wajib. Kondisi yang akan dievaluasi.
result: Wajib. Nilai yang akan dikembalikan.
Nilai kembali
Jika semua nilai result bertipe BIGINT atau DOUBLE, nilai-nilai tersebut dikonversi ke tipe DOUBLE sebelum dikembalikan.
Jika terdapat nilai result bertipe STRING, semua nilai result dikonversi ke tipe STRING sebelum dikembalikan. Error dikembalikan jika konversi tipe data tidak didukung—misalnya, data bertipe BOOLEAN tidak dapat dikonversi ke tipe STRING.
Konversi antar tipe data lainnya tidak didukung.
Contoh
Tabel
sale_detailberisi kolomshop_name string, customer_id string, total_price double. Tabel berisi data berikut.+------------+-------------+-------------+------------+------------+ | 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 | +------------+-------------+-------------+------------+------------+Berikut adalah contoh perintah.
select case when region='china' then 'default_region' when region like 'shang%' then 'sh_region' end as region from sale_detail;Hasil berikut dikembalikan.
+------------+ | region | +------------+ | default_region | | default_region | | default_region | | sh_region | | sh_region | | sh_region | +------------+
CAST
Sintaks
cast(<expr> as <type>)Deskripsi
Mengonversi nilai expr ke tipe data target type.
Parameter
expr: Wajib. Ekspresi yang akan dikonversi.
type: Wajib. Tipe data target. Contoh penggunaannya sebagai berikut:
cast(double as bigint): Mengonversi nilai bertipe DOUBLE ke tipe BIGINT.cast(string as bigint): Mengonversi nilai bertipe STRING ke tipe BIGINT. Jika string hanya berisi bilangan bulat, nilai tersebut langsung dikonversi ke tipe BIGINT. Jika string berisi bilangan titik mengambang atau dalam bentuk eksponensial, nilai tersebut terlebih dahulu dikonversi ke tipe DOUBLE lalu ke tipe BIGINT.Format tanggal default
yyyy-mm-dd hh:mi:ssdigunakan untukcast(string as datetime)ataucast(datetime as string).
Nilai kembali
Mengembalikan nilai bertipe data target.
Jika Anda menjalankan
setproject odps.function.strictmode=false, awalan numerik dari string dikembalikan.Jika Anda menjalankan perintah
setproject odps.function.strictmode=true, error dikembalikan.Saat mengonversi nilai ke tipe DECIMAL, nol trailing setelah koma desimal dihapus jika Anda mengatur
odps.sql.decimal.tostring.trimzero=true. Nol trailing dipertahankan jika Anda mengaturodps.sql.decimal.tostring.trimzero=false.PentingParameter
odps.sql.decimal.tostring.trimzeromemengaruhi baik data yang diambil dari tabel maupun nilai statis.
Contoh
Contoh 1: Penggunaan umum.
--Mengembalikan 1. select cast('1' as bigint);Contoh 2: Mengonversi nilai STRING ke nilai BOOLEAN. Jika STRING kosong,
falsedikembalikan; jika tidak,truedikembalikan.STRING kosong.
select cast("" as boolean); --Mengembalikan +------+ | _c0 | +------+ | false | +------+STRING tidak kosong.
select cast("false" as boolean); --Mengembalikan true +------+ | _c0 | +------+ | true | +------+
Contoh 3: Mengonversi string ke tanggal.
--Mengonversi string ke tanggal. select cast("2022-12-20" as date); --Mengembalikan +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+ --Mengonversi string tanggal dengan bagian waktu ke tanggal. select cast("2022-12-20 00:01:01" as date); --Mengembalikan +------------+ | _c0 | +------------+ | NULL | +------------+ --Untuk memastikan nilai ditampilkan dengan benar, atur parameter berikut: set odps.sql.executionengine.enable.string.to.date.full.format= true; select cast("2022-12-20 00:01:01" as date); --Mengembalikan +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+CatatanSecara default, parameter
odps.sql.executionengine.enable.string.to.date.full.formatbernilaifalse. Untuk mengonversi string tanggal yang mencakup bagian waktu, atur parameter ini ketrue.Contoh 4 (Contoh perintah salah): Penggunaan tidak valid. Exception dilempar jika konversi gagal atau tidak didukung. Perintah berikut merupakan contoh penggunaan salah.
select cast('abc' as bigint);Contoh 5: Contoh skenario dengan
setproject odps.function.strictmode=falsediatur.setprojectodps.function.strictmode=false; select cast('123abc'as bigint); --Mengembalikan +------------+ |_c0| +------------+ |123| +------------+Contoh 6: Contoh skenario dengan
setproject odps.function.strictmode=truediatur.setprojectodps.function.strictmode=true; select cast('123abc' as bigint); --Mengembalikan FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint.Contoh 7: Contoh skenario dengan
odps.sql.decimal.tostring.trimzerodiatur.--Membuat tabel. create table mf_dot (dcm1 decimal(38,18), dcm2 decimal(38,18)); --Memasukkan data. insert into table mf_dot values (12.45500BD,12.3400BD); --Saat flag bernilai true atau tidak diatur. set odps.sql.decimal.tostring.trimzero=true; --Menghapus nol trailing setelah koma desimal. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; --Nilai kembali +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.34 | +------------+------------+ --Saat flag bernilai false. set odps.sql.decimal.tostring.trimzero=false; --Mempertahankan nol trailing setelah koma desimal. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; --Nilai kembali +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.340 | +------------+------------+ --Parameter ini juga berlaku untuk nilai statis. set odps.sql.decimal.tostring.trimzero=false; select cast(round(12345.120BD,3) as string); --Mengembalikan: +------------+ | _c0 | +------------+ | 12345.120 | +------------+
COALESCE
Sintaks
coalesce(<expr1>, <expr2>, ...)Deskripsi
Mengembalikan nilai pertama yang tidak null dalam daftar ekspresi
<expr1>, <expr2>, ....Parameter
expr: Wajib. Nilai yang akan divalidasi.
Nilai kembali
Nilai kembali memiliki tipe data yang sama dengan parameter.
Contoh
Contoh 1: Contoh penggunaan umum. Contoh pernyataan:
-- Nilai kembali adalah 1. select coalesce(null,null,1,null,3,5,7);Contoh 2: Error terjadi jika tipe nilai parameter tidak didefinisikan.
Pernyataan contoh salah
-- Nilai abc tidak dapat diidentifikasi karena tipe data nilai abc tidak didefinisikan. Error dikembalikan. select coalesce(null,null,1,null,abc,5,7);Pernyataan contoh benar
select coalesce(null,null,1,null,'abc',5,7);
Contoh 3: Jika data tidak dibaca dari tabel dan semua parameter input bernilai null, error dikembalikan. Pernyataan contoh salah:
--Error dikembalikan, menunjukkan bahwa setidaknya satu parameter harus tidak NULL. select coalesce(null,null,null,null);Contoh 4: Jika data dibaca dari tabel dan semua parameter input bernilai null, fungsi ini mengembalikan null.
Tabel data asli:
+-----------+-------------+------------+ | shop_name | customer_id | toal_price | +-----------+-------------+------------+ | ad | 10001 | 100.0 | | jk | 10002 | 300.0 | | ad | 10003 | 500.0 | | tt | NULL | NULL | +-----------+-------------+------------+Nilai bidang untuk toko tt dalam tabel sumber semuanya null. Saat pernyataan berikut dijalankan, null dikembalikan.
select coalesce(customer_id,total_price) from sale_detail where shop_name='tt';
COMPRESS
Sintaks
binary compress(string <str>) binary compress(binary <bin>)Deskripsi
Mengompres str atau bin menggunakan algoritma GZIP.
Parameter
str: Wajib. Nilai bertipe STRING.
bin: Wajib. Nilai bertipe BINARY.
Nilai kembali
Mengembalikan nilai bertipe BINARY. Jika input bernilai null, nilai kembali adalah null.
Contoh
-- Nilai kembali adalah =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');Contoh 2: Parameter input adalah string kosong. Contoh pernyataan:
-- Nilai kembali adalah =1F=8B=08=00=00=00=00=00=00=03=03=00=00=00=00=00=00=00=00=00. select compress('');Contoh 3: Parameter input bernilai null. Contoh pernyataan:
-- Nilai kembali adalah null. select compress(null);
CRC32
Sintaks
bigint crc32(string|binary <expr>)Deskripsi
Menghitung nilai Pemeriksaan redundansi siklik untuk expr. Nilai `expr` harus bertipe STRING atau BINARY.
Parameter
expr: Wajib. Nilai bertipe STRING atau BINARY.
Nilai kembali
Mengembalikan nilai bertipe BIGINT. Nilai kembali mengikuti aturan berikut:
Jika input bernilai null, nilai kembali adalah null.
Jika input adalah string kosong, nilai kembali adalah 0.
Contoh
Contoh 1: Hitung nilai Pemeriksaan redundansi siklik dari string
ABC. Contoh pernyataan:-- Nilai kembali adalah 2743272264. select crc32('ABC');Contoh 2: Parameter input bernilai null. Contoh pernyataan:
-- Nilai kembali adalah null. select crc32(null);
DECOMPRESS
Sintaks
binary decompress(binary <bin>)Deskripsi
Mendekompres bin menggunakan algoritma GZIP.
Parameter
bin: Wajib. Nilai bertipe BINARY.
Nilai kembali
Mengembalikan nilai bertipe BINARY. Jika input bernilai null, nilai kembali adalah null.
Contoh
Contoh 1: Dekompres string terkompresi
hello, worlddan konversi hasilnya ke string. Contoh pernyataan:-- Nilai kembali adalah hello, world. select cast(decompress(compress('hello, world')) as string);Contoh 2: Parameter input bernilai null. Contoh pernyataan:
-- Nilai kembali adalah null. select decompress(null);
GET_IDCARD_AGE
Sintaks
get_idcard_age(<idcardno>)Deskripsi
Menghitung usia saat ini berdasarkan nomor KTP. Usia dihitung dengan mengurangkan tahun lahir dari tahun saat ini.
Parameter
idcardno: Wajib. Nomor KTP 15 digit atau 18 digit bertipe STRING. Fungsi memvalidasi nomor KTP berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi mengembalikan null.
Nilai kembali
Mengembalikan nilai bertipe BIGINT. Jika input bernilai null, nilai kembali adalah null.
GET_IDCARD_BIRTHDAY
Sintaks
get_idcard_birthday(<idcardno>)Deskripsi
Mengambil tanggal lahir dari nomor KTP.
Parameter
idcardno: Wajib. Nomor KTP 15 digit atau 18 digit bertipe STRING. Fungsi memvalidasi nomor KTP berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi mengembalikan null.
Nilai kembali
Mengembalikan nilai bertipe DATETIME. Jika input bernilai null, nilai kembali adalah null.
GET_IDCARD_SEX
Sintaks
get_idcard_sex(<idcardno>)Deskripsi
Mengambil jenis kelamin dari nomor KTP. Nilai kembali yang valid adalah
M(laki-laki) danF(perempuan).Parameter
idcardno: Wajib. Nomor KTP 15 digit atau 18 digit bertipe STRING. Fungsi memvalidasi nomor KTP berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi mengembalikan null.
Nilai kembali
Mengembalikan nilai bertipe STRING. Jika input bernilai null, nilai kembali adalah null.
GET_USER_ID
Sintaks
get_user_id()Deskripsi
Mengambil ID akun saat ini, juga dikenal sebagai user ID (UID).
Parameter
Tidak ada parameter yang diperlukan.
Nilai kembali
Mengembalikan ID akun saat ini.
Contoh
select get_user_id(); -- Hasil berikut dikembalikan. +------------+ | _c0 | +------------+ | 1117xxxxxxxx8519 | +------------+
HASH
Sintaks
Jika proyek MaxCompute berada dalam mode kompatibel Hive, gunakan sintaks berikut.
INT HASH(<value1>, <value2>[, ...]);Jika proyek MaxCompute tidak berada dalam mode kompatibel Hive, gunakan sintaks berikut.
BIGINT HASH(<value1>, <value2>[, ...]);
Deskripsi
Mengembalikan nilai hash berdasarkan value1 dan value2.
Parameter
value1 dan value2: Wajib. Parameter yang akan di-hash. Parameter dapat memiliki tipe data berbeda. Tipe data yang didukung berbeda antara mode kompatibel Hive dan mode non-kompatibel Hive:
Mode kompatibel Hive: TINYINT, SMALLINT, INT, BIGINT, FLOAT, DOUBLE, DECIMAL, BOOLEAN, STRING, CHAR, VARCHAR, DATETIME, dan DATE.
Mode non-kompatibel Hive: BIGINT, DOUBLE, BOOLEAN, STRING, dan DATETIME.
CatatanJika dua parameter input identik, nilai hash yang dikembalikan juga identik. Namun, jika dua nilai hash yang dikembalikan identik, parameter input belum tentu identik karena kemungkinan terjadinya tabrakan hash (hash collisions).
Nilai kembali
Mengembalikan nilai bertipe INT atau BIGINT. Jika parameter input adalah string kosong atau null, nilai kembali adalah 0.
Contoh
Contoh 1: Hitung nilai hash dari parameter input yang memiliki tipe data sama. Contoh pernyataan:
-- Nilai kembali adalah 66. SELECT HASH(0L, 2L, 4L);Contoh 2: Hitung nilai hash dari parameter input yang memiliki tipe data berbeda. Contoh pernyataan:
-- Nilai kembali adalah 97. SELECT HASH(0L, 'a');Contoh 3: Parameter input adalah string kosong atau null. Contoh pernyataan:
-- Nilai kembali adalah 0. SELECT HASH(0L, null); -- Nilai kembali adalah 0. SELECT HASH(0L, '');
IF
Sintaks
if(<testCondition>, <valueTrue>, <valueFalseOrNull>)Deskripsi
Memeriksa apakah testCondition bernilai true. Jika `testCondition` bernilai true, fungsi ini mengembalikan valueTrue. Jika tidak, fungsi mengembalikan valueFalseOrNull.
Parameter
testCondition: Wajib. Ekspresi yang akan dievaluasi. Nilai harus bertipe BOOLEAN.
valueTrue: Wajib. Nilai yang akan dikembalikan jika testCondition bernilai true.
valueFalseOrNull: Nilai yang akan dikembalikan jika testCondition bernilai false. Anda dapat mengatur parameter ini ke null.
Nilai kembali
Tipe data nilai kembali adalah tipe data umum dari valueTrue dan valueFalseOrNull.
Contoh
-- Nilai kembali adalah 200. select if(1=2, 100, 200);
MAX_PT
Sintaks
MAX_PT(<table_full_name>)Deskripsi
Mengembalikan nama partisi terbesar yang berisi data dalam tabel partisi. Partisi diurutkan secara alfabetis. Fungsi ini biasanya digunakan dalam klausa `WHERE` untuk membaca data dari partisi terbaru.
Perhatian
Fungsi
MAX_PTjuga dapat diimplementasikan menggunakan pernyataan SQL standar. Misalnya,SELECT * FROM table WHERE pt=MAX_PT("table");dapat ditulis ulang sebagaiSELECT * FROM table WHERE pt = (SELECT MAX(pt) FROM table);.CatatanMaxCompute tidak menyediakan fungsi
MIN_PT. Untuk menemukan partisi terkecil yang berisi data dalam tabel partisi, Anda tidak dapat menggunakan pernyataan SQLSELECT * FROM table WHERE pt=MIN_PT("table");seperti yang Anda lakukan dengan fungsiMAX_PT. Sebagai gantinya, gunakan pernyataan SQL standarSELECT * FROM table WHERE pt= (SELECT MIN(pt) FROM table);.Jika semua partisi dalam tabel kosong, fungsi
MAX_PTgagal. Pastikan setidaknya satu partisi berisi data.Fungsi MAX_PT didukung untuk tabel eksternal OSS maupun Tabel internal. Perilaku fungsi ini sama untuk kedua jenis tabel.
Parameter
table_full_name: Wajib. Nilai bertipe STRING yang menentukan nama tabel. Anda harus memiliki izin baca pada tabel tersebut.
Nilai kembali
Mengembalikan nama partisi terbesar.
CatatanPartisi yang dibuat menggunakan pernyataan
ALTER TABLEtetapi tidak berisi data tidak dikembalikan.Contoh
Contoh 1: Tabel tbl adalah tabel partisi dengan partisi 20120901 dan 20120902, keduanya berisi data. Dalam pernyataan berikut, fungsi
MAX_PTmengembalikan'20120902'. Pernyataan SQL MaxCompute membaca data dari partisipt='20120902'. Contoh pernyataan:SELECT * FROM tbl WHERE pt= MAX_PT('tbl'); -- Pernyataan di atas setara dengan pernyataan berikut: SELECT * FROM tbl WHERE pt= (SELECT MAX(pt) FROM tbl);Contoh 2: Jika tabel memiliki beberapa level partisi, gunakan pernyataan SQL standar untuk mengambil data dari partisi terbesar. Contoh pernyataan:
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
Sintaks
T nullif(T <expr1>, T <expr2>)Deskripsi
Membandingkan expr1 dan expr2. Jika nilainya sama, fungsi mengembalikan null. Jika nilainya berbeda, fungsi mengembalikan nilai expr1.
Parameter
expr1 dan expr2: Wajib. Ekspresi dengan tipe data apa pun.
Tmenentukan tipe data input, yang dapat berupa tipe data apa pun yang didukung MaxCompute.Nilai kembali
Mengembalikan nilai expr1 atau null.
Contoh
-- Nilai kembali adalah 2. select nullif(2, 3); -- Nilai kembali adalah null. select nullif(2, 2); -- Nilai kembali adalah 3. select nullif(3, null);
NVL
Sintaks
nvl(T <value>, T <default_value>)Deskripsi
Mengembalikan default_value jika value bernilai null. Jika tidak, fungsi mengembalikan value. Parameter `value` dan `default_value` harus memiliki tipe data yang sama.
Parameter
value: Wajib. Parameter input.
Tmenentukan tipe data input, yang dapat berupa tipe data apa pun yang didukung MaxCompute.default_value: Wajib. Nilai yang akan digunakan sebagai pengganti null. Tipe data `default_value` harus sama dengan tipe data value.
Contoh
Tabel bernama
t_databerisi tiga kolom:c1 string,c2 bigint, danc3 datetime. Tabel ini berisi data berikut.+----+------------+------------+ | 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 | +----+------------+------------+Setelah fungsi
nvldipanggil, nilai null dic1diganti dengan `00000`, nilai null dic2diganti dengan `0`, dan nilai null dic3diganti dengan tanda hubung (-). Contoh pernyataan:select nvl(c1,'00000'),nvl(c2,0),nvl(c3,'-') from nvl_test; -- Hasil berikut dikembalikan. +-----+------------+-----+ | _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
Sintaks
ORDINAL(BIGINT <nth>, <var1>, <var2>[,...])Deskripsi
Mengurutkan variabel input secara ascending dan mengembalikan nilai pada peringkat ke-nth.
Parameter
nth: Wajib. Nilai bertipe BIGINT yang menentukan peringkat nilai yang akan dikembalikan. Peringkat dimulai dari 1. Jika parameter ini bernilai null, fungsi mengembalikan null.
var: Wajib. Nilai yang akan diurutkan. Nilai harus bertipe BIGINT, DOUBLE, DATETIME, atau STRING.
Nilai kembali
Mengembalikan nilai pada peringkat ke-nth. Jika tidak diperlukan konversi implisit, nilai kembali memiliki tipe data yang sama dengan parameter input.
Jika terjadi konversi tipe data antara tipe DOUBLE, BIGINT, dan STRING, nilai bertipe DOUBLE dikembalikan. Jika terjadi konversi tipe data antara tipe STRING dan DATETIME, nilai bertipe DATETIME dikembalikan. Konversi implisit tipe data lainnya tidak didukung.
Nilai null diperlakukan sebagai nilai minimum.
Contoh
-- Nilai kembali adalah 3. SELECT ORDINAL(CAST(3 AS BIGINT), CAST(1 AS BIGINT), cast(3 AS BIGINT), cast(7 AS BIGINT), cast(5 AS BIGINT), cast(2 AS BIGINT), cast(4 AS BIGINT), cast(6 AS BIGINT));
PARTITION_EXISTS
Sintaks
boolean partition_exists(string <table_name>, string... <partitions>)Deskripsi
Memeriksa apakah partisi tertentu ada dalam tabel.
Parameter
table_name: Wajib. Nama tabel, bertipe STRING. Anda dapat menentukan nama proyek dalam nama tabel, seperti
my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan.partitions: Wajib. Nama partisi, bertipe STRING. Anda harus menentukan nilai kolom kunci partisi dalam urutan yang sama seperti yang didefinisikan dalam tabel. Jumlah nilai harus sesuai dengan jumlah kolom kunci partisi.
Nilai kembali
Mengembalikan nilai bertipe BOOLEAN. Fungsi mengembalikan `true` jika partisi yang ditentukan ada; jika tidak, fungsi mengembalikan `false`.
Contoh
-- Membuat tabel partisi bernama foo. create table foo (id bigint) partitioned by (ds string, hr string); -- Menambahkan partisi ke tabel partisi foo. alter table foo add partition (ds='20190101', hr='1'); -- Memeriksa apakah partisi ds='20190101' dan hr='1' ada. True dikembalikan. select partition_exists('foo', '20190101', '1');
SAFE_CAST
SAFE_CAST AS INT
Sintaks
SAFE_CAST (<expr> AS INT)Parameter
expr: Wajib. Ekspresi yang akan dikonversi.
Nilai kembali
Mengembalikan nilai
INT. Jika konversi berhasil, fungsi mengembalikan nilai yang sesuai. Jika konversi gagal, fungsi mengembalikanNULLalih-alih menimbulkan error. Ini adalah perilaku inti yang membedakanSAFE_CASTdariCAST.Untuk string dengan karakter non-numerik, seperti '123abc':
Dalam mode non-ketat (default,
odps.sql.udf.strict.mode=false), operasi mengembalikan bagian numerik sebelum huruf.Dalam mode ketat (
odps.sql.udf.strict.mode=true), NULL dikembalikan.
Untuk string yang hanya berisi karakter non-numerik, seperti 'abc':
Dalam mode non-ketat (default) (
odps.sql.udf.strict.mode=false), NULL dikembalikan.Dalam mode ketat (
odps.sql.udf.strict.mode=true), NULL dikembalikan.
Contoh
-- Mode non-ketat (default) SELECT SAFE_CAST('123abc' AS INT) AS toint ,SAFE_CAST('abc' AS INT) AS toint2 ; -- Hasil +-------+--------+ | toint | toint2 | +-------+--------+ | 123 | NULL | +-------+--------+ -- Mode ketat SET odps.sql.udf.strict.mode=true; SELECT SAFE_CAST('123abc' AS INT) AS toint ,SAFE_CAST('abc' AS INT) AS toint2 ; -- Hasil +-------+--------+ | toint | toint2 | +-------+--------+ | NULL | NULL | +-------+--------+
SAFE_CAST AS BIGINT
Sintaks
SAFE_CAST (<expr> AS BIGINT)Parameter
expr: Wajib. Ekspresi yang akan dikonversi.
Nilai kembali
Mengembalikan nilai
BIGINT. Jika konversi berhasil, fungsi mengembalikan nilai yang sesuai. Jika konversi gagal, fungsi mengembalikanNULLalih-alih menimbulkan error. Ini adalah perilaku inti yang membedakanSAFE_CASTdariCAST.Untuk string dengan karakter non-numerik, seperti '123abc':
Dalam mode non-ketat (default) (
odps.sql.udf.strict.mode=false), fungsi mengembalikan bagian numerik sebelum huruf.Dalam mode ketat (
odps.sql.udf.strict.mode=true), NULL dikembalikan.
Untuk string yang hanya berisi karakter non-numerik, seperti 'abc':
Dalam mode non-ketat (default) (
odps.sql.udf.strict.mode=false), fungsi mengembalikan 0.Dalam mode ketat (
odps.sql.udf.strict.mode=true), NULL dikembalikan.
Contoh
-- Mode non-ketat (default) SELECT SAFE_CAST('123abc' AS BIGINT) AS tobigint ,SAFE_CAST('abc' AS BIGINT) AS tobigint2 ; -- Hasil +------------+------------+ | tobigint | tobigint2 | +------------+------------+ | 123 | 0 | +------------+------------+ -- Mode ketat SET odps.sql.udf.strict.mode=true; SELECT SAFE_CAST('123abc' AS BIGINT) AS tobigint ,SAFE_CAST('abc' AS BIGINT) AS tobigint2 ; -- Hasil +------------+------------+ | tobigint | tobigint2 | +------------+------------+ | NULL | NULL | +------------+------------+
SAMPLE
Sintaks
boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]])Deskripsi
Mengambil sampel semua nilai dari column_name berdasarkan x dan y, serta memfilter baris yang tidak memenuhi kondisi sampling.
Parameter
x dan y: x wajib. `x` dan `y` harus merupakan konstanta integer bertipe BIGINT yang lebih besar dari 0. Parameter ini menunjukkan bahwa nilai-nilai dibagi menjadi x bagian berdasarkan fungsi hash, dan bagian ke-y dipilih.
y opsional. Jika y tidak ditentukan, bagian pertama dipilih secara default, dan Anda tidak perlu menentukan column_name.
Error dikembalikan jika x atau y bertipe data lain, kurang dari atau sama dengan 0, atau jika y lebih besar dari x. Jika x atau y bernilai null, fungsi mengembalikan null.
column_name: Opsional. Nama kolom tempat sampling dilakukan. Jika parameter ini tidak ditentukan, sampling acak dilakukan berdasarkan nilai x dan y. Kolom dapat bertipe data apa pun, dan nilainya dapat bernilai null. Konversi implisit tidak dilakukan. Error dikembalikan jika column_name itu sendiri bernilai null.
CatatanUntuk mencegah kesenjangan data yang disebabkan oleh nilai null, hashing seragam dilakukan pada nilai null di column_name di seluruh x bagian. Jika column_name tidak ditentukan dan jumlah data kecil, output mungkin tidak seragam. Dalam kasus ini, kami menyarankan Anda menentukan column_name untuk mendapatkan output yang seragam.
Sampling acak hanya dapat dilakukan pada kolom bertipe data BIGINT, DATETIME, BOOLEAN, DOUBLE, STRING, BINARY, CHAR, dan VARCHAR.
Nilai kembali
Mengembalikan nilai bertipe BOOLEAN.
Contoh
Tabel
tblaberisi kolomcola.-- Nilai dalam kolom cola dibagi menjadi empat bagian berdasarkan fungsi hash, dan bagian pertama digunakan. True dikembalikan. select * from tbla where sample (4, 1 , cola); -- Nilai di setiap baris di-hash secara acak ke empat bagian, dan bagian kedua digunakan. True dikembalikan. select * from tbla where sample (4, 2);
SHA
Sintaks
string sha(string|binary <expr>)Deskripsi
Menghitung nilai hash SHA-1 dari expr dan mengembalikan nilai hash tersebut sebagai string heksadesimal. Parameter `expr` harus bertipe STRING atau BINARY.
Parameter
expr: Wajib. Nilai bertipe STRING atau BINARY.
Nilai kembali
Mengembalikan nilai bertipe STRING. Jika input bernilai null, nilai kembali adalah null.
Contoh
Contoh 1: Hitung nilai hash SHA dari string
ABC. Contoh pernyataan:-- Nilai kembali adalah 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha('ABC');Contoh 2: Parameter input bernilai null. Contoh pernyataan:
-- Nilai kembali adalah null. select sha(null);
SHA1
Sintaks
string sha1(string|binary <expr>)Deskripsi
Menghitung nilai hash SHA-1 dari expr dan mengembalikan nilai hash tersebut sebagai string heksadesimal. Parameter `expr` harus bertipe STRING atau BINARY.
Parameter
expr: Wajib. Nilai bertipe STRING atau BINARY.
Nilai kembali
Mengembalikan nilai bertipe STRING. Jika input bernilai null, nilai kembali adalah null.
Contoh
Contoh 1: Hitung nilai hash SHA-1 dari string
ABC. Contoh pernyataan:-- Nilai kembali adalah 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha1('ABC');Contoh 2: Parameter input bernilai null. Contoh pernyataan:
-- Nilai kembali adalah null. select sha1(null);
SHA2
Sintaks
string sha2(string|binary <expr>, bigint <number>)Deskripsi
Menghitung nilai hash SHA-2 dari expr dan mengembalikan nilai hash tersebut dalam format yang ditentukan oleh number. Parameter `expr` harus bertipe STRING atau BINARY.
Parameter
expr: Wajib. Nilai bertipe STRING atau BINARY.
number: Wajib. Nilai bertipe BIGINT yang menentukan panjang bit hash. Nilai yang valid adalah 224, 256, 384, 512, dan 0. Nilai kembali untuk 256 sama dengan nilai kembali untuk 0.
Nilai kembali
Mengembalikan nilai bertipe STRING. Nilai kembali mengikuti aturan berikut:
Jika parameter input bernilai null, fungsi mengembalikan null.
Jika nilai number tidak berada dalam rentang yang valid, fungsi mengembalikan null.
Contoh
Contoh 1: Hitung nilai hash SHA-2 dari string
ABC. Contoh pernyataan:-- Nilai kembali adalah b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78. select sha2('ABC', 256);Contoh 2: Parameter input bernilai null. Contoh pernyataan:
-- Nilai kembali adalah null. select sha2('ABC', null);
STACK
Sintaks
stack(n, expr1, ..., exprk)Deskripsi
Memisahkan
expr1, ..., exprkmenjadi `n` baris. Kecuali ditentukan lain, kolom output secara default diberi namacol0, col1....Parameter
n: Wajib. Jumlah baris yang akan dibuat.
expr: Wajib. Ekspresi yang akan dipisahkan.
expr1, ..., exprkharus bertipe integer. Jumlah ekspresi harus merupakan kelipatan integer dari n agar dapat dipisahkan menjadi n baris lengkap. Jika tidak, error dikembalikan.
Nilai kembali
Mengembalikan dataset berisi `n` baris. Jumlah kolom adalah jumlah total ekspresi dibagi `n`.
Contoh
-- Memisahkan grup parameter 1, 2, 3, 4, 5, 6 menjadi tiga baris. select stack(3, 1, 2, 3, 4, 5, 6); -- Hasil berikut dikembalikan. +------+------+ | col0 | col1 | +------+------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | +------+------+ -- Memisahkan 'A',10,date '2015-01-01','B',20,date '2016-01-01' menjadi dua baris. select stack(2,'A',10,date '2015-01-01','B',20,date '2016-01-01') as (col0,col1,col2); -- Hasil berikut dikembalikan. +------+------+------+ | col0 | col1 | col2 | +------+------+------+ | A | 10 | 2015-01-01 | | B | 20 | 2016-01-01 | +------+------+------+ -- Memisahkan a, b, c, dan d menjadi dua baris. Jika tabel sumber berisi beberapa baris, fungsi ini dipanggil untuk setiap baris. 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); -- Hasil berikut dikembalikan. +------+-------+ | col | value | +------+-------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | | 7 | 8 | | 9 | 10 | | 11 | 12 | | 13 | 14 | | 15 | NULL | +------+-------+ -- Gunakan fungsi ini dengan klausa lateral view. 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; -- Hasil berikut dikembalikan. +------+------+------+ | col0 | col1 | col2 | +------+------+------+ | A | 10 | 2015-01-01 | | B | 20 | 2016-01-01 | +------+------+------+
STR_TO_MAP
Sintaks
str_to_map([string <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])Deskripsi
Memisahkan text menjadi pasangan kunci-nilai menggunakan delimiter1, lalu memisahkan kunci dari nilai di setiap pasangan menggunakan delimiter2.
Parameter
-
mapDupKeyPolicy: opsional. Nilai bertipe STRING. Parameter ini menentukan metode yang digunakan untuk menangani kunci duplikat. Nilai yang valid:
-
exception: Error dikembalikan.
-
last_win: Kunci yang belakang menggantikan kunci yang depan.
Anda juga dapat menentukan parameter
odps.sql.map.key.dedup.policypada tingkat session untuk mengonfigurasi metode penanganan kunci duplikat. Misalnya, Anda dapat mengaturodps.sql.map.key.dedup.policyke exception. Jika Anda tidak menentukan parameter ini, nilai default last_win digunakan.CatatanImplementasi perilaku MaxCompute ditentukan berdasarkan mapDupKeyPolicy. Jika Anda tidak menentukan mapDupKeyPolicy, nilai
odps.sql.map.key.dedup.policydigunakan. -
text: Wajib. String yang akan dipisahkan. Nilai harus bertipe STRING.
delimiter1: Delimiter opsional bertipe STRING. Jika parameter ini tidak ditentukan, koma (
,) digunakan secara default.delimiter2: Delimiter opsional bertipe STRING. Jika parameter ini tidak ditentukan, tanda sama dengan (
=) digunakan secara default.CatatanJika delimiter berupa ekspresi reguler atau karakter khusus, Anda harus melakukan escape dengan dua backslash (\\). Karakter khusus yang dapat digunakan sebagai delimiter meliputi titik dua (:), titik (.), tanda tanya (?), tanda plus (+), dan tanda bintang (*).
-
Nilai kembali
Mengembalikan nilai bertipe
map<string, string>. Fungsi memisahkan string text menggunakan delimiter1 dan delimiter2.Contoh
-- Nilai kembali adalah {test1:1, test2:2}. select str_to_map('test1&1-test2&2','-','&'); -- Nilai kembali adalah {test1:1, test2:2}. select str_to_map("test1.1,test2.2", ",", "\\."); -- Nilai kembali adalah {test1:1, test2:3}. select str_to_map("test1.1,test2.2,test2.3", ",", "\\.");
TABLE_EXISTS
Sintaks
boolean table_exists(string <table_name>)Deskripsi
Memeriksa apakah tabel tertentu ada.
Parameter
table_name: Wajib. Nama tabel, bertipe STRING. Anda dapat menentukan nama proyek dalam nama tabel, seperti
my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan.Nilai kembali
Mengembalikan nilai bertipe BOOLEAN. Fungsi mengembalikan `true` jika tabel yang ditentukan ada; jika tidak, fungsi mengembalikan `false`.
Contoh
-- Gunakan fungsi ini untuk daftar dalam pernyataan SELECT. select if(table_exists('abd'), col1, col2) from src;
TRANS_ARRAY
Batasan
Semua kolom yang digunakan sebagai
keyharus ditempatkan sebelum kolom yang akan ditransposisikan.Hanya satu user-defined table-valued function (UDTF) yang diizinkan dalam pernyataan
select. Kolom lain tidak diizinkan.Fungsi ini tidak dapat digunakan dengan klausa
group by,cluster by,distribute by, atausort by.
Sintaks
trans_array (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) as (<key1>,<key2>,...,<col1>, <col2>)Deskripsi
Memindahkan satu baris data menjadi beberapa baris. UDTF ini memindahkan kolom yang berisi array yang dipisahkan oleh delimiter tetap menjadi beberapa baris.
Parameter
num_keys: Wajib. Konstanta bertipe BIGINT. Nilai harus lebih besar dari atau sama dengan
0. Parameter ini menentukan jumlah kolom yang akan digunakan sebagaikeysaat memindahkan satu baris menjadi beberapa baris.separator: Wajib. Konstanta bertipe STRING yang digunakan untuk memisahkan string menjadi beberapa elemen. Error dikembalikan jika parameter ini adalah string kosong.
keys: Wajib. Kolom yang akan digunakan sebagai
keyuntuk transposisi. Jumlah keys ditentukan oleh num_keys. Jika num_keys menentukan bahwa semua kolom digunakan sebagaikey(yaitu, num_keys sama dengan jumlah total kolom), hanya satu baris yang dikembalikan.cols: Wajib. Parameter ini menentukan array yang ingin Anda transposisikan menjadi baris. Semua kolom yang mengikuti
keysdianggap sebagai array yang akan ditransposisikan. Nilai parameter ini harus bertipe STRING untuk menyimpan array dalam format string, sepertiHangzhou;Beijing;Shanghai. Nilai dalam array ini dipisahkan oleh titik koma (;).
Nilai kembali
Mengembalikan baris yang telah ditransposisikan. Nama kolom baru ditentukan oleh
as. Tipe data kolom yang digunakan sebagaikeytetap tidak berubah. Semua kolom lain bertipe STRING. Jumlah baris yang ditransposisikan ditentukan oleh array yang memiliki elemen paling banyak. Jika array lain memiliki lebih sedikit elemen, null digunakan untuk nilai yang hilang.Contoh
Contoh 1: Tabel
t_tableberisi data berikut.+----------+----------+------------+ | 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 | +----------+----------+------------+ -- Jalankan pernyataan SQL. select trans_array(1, ",", login_id, login_ip, login_time) as (login_id,login_ip,login_time) from t_table; -- Hasil berikut dikembalikan. +----------+----------+------------+ | 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 | +----------+----------+------------+ -- Jika tabel berisi data berikut: Login_id LOGIN_IP LOGIN_TIME wangwangA 192.168.0.1,192.168.0.2 20120101010000 -- Nilai null ditambahkan untuk melengkapi array yang datanya tidak mencukupi. Login_id Login_ip Login_time wangwangA 192.168.0.1 20120101010000 wangwangA 192.168.0.2 NULLContoh 2: Tabel mf_fun_array_test_t berisi data berikut.
+------------+------------+------------+------------+ | 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 | +------------+------------+------------+------------+ -- Gunakan dua key, id dan name, untuk mentransposisikan array. Jalankan pernyataan SQL. select trans_array(2, ",", Id,Name, login_ip, login_time) as (Id,Name,login_ip,login_time) from mf_fun_array_test_t; -- Hasil berikut dikembalikan. Data dipisah dan dikelompokkan berdasarkan key id dan name. +------------+------------+------------+------------+ | 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
Batasan
Semua kolom yang digunakan sebagai
keyharus ditempatkan sebelum kolom yang akan ditransposisikan.Hanya satu UDTF yang diizinkan dalam pernyataan
select. Kolom lain tidak diizinkan.
Sintaks
trans_cols (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) as (<idx>, <key1>,<key2>,…,<col1>, <col2>)Deskripsi
User-defined table-valued function (UDTF) yang mengubah satu baris menjadi beberapa baris dengan memisahkan kolom menjadi baris terpisah.
Parameter
num_keys: Wajib. Konstanta bertipe BIGINT. Nilai harus lebih besar dari atau sama dengan
0. Parameter ini menentukan jumlah kolom yang akan digunakan sebagai key saat memindahkan satu baris menjadi beberapa baris.keys: Wajib. Kolom yang akan digunakan sebagai key untuk operasi transpose. Jumlah keys ditentukan oleh num_keys. Jika num_keys menentukan bahwa semua kolom digunakan sebagai key (yaitu, num_keys sama dengan jumlah total kolom), hanya satu baris yang dikembalikan.
idx: Wajib. Menentukan nomor baris yang telah ditransformasi.
cols: Wajib. Kolom yang ingin Anda transposisikan menjadi baris.
Nilai kembali
Mengembalikan baris yang telah ditransposisikan. Nama kolom baru ditentukan oleh
as. Kolom output pertama adalah subskrip yang telah ditransposisikan, yang dimulai dari 1. Tipe data kolom yang digunakan sebagai key tetap tidak berubah, dan tipe data kolom lain juga tetap tidak berubah.Contoh
Tabel
t_tableberisi data berikut.+----------+----------+------------+ | Login_id | Login_ip1 | Login_ip2 | +----------+----------+------------+ | wangwangA | 192.168.0.1 | 192.168.0.2 | +----------+----------+------------+ -- Jalankan pernyataan SQL. select trans_cols(1, login_id, login_ip1, login_ip2) as (idx, login_id, login_ip) from t_table; -- Hasil berikut dikembalikan. idx login_id login_ip 1 wangwangA 192.168.0.1 2 wangwangA 192.168.0.2
UNIQUE_ID
Sintaks
string unique_id()Deskripsi
Mengembalikan ID unik, seperti
29347a88-1e57-41ae-bb68-a9edbdd9****_1. Fungsi ini lebih efisien daripada fungsi UUID. ID yang dikembalikan lebih panjang dan berisi sufiks, seperti_1, yang terdiri dari garis bawah (_) dan angka.
UUID
Sintaks
string uuid()Deskripsi
Mengembalikan ID acak, seperti
29347a88-1e57-41ae-bb68-a9edbdd9****.CatatanNilai kembali adalah identifier unik global (GUID) acak, yang unik dalam sebagian besar kasus.