MaxCompute SQL menyediakan berbagai fungsi tambahan yang sering digunakan selama pengembangan. Topik ini menjelaskan sintaksis, parameter, serta contoh penggunaan untuk fungsi seperti CAST, FAILIF, dan HASH.
Fungsi | Fitur |
Mengembalikan nilai yang berada di dalam atau di luar rentang tertentu. | |
Mengembalikan nilai berdasarkan hasil perhitungan ekspresi. | |
Mengonversi hasil dari suatu ekspresi ke tipe data yang ditentukan. | |
Mengembalikan nilai pertama yang bukan null dalam daftar parameter. | |
Menggunakan algoritma GZIP untuk menekan parameter masukan bertipe STRING atau BINARY. | |
Menghitung nilai pemeriksaan redundansi siklik dari nilai bertipe STRING atau BINARY. | |
Menggunakan algoritma GZIP untuk mendekompresi parameter masukan bertipe BINARY. | |
Mengembalikan true atau pesan kesalahan dengan informasi kustom berdasarkan hasil evaluasi ekspresi. | |
Mengembalikan usia dalam tahun berdasarkan nomor kartu identitas. | |
Mengembalikan tanggal lahir berdasarkan nomor kartu identitas. | |
Mengembalikan jenis kelamin berdasarkan nomor kartu identitas. | |
Mendapatkan ID akun saat ini. | |
Menghitung nilai hash berdasarkan parameter masukan. | |
Memeriksa apakah kondisi tertentu benar. | |
Mengembalikan nama partisi hash terbesar dalam tabel partisi. | |
Memeriksa apakah nilai dua parameter masukan sama. | |
Menentukan nilai kembali dari parameter yang nilainya adalah null. | |
Mengurutkan nilai variabel masukan secara menaik dan mengembalikan nilai yang berada pada posisi tertentu. | |
Memeriksa apakah partisi tertentu ada dalam tabel. | |
Memilih 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 sejumlah baris tertentu. | |
Memisahkan string dengan pemisah tertentu dan mengembalikan pasangan kunci-nilai. | |
Memeriksa apakah tabel tertentu ada. | |
Menukar satu baris data menjadi beberapa baris. Fungsi ini adalah user-defined table-valued function (UDTF) yang mentranspos array dipisahkan oleh delimeter tetap dalam kolom menjadi beberapa baris. | |
Menukar satu baris data menjadi beberapa baris. Fungsi ini adalah UDTF yang mentranspos kolom menjadi baris. | |
Mengembalikan ID unik. Fungsi ini lebih efisien daripada fungsi UUID. | |
Mengembalikan ID acak. |
BASE64
Sintaksis
string base64(binary <value>)Deskripsi
Mengonversi nilai value biner menjadi string yang dikodekan Base64.
Parameter
value: Nilai wajib bertipe BINARY. Ini adalah nilai yang akan dikonversi.
Nilai Kembali
Mengembalikan nilai bertipe STRING. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
Contoh
Contoh 1: Konversi hasil biner dari
cast ('alibaba' as binary)menjadi string yang dikodekan Base64. Pernyataan sampel:-- Nilai kembali adalah YWxpYmFiYQ==. select base64(cast ('alibaba' as binary));Contoh 2: Parameter masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select base64(null);
Ekspresi BETWEEN AND
Sintaksis
<a> [NOT] between <b> and <c>Deskripsi
Memeriksa apakah nilai dari a berada dalam rentang b dan c, atau tidak berada dalam rentang b dan c.
Parameter
a: Wajib. Bidang yang nilainya ingin Anda periksa.
b dan c: Wajib. Parameter ini menentukan rentang nilai. Tipe data parameter ini harus sama dengan tipe data parameter a.
Nilai Kembali
Mengembalikan nilai yang memenuhi kondisi.
Jika parameter a, b, atau c adalah 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 antara 1000 dan 1500. Pernyataan sampel: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 | +-------+-------+-----+------------+------------+------------+------------+------------+
Ekspresi CASE WHEN
Sintaksis
MaxCompute menyediakan dua format
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 nilai dari result berdasarkan evaluasi dari 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 adalah tipe BIGINT atau DOUBLE, tipe datanya dikonversi ke DOUBLE sebelum nilai dikembalikan.
Jika ada nilai result bertipe STRING, semua nilai dikonversi ke tipe STRING sebelum dikembalikan. Kesalahan akan 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 tersebut 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 | +------------+-------------+-------------+------------+------------+Pernyataan sampel:
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
Sintaksis
cast(<expr> as <type>)Deskripsi
Mengonversi nilai dari expr ke tipe data target type.
Parameter
expr: Wajib. Ekspresi yang akan dikonversi.
type: Wajib. Tipe data target. Penggunaan:
cast(double as bigint): Mengonversi nilai bertipe DOUBLE menjadi BIGINT.cast(string as bigint): Mengonversi nilai bertipe STRING menjadi BIGINT. Jika string hanya berisi bilangan bulat, maka langsung dikonversi ke tipe BIGINT. Jika string berisi bilangan titik mengambang atau dalam bentuk eksponensial, pertama-tama dikonversi ke tipe DOUBLE lalu ke BIGINT.Format tanggal default
yyyy-mm-dd hh:mi:ssdigunakan untukcast(string as datetime)ataucast(datetime as string).
Nilai Kembali
Mengembalikan nilai dengan tipe data target.
Jika Anda menjalankan perintah
setproject odps.function.strictmode=false, fungsi ini mengembalikan angka sebelum huruf pertama.Jika Anda menjalankan perintah
setproject odps.function.strictmode=true, kesalahan akan dikembalikan.Ketika Anda mengonversi nilai ke tipe DECIMAL, nol di akhir setelah titik desimal akan dihapus jika Anda menyetel
odps.sql.decimal.tostring.trimzero=true. Nol di akhir dipertahankan jika Anda menyetelodps.sql.decimal.tostring.trimzero=false.PentingParameter
odps.sql.decimal.tostring.trimzerohanya berlaku ketika data diambil dari tabel dan tidak mempengaruhi nilai statis.
Contoh
Contoh 1: Penggunaan umum. Pernyataan sampel:
-- Nilai kembali adalah 1. select cast('1' as bigint);Contoh 2: Mengonversi nilai bertipe STRING menjadi BOOLEAN. Jika nilai bertipe STRING adalah string kosong,
falseakan dikembalikan. Sebaliknya,trueakan dikembalikan. Pernyataan sampel:Nilai bertipe STRING adalah string kosong.
select cast("" as boolean); -- Nilai kembali adalah false. +------+ | _c0 | +------+ | false | +------+Nilai bertipe STRING adalah string tidak kosong.
select cast("false" as boolean); -- Nilai kembali adalah true. +------+ | _c0 | +------+ | true | +------+
Contoh 3: Mengonversi string menjadi tanggal.
-- Mengonversi string menjadi tanggal. select cast("2022-12-20" as date); -- Hasil berikut dikembalikan: +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+ -- Mengonversi string tanggal yang berisi bagian jam, menit, dan detik menjadi tanggal. select cast("2022-12-20 00:01:01" as date); -- Hasil berikut dikembalikan: +------------+ | _c0 | +------------+ | NULL | +------------+ -- Untuk memastikan tanggal valid dikembalikan, jalankan perintah berikut: set odps.sql.executionengine.enable.string.to.date.full.format= true; select cast("2022-12-20 00:01:01" as date); -- Hasil berikut dikembalikan: +------------+ | _c0 | +------------+ | 2022-12-20 | +------------+CatatanSecara default, parameter
odps.sql.executionengine.enable.string.to.date.full.formatdisetel kefalse. Jika Anda ingin mengonversi string tanggal yang berisi bagian jam, menit, dan detik, Anda harus menyetel parameter ini ketrue.Contoh 4: (Penggunaan salah) Jika konversi tipe gagal atau tidak didukung, kesalahan akan dikembalikan. Pernyataan sampel salah:
select cast('abc' as bigint);Contoh 5:
setproject odps.function.strictmode=falseditentukan.setprojectodps.function.strictmode=false; select cast('123abc'as bigint); -- Hasil berikut dikembalikan: +------------+ |_c0| +------------+ |123| +------------+Contoh 6:
setproject odps.function.strictmode=trueditentukan.setprojectodps.function.strictmode=true; select cast('123abc' as bigint); -- Hasil berikut dikembalikan: FAILED:ODPS-0130071:[0,0]Semanticanalysisexception-physicalplangenerationfailed:java.lang.NumberFormatException:ODPS-0123091:Illegaltypecast-Infunctioncast,value'123abc'cannotbecastedfromStringtoBigint.Contoh 7: Parameter
odps.sql.decimal.tostring.trimzeroditentukan.-- Buat tabel. create table mf_dot (dcm1 decimal(38,18), dcm2 decimal(38,18)); -- Masukkan data ke dalam tabel. insert into table mf_dot values (12.45500BD,12.3400BD); -- Setel parameter odps.sql.decimal.tostring.trimzero ke true, atau jangan konfigurasikan parameter odps.sql.decimal.tostring.trimzero. set odps.sql.decimal.tostring.trimzero=true; -- Hapus angka 0 di akhir desimal. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; -- Hasil berikut dikembalikan: +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.34 | +------------+------------+ -- Setel parameter odps.sql.decimal.tostring.trimzero ke false. set odps.sql.decimal.tostring.trimzero=false; -- Pertahankan angka 0 di akhir desimal. select cast(round(dcm1,3) as string),cast(round(dcm2,3) as string) from mf_dot; -- Hasil berikut dikembalikan: +------------+------------+ | _c0 | _c1 | +------------+------------+ | 12.455 | 12.340 | +------------+------------+ -- Parameter odps.sql.decimal.tostring.trimzero tidak berlaku untuk nilai statis. set odps.sql.decimal.tostring.trimzero=false; select cast(round(12345.120BD,3) as string); -- Hasil berikut dikembalikan: +------------+ | _c0 | +------------+ | 12345.12 | +------------+
COALESCE
Sintaksis
coalesce(<expr1>, <expr2>, ...)Deskripsi
Mengembalikan nilai non-null pertama dalam daftar ekspresi
<expr1>, <expr2>, ....Parameter
expr: Wajib. Ekspresi yang akan dievaluasi.
Nilai Kembali
Tipe data nilai kembali sama dengan tipe data parameter masukan.
Contoh
Contoh 1: Contoh penggunaan umum. Pernyataan sampel:
-- Nilai kembali adalah 1. select coalesce(null,null,1,null,3,5,7);Contoh 2: Jika tipe data nilai parameter tidak dapat ditentukan, kesalahan akan dikembalikan.
Pernyataan sampel salah
-- Nilai abc tidak dapat diidentifikasi karena tipe data nilai abc tidak didefinisikan. Kesalahan dikembalikan. select coalesce(null,null,1,null,abc,5,7);Pernyataan sampel benar
select coalesce(null,null,1,null,'abc',5,7);
Contoh 3: Jika data tidak dibaca dari tabel dan semua parameter masukan adalah null, kesalahan akan dikembalikan. Pernyataan sampel salah:
-- Kesalahan dikembalikan karena nilai non-null tidak ada. select coalesce(null,null,null,null);Contoh 4: Jika data dibaca dari tabel dan semua parameter masukan adalah 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 di tabel sumber semuanya null. Setelah pernyataan berikut dieksekusi, null dikembalikan.
select coalesce(customer_id,total_price) from sale_detail where shop_name='tt';
COMPRESS
Sintaksis
binary compress(string <str>) binary compress(binary <bin>)Deskripsi
Menekan str atau bin menggunakan algoritma GZIP.
Parameter
str: Nilai wajib bertipe STRING.
bin: Nilai wajib bertipe BINARY.
Nilai Kembali
Mengembalikan nilai bertipe BINARY. Jika parameter masukan adalah null, fungsi ini mengembalikan 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 masukan adalah string kosong. Pernyataan sampel:
-- 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 masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select compress(null);
CRC32
Sintaksis
bigint crc32(string|binary <expr>)Deskripsi
Menghitung nilai pemeriksaan redundansi siklik untuk expr. Nilai `expr` harus bertipe STRING atau BINARY.
Parameter
expr: Nilai wajib bertipe STRING atau BINARY.
Nilai Kembali
Mengembalikan nilai bertipe BIGINT. Nilai kembali ditentukan oleh aturan berikut:
Jika parameter masukan adalah null, fungsi ini mengembalikan null.
Jika parameter masukan adalah string kosong, 0 dikembalikan.
Contoh
Contoh 1: Hitung nilai pemeriksaan redundansi siklik dari string
ABC. Pernyataan sampel:-- Nilai kembali adalah 2743272264. select crc32('ABC');Contoh 2: Parameter masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select crc32(null);
DECODE
Sintaksis
decode(<expression>, <search>, <result>[, <search>, <result>]...[, <default>])Deskripsi
Menerapkan logika kondisional
if-then-else.Parameter
expression: Wajib. Ekspresi yang akan dibandingkan.
search: Wajib. Item pencarian yang akan dibandingkan dengan expression.
result: Wajib. Nilai yang akan dikembalikan jika search cocok dengan expression.
default: Opsional. Jika tidak ada item pencarian yang cocok dengan ekspresi, nilai default akan dikembalikan. Jika parameter ini tidak ditentukan, null akan dikembalikan.
CatatanSemua nilai result, kecuali nilai NULL, harus memiliki tipe data yang sama. Kesalahan akan dikembalikan jika tipe datanya berbeda.
Nilai dari search dan expression harus memiliki tipe data yang sama. Jika tidak, kesalahan akan dikembalikan.
Nilai Kembali
Jika item pencarian cocok dengan ekspresi, hasil result yang sesuai akan dikembalikan.
Jika tidak ada item pencarian yang cocok dengan ekspresi, nilai default akan dikembalikan.
Jika parameter default tidak ditentukan, null akan dikembalikan.
Jika beberapa item search cocok dengan ekspresi, hasil dari item pertama yang cocok akan dikembalikan.
MaxCompute SQL biasanya mengembalikan null ketika mengevaluasi
NULL=NULL. Namun, fungsi DECODE memperlakukan dua nilai null sebagai sama.
Contoh
Tabel
sale_detailberisi kolomshop_name string, customer_id string, total_price double. Tabel tersebut 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 | +------------+-------------+-------------+------------+------------+Pernyataan sampel:
-- Jika nilai customer_id adalah c1, Taobao dikembalikan. Jika nilainya c2, Alipay dikembalikan. Jika nilainya c3, Aliyun dikembalikan. Jika nilainya null, N/A dikembalikan. Dalam kasus lain, Others dikembalikan. select decode(customer_id, 'c1', 'Taobao', 'c2', 'Alipay', 'c3', 'Aliyun', Null, 'N/A', 'Others') as result from sale_detail; -- Pernyataan sebelumnya setara dengan pernyataan berikut: 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;Hasil berikut dikembalikan.
+------------+ | result | +------------+ | Others | | Others | | Others | | Taobao | | Alipay | | Aliyun | +------------+
DECOMPRESS
Sintaksis
binary decompress(binary <bin>)Deskripsi
Mendekompresi bin menggunakan algoritma GZIP.
Parameter
bin: Nilai wajib bertipe BINARY.
Nilai Kembali
Mengembalikan nilai bertipe BINARY. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
Contoh
Contoh 1: Mendekompresi string terkompresi
hello, worlddan mengonversi hasilnya menjadi string. Pernyataan sampel:-- Nilai kembali adalah hello, world. select cast(decompress(compress('hello, world')) as string);Contoh 2: Parameter masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select decompress(null);
GET_IDCARD_AGE
Sintaksis
get_idcard_age(<idcardno>)Deskripsi
Menghitung usia saat ini berdasarkan nomor kartu identitas. Usia dihitung dengan mengurangi tahun lahir dari tahun saat ini.
Parameter
idcardno: Nomor kartu identitas 15 digit atau 18 digit wajib bertipe STRING. Fungsi ini memvalidasi nomor kartu identitas berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi ini mengembalikan null.
Nilai Kembali
Mengembalikan nilai bertipe BIGINT. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
GET_IDCARD_BIRTHDAY
Sintaksis
get_idcard_birthday(<idcardno>)Deskripsi
Mengambil tanggal lahir dari nomor kartu identitas.
Parameter
idcardno: Nomor kartu identitas 15 digit atau 18 digit wajib bertipe STRING. Fungsi ini memvalidasi nomor kartu identitas berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi ini mengembalikan null.
Nilai Kembali
Mengembalikan nilai bertipe DATETIME. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
GET_IDCARD_SEX
Sintaksis
get_idcard_sex(<idcardno>)Deskripsi
Mengambil jenis kelamin dari nomor kartu identitas. Nilai kembali yang valid adalah
M(laki-laki) danF(perempuan).Parameter
idcardno: Nomor kartu identitas 15 digit atau 18 digit wajib bertipe STRING. Fungsi ini memvalidasi nomor kartu identitas berdasarkan kode provinsi dan digit terakhir. Jika validasi gagal, fungsi ini mengembalikan null.
Nilai Kembali
Mengembalikan nilai bertipe STRING. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
GET_USER_ID
Sintaksis
get_user_id()Deskripsi
Mendapatkan 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 | +------------+
GREATEST
Sintaksis
greatest(<var1>, <var2>[,...])Deskripsi
Mengembalikan nilai terbesar dari daftar parameter masukan.
Parameter
var1 dan var2: Wajib. Parameter harus bertipe BIGINT, DOUBLE, DECIMAL, DATETIME, atau STRING.
Nilai Kembali
Mengembalikan nilai terbesar di antara parameter masukan. Jika tidak diperlukan konversi implisit, nilai kembali memiliki tipe data yang sama dengan parameter masukan.
Nilai null dianggap sebagai nilai minimum.
Jika parameter input memiliki tipe data yang berbeda, parameter dengan tipe DOUBLE, BIGINT, DECIMAL, dan STRING akan dikonversi ke tipe DOUBLE untuk perbandingan. Parameter dengan tipe STRING dan DATETIME akan dikonversi ke tipe DATETIME untuk perbandingan. Konversi implisit untuk tipe data lainnya tidak didukung.
Jika
set odps.sql.hive.compatible=true;ditentukan dan parameter masukan adalah null, fungsi ini mengembalikan null.
HASH
Sintaksis
Jika proyek MaxCompute dalam mode kompatibel Hive, gunakan sintaksis berikut.
int hash(<value1>, <value2>[, ...]);Jika proyek MaxCompute tidak dalam mode kompatibel Hive, gunakan sintaksis berikut.
bigint hash(<value1>, <value2>[, ...]);
Deskripsi
Mengembalikan nilai hash berdasarkan value1 dan value2.
Parameter
value1 dan value2: Wajib. Parameter untuk operasi hash yang ingin Anda lakukan. Parameter dapat memiliki tipe data yang 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 masukan identik, nilai hash yang dikembalikan juga identik. Namun, jika dua nilai hash yang dikembalikan identik, parameter masukan belum tentu identik karena kemungkinan tabrakan hash.
Nilai Kembali
Mengembalikan nilai bertipe INT atau BIGINT. Jika parameter masukan adalah string kosong atau null, 0 dikembalikan.
Contoh
Contoh 1: Hitung nilai hash dari parameter masukan dengan tipe data yang sama. Pernyataan sampel:
-- Nilai kembali adalah 66. select hash(0, 2, 4);Contoh 2: Hitung nilai hash dari parameter masukan dengan tipe data yang berbeda. Pernyataan sampel:
-- Nilai kembali adalah 97. select hash(0, 'a');Contoh 3: Parameter masukan adalah string kosong atau null. Pernyataan sampel:
-- Nilai kembali adalah 0. select hash(0, null); -- Nilai kembali adalah 0. select hash(0, '');
IF
Sintaksis
if(<testCondition>, <valueTrue>, <valueFalseOrNull>)Deskripsi
Memeriksa apakah testCondition benar. Jika `testCondition` benar, fungsi ini mengembalikan valueTrue. Sebaliknya, mengembalikan valueFalseOrNull.
Parameter
testCondition: Wajib. Ekspresi yang akan dievaluasi. Nilainya harus bertipe BOOLEAN.
valueTrue: Wajib. Nilai yang akan dikembalikan jika testCondition benar.
valueFalseOrNull: Nilai yang akan dikembalikan jika testCondition salah. Anda dapat menyetel parameter ini ke null.
Nilai Kembali
Tipe data nilai kembali sama dengan tipe data dari valueTrue atau valueFalseOrNull.
Contoh
-- Nilai kembali adalah 200. select if(1=2, 100, 200);
LEAST
Sintaksis
least(<var1>, <var2>[,...])Deskripsi
Mengembalikan nilai terkecil dari daftar parameter masukan.
Parameter
var: Wajib. Parameter masukan. Parameter harus bertipe BIGINT, DOUBLE, DECIMAL, DATETIME, atau STRING.
Nilai Kembali
Mengembalikan nilai terkecil di antara parameter masukan. Jika tidak diperlukan konversi implisit, nilai kembali memiliki tipe data yang sama dengan parameter masukan.
Jika terjadi konversi tipe data antara DOUBLE, BIGINT, dan STRING, nilai bertipe DOUBLE akan dikembalikan. Jika terjadi konversi tipe data antara STRING dan DATETIME, nilai bertipe DATETIME akan dikembalikan. Konversi implisit tipe data lainnya tidak didukung.
Nilai null dianggap sebagai nilai minimum.
Jika semua parameter masukan adalah null, fungsi ini mengembalikan null.
Contoh
-- Nilai kembali adalah 2. select least(5, 2, 7);
MAX_PT
Sintaksis
MAX_PT(<table_full_name>)Deskripsi
Mengembalikan nama partisi terbesar yang berisi data dalam tabel partisi. Partisi diurutkan secara alfabetis. Fungsi kemudian membaca data dari partisi ini.
Peringatan
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 mendapatkan partisi terkecil yang berisi data dalam tabel partisi, Anda tidak dapat menggunakan pernyataan SQLSELECT * FROM table WHERE pt=MIN_PT("table");dengan cara yang sama seperti Anda menggunakan 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 asing OSS dan tabel internal. Perilaku fungsi sama untuk kedua jenis tabel.
Parameter
table_full_name: Nilai wajib 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 akan 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'. Pernyataan sampel:SELECT * FROM tbl WHERE pt= MAX_PT('tbl'); -- Pernyataan sebelumnya setara dengan pernyataan berikut: SELECT * FROM tbl WHERE pt= (SELECT MAX(pt) FROM tbl);Contoh 2: Jika sebuah tabel memiliki beberapa tingkat partisi, gunakan pernyataan SQL standar untuk mengambil data dari partisi terbesar. Pernyataan sampel:
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
Sintaksis
T nullif(T <expr1>, T <expr2>)Deskripsi
Membandingkan nilai dari expr1 dan expr2. Jika nilainya sama, fungsi ini mengembalikan null. Jika nilainya berbeda, fungsi ini mengembalikan nilai dari expr1.
Parameter
expr1 dan expr2: Ekspresi wajib dengan tipe data apa pun.
Tmenentukan tipe data masukan, yang bisa berupa tipe data apa pun yang didukung oleh MaxCompute.Nilai Kembali
Mengembalikan nilai dari 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
Sintaksis
nvl(T <value>, T <default_value>)Deskripsi
Mengembalikan default_value jika value adalah null. Sebaliknya, fungsi ini mengembalikan value. Parameter `value` dan `default_value` harus memiliki tipe data yang sama.
Parameter
value: Parameter masukan wajib.
Tmenentukan tipe data masukan, yang bisa berupa tipe data apa pun yang didukung oleh MaxCompute.default_value: Nilai wajib yang digunakan untuk mengganti null. Tipe data dari `default_value` harus sama dengan tipe data dari value.
Contoh
Tabel bernama
t_datamencakup tiga kolom:c1 string,c2 bigint, danc3 datetime. Tabel ini berisi data sebagai 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 (-). Pernyataan sampel: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
Sintaksis
ordinal(bigint <nth>, <var1>, <var2>[,...])Deskripsi
Mengurutkan variabel masukan secara menaik dan mengembalikan nilai pada peringkat nth.
Parameter
nth: Nilai wajib bertipe BIGINT yang menentukan peringkat nilai yang akan dikembalikan. Peringkat dimulai dari 1. Jika parameter ini adalah null, fungsi mengembalikan null.
var: Nilai wajib yang akan diurutkan. Nilainya harus bertipe BIGINT, DOUBLE, DATETIME, atau STRING.
Nilai Kembali
Mengembalikan nilai pada peringkat nth. Jika tidak diperlukan konversi implisit, nilai kembali memiliki tipe data yang sama dengan parameter masukan.
Jika terjadi konversi tipe data antara DOUBLE, BIGINT, dan STRING, nilai bertipe DOUBLE akan dikembalikan. Jika terjadi konversi tipe data antara STRING dan DATETIME, nilai bertipe DATETIME akan dikembalikan. Konversi implisit tipe data lainnya tidak didukung.
Nilai null dianggap sebagai nilai minimum.
Contoh
-- Nilai kembali adalah 3. SELECT ordinal(3, 1, 3, 7, 5, 2, 4, 6);
PARTITION_EXISTS
Sintaksis
boolean partition_exists(string <table_name>, string... <partitions>)Deskripsi
Memeriksa apakah partisi tertentu ada dalam tabel.
Parameter
table_name: Nama tabel wajib 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: Nama partisi wajib 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. Sebaliknya, mengembalikan `False`.
Contoh
-- Buat tabel partisi bernama foo. create table foo (id bigint) partitioned by (ds string, hr string); -- Tambahkan partisi ke tabel partisi foo. alter table foo add partition (ds='20190101', hr='1'); -- Periksa apakah partisi ds='20190101' dan hr='1' ada. True dikembalikan. select partition_exists('foo', '20190101', '1');
SAMPLE
Sintaksis
boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]])Deskripsi
Memilih semua nilai yang dibaca dari column_name berdasarkan x dan y, dan memfilter baris yang tidak memenuhi kondisi sampling.
Parameter
x dan y: x wajib. `x` dan `y` harus berupa konstanta integer lebih besar dari 0 dan bertipe BIGINT. Parameter ini menunjukkan bahwa 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.
Kesalahan dikembalikan jika x atau y adalah tipe data lain, kurang dari atau sama dengan 0, atau jika y lebih besar dari x. Jika x atau y adalah 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 memiliki tipe data apa pun, dan nilainya bisa null. Konversi implisit tidak dilakukan. Kesalahan dikembalikan jika column_name itu sendiri adalah null.
CatatanUntuk mencegah kesenjangan data yang disebabkan oleh nilai null, hashing seragam dilakukan pada nilai null dalam column_name di seluruh x bagian. Jika column_name tidak ditentukan dan jumlah data kecil, hasil keluaran mungkin tidak seragam. Dalam hal ini, kami menyarankan Anda menentukan column_name untuk mendapatkan hasil keluaran yang seragam.
Sampling acak hanya dapat dilakukan pada kolom bertipe 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 dalam setiap baris di-hash secara acak menjadi empat bagian, dan bagian kedua digunakan. True dikembalikan. select * from tbla where sample (4, 2);
SHA
Sintaksis
string sha(string|binary <expr>)Deskripsi
Menghitung nilai hash SHA-1 dari expr, yang harus bertipe STRING atau BINARY, dan mengembalikan nilai hash sebagai string heksadesimal.
Parameter
expr: Nilai wajib bertipe STRING atau BINARY.
Nilai Kembali
Mengembalikan nilai bertipe STRING. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
Contoh
Contoh 1: Hitung nilai hash SHA dari string
ABC. Pernyataan sampel:-- Nilai kembali adalah 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha('ABC');Contoh 2: Parameter masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select sha(null);
SHA1
Sintaksis
string sha1(string|binary <expr>)Deskripsi
Menghitung nilai hash SHA-1 dari expr, yang harus bertipe STRING atau BINARY, dan mengembalikan nilai hash sebagai string heksadesimal.
Parameter
expr: Nilai wajib bertipeSTRING atau BINARY.
Nilai Kembali
Mengembalikan nilai bertipe STRING. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
Contoh
Contoh 1: Hitung nilai hash SHA-1 dari string
ABC. Pernyataan sampel:-- Nilai kembali adalah 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha1('ABC');Contoh 2: Parameter masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select sha1(null);
SHA2
Sintaksis
string sha2(string|binary <expr>, bigint <number>)Deskripsi
Menghitung nilai hash SHA-2 dari expr, yang harus bertipe STRING atau BINARY, dan mengembalikan nilai hash dalam format yang ditentukan oleh number.
Parameter
expr: Nilai wajib bertipe STRING atau BINARY.
number: Nilai wajib bertipe BIGINT yang menentukan panjang bit hash. Nilai 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 ditentukan oleh aturan berikut:
Jika parameter masukan adalah null, fungsi ini mengembalikan null.
Jika nilai number tidak berada dalam rentang valid, fungsi ini mengembalikan null.
Contoh
Contoh 1: Hitung nilai hash SHA-2 dari string
ABC. Pernyataan sampel:-- Nilai kembali adalah b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78. select sha2('ABC', 256);Contoh 2: Parameter masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select sha2('ABC', null);
STACK
Sintaksis
stack(n, expr1, ..., exprk)Deskripsi
Memisahkan
expr1, ..., exprkmenjadi `n` baris. Nama kolom keluaran secara default adalahcol0, col1....Parameter
n: Wajib. Jumlah baris yang akan dibuat.
expr: Ekspresi wajib yang akan dipisahkan.
expr1, ..., exprkharus bertipe integer. Jumlah ekspresi harus merupakan kelipatan bulat dari n sehingga dapat dipisahkan menjadi n baris lengkap. Jika tidak, kesalahan akan dikembalikan.
Nilai Kembali
Mengembalikan dataset sebanyak `n` baris. Jumlah kolom adalah total jumlah ekspresi dibagi dengan `n`.
Contoh
-- Pisahkan 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 | +------+------+ -- Pisahkan '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 | +------+------+------+ -- Pisahkan 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
Sintaksis
str_to_map([string <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])Deskripsi
Memisahkan text menjadi pasangan kunci-nilai menggunakan delimiter1 dan kemudian memisahkan kunci dari nilai dalam setiap pasangan menggunakan delimiter2.
Parameter
mapDupKeyPolicy: Opsional. Nilai bertipe STRING. Parameter ini menentukan metode yang digunakan untuk memproses kunci duplikat. Nilai valid:
exception: Kesalahan dikembalikan.
last_win: Kunci terakhir menimpa kunci sebelumnya.
Anda juga dapat menentukan parameter
odps.sql.map.key.dedup.policypada tingkat sesi untuk mengonfigurasi metode yang digunakan untuk memproses kunci duplikat. Misalnya, Anda dapat menyetelodps.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: String wajib yang akan dipisahkan. Nilainya harus bertipe STRING.
delimiter1: Pemisah opsional bertipe STRING. Jika parameter ini tidak ditentukan, koma (
,) digunakan secara default.delimiter2: Pemisah opsional bertipe STRING. Jika parameter ini tidak ditentukan, tanda sama dengan (
=) digunakan secara default.CatatanJika pemisah adalah ekspresi reguler atau karakter khusus, Anda harus meloloskannya dengan dua garis miring terbalik (\\). Karakter khusus yang dapat digunakan sebagai pemisah termasuk titik dua (:), titik (.), tanda tanya (?), tanda tambah (+), 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
Sintaksis
boolean table_exists(string <table_name>)Deskripsi
Memeriksa apakah tabel tertentu ada.
Parameter
table_name: Nama tabel wajib 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. Sebaliknya, 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 ditranspos.Hanya satu User-Defined Table 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.
Sintaksis
trans_array (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) as (<key1>,<key2>,...,<col1>, <col2>)Deskripsi
Menukar satu baris data menjadi beberapa baris. UDTF ini mentranspos kolom yang berisi array dipisahkan oleh delimeter tetap menjadi beberapa baris.
Parameter
num_keys: Konstanta wajib bertipe BIGINT. Nilainya harus lebih besar dari atau sama dengan
0. Parameter ini menentukan jumlah kolom yang akan digunakan sebagaikeyketika Anda menukar satu baris menjadi beberapa baris.separator: Konstanta wajib bertipe STRING yang digunakan untuk memisahkan string menjadi beberapa elemen. Kesalahan dikembalikan jika parameter ini adalah string kosong.
keys: Wajib. Kolom yang akan digunakan sebagai
keyuntuk operasi transpos. Jumlah kunci 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 transpos menjadi baris. Semua kolom yang mengikuti
keysdianggap sebagai array yang akan ditranspos. 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 ditranspos. Nama kolom baru ditentukan oleh
as. Tipe data kolom yang digunakan sebagaikeytetap tidak berubah. Jumlah baris yang ditranspos ditentukan oleh array dengan elemen paling banyak. Jika array lain memiliki lebih sedikit elemen, nilai yang hilang diisi dengan null.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 kunci, id dan name, untuk mentranspos 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 dibagi dan dikelompokkan berdasarkan kunci 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 ditranspos.Hanya satu User-Defined Table Function (UDTF) yang diizinkan dalam pernyataan
select. Kolom lain tidak diizinkan.
Sintaksis
trans_cols (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) as (<idx>, <key1>,<key2>,…,<col1>, <col2>)Deskripsi
Mengubah satu baris data menjadi beberapa baris. UDTF ini mengubah kolom menjadi baris.
Parameter
num_keys: Konstanta wajib bertipe BIGINT. Nilainya harus lebih besar dari atau sama dengan
0. Parameter ini menentukan jumlah kolom yang akan digunakan sebagai key saat Anda mentranspos satu baris menjadi beberapa baris.keys: Kolom wajib yang akan digunakan sebagai key untuk operasi transpose. Jumlah key 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. ID dari sebuah baris setelah ditranspos.
cols: Wajib. Kolom yang ingin Anda transpos menjadi baris.
Nilai Kembali
Mengembalikan baris yang telah ditranspos. Nama kolom baru ditentukan oleh
as. Kolom keluaran pertama adalah subskrip yang telah ditranspos, yang dimulai dari 1. Tipe data kolom yang digunakan sebagai kunci tetap tidak berubah, dan tipe data kolom lainnya 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
UNBASE64
Sintaksis
binary unbase64(string <str>)Deskripsi
Mengonversi string yang dikodekan Base64 str menjadi nilai biner.
Parameter
str: String wajib yang dikodekan Base64 bertipe STRING untuk dikonversi.
Nilai Kembali
Mengembalikan nilai bertipe BINARY. Jika parameter masukan adalah null, fungsi ini mengembalikan null.
Contoh
Contoh 1: Konversi string
YWxpYmFiYQ==menjadi nilai biner. Pernyataan sampel:-- Nilai kembali adalah alibaba. select unbase64('YWxpYmFiYQ==');Contoh 2: Parameter masukan adalah null. Pernyataan sampel:
-- Nilai kembali adalah null. select unbase64(null);
UNIQUE_ID
Sintaksis
string unique_id()Deskripsi
Mengembalikan ID unik, seperti
29347a88-1e57-41ae-bb68-a9edbdd9****_1. Fungsi ini lebih efisien daripada fungsi UUID, dan ID yang dikembalikan lebih panjang. Dibandingkan dengan fungsi `UUID`, fungsi ini mengembalikan ID unik yang berisi akhiran, seperti_1, yang terdiri dari garis bawah (_) dan digit.
UUID
Sintaksis
string uuid()Deskripsi
Mengembalikan ID acak, seperti
29347a88-1e57-41ae-bb68-a9edbdd9****.CatatanNilai kembali adalah pengenal unik global (GUID) acak, yang unik dalam sebagian besar kasus.