MaxCompute SQL menyediakan berbagai fungsi umum tambahan untuk pengembangan. Anda dapat memilih fungsi yang sesuai dengan kebutuhan Anda. Topik ini menjelaskan format perintah, parameter, dan contoh penggunaan fungsi seperti CAST, FAILIF, dan HASH yang didukung oleh MaxCompute SQL.
Function | Features |
Menyaring data yang memenuhi kondisi rentang tertentu. | |
Mengembalikan nilai berbeda berdasarkan hasil suatu ekspresi. | |
Mengonversi hasil suatu ekspresi ke tipe data target. | |
Mengembalikan nilai pertama yang tidak NULL dalam daftar parameter. | |
Mengompres parameter input STRING atau BINARY menggunakan algoritma GZIP. | |
Menghitung nilai Pemeriksaan redundansi siklik (CRC) dari string atau data biner. | |
Mendekompres parameter input BINARY menggunakan algoritma GZIP. | |
Mengembalikan true atau pesan error kustom berdasarkan hasil suatu ekspresi. | |
Mengembalikan usia saat ini berdasarkan nomor KTP Tiongkok. | |
Mengembalikan tanggal lahir berdasarkan nomor KTP Tiongkok. | |
Mengembalikan jenis kelamin berdasarkan nomor KTP Tiongkok. | |
Memperoleh ID akun saat ini. | |
Menghitung nilai hash berdasarkan parameter input. | |
Memeriksa apakah kondisi tertentu bernilai true. | |
Mengembalikan nilai maksimum partisi tingkat-1 dalam tabel partisi. | |
Menentukan apakah dua parameter input sama. | |
Menentukan nilai kembali untuk parameter yang bernilai NULL. | |
Mengurutkan variabel input secara menaik dan mengembalikan nilai pada posisi tertentu. | |
Memeriksa apakah partisi tertentu ada. | |
Mengambil sampel semua nilai kolom yang dibaca dan menyaring baris yang tidak memenuhi kondisi sampling. | |
Menghitung nilai hash SHA-1 dari string atau data biner. | |
Menghitung nilai hash SHA-1 dari string atau data biner. | |
Menghitung nilai hash SHA-2 dari string atau data biner. | |
Memisahkan sekelompok parameter tertentu menjadi jumlah baris tertentu. | |
Memisahkan string menjadi kunci dan nilai berdasarkan pemisah tertentu. | |
Memeriksa apakah tabel tertentu ada. | |
Fungsi user-defined table-valued function (UDTF) yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini mengonversi array yang disimpan dalam kolom dengan pemisah tetap menjadi beberapa baris. | |
UDTF yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini memisahkan kolom berbeda menjadi baris berbeda. | |
Mengembalikan ID acak. Fungsi ini lebih efisien daripada fungsi UUID. | |
Mengembalikan ID acak. |
BETWEEN AND expression
Format perintah
<a> [NOT] BETWEEN <b> AND <c>Deskripsi
Menyaring data di mana nilai a berada di antara b dan c, atau tidak berada di antara b dan c.
Parameter
a: Wajib. Bidang yang akan disaring.
b dan c: Wajib. Rentang yang ditentukan. Tipe data b dan c harus sama dengan tipe data a.
Nilai kembali
Mengembalikan data yang memenuhi kondisi.
Jika a, b, atau c bernilai null, hasilnya adalah null.
Contoh
Data berikut terdapat dalam tabel
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,,10Perintah berikut mencari data di mana nilai
sallebih besar atau sama dengan 1000 dan kurang dari atau sama dengan 1500.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
Format perintah
MaxCompute menyediakan dua format
CASE WHENberikut: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 result berbeda berdasarkan hasil evaluasi value atau _condition.
Parameter
value: Wajib. Nilai yang akan dibandingkan.
_condition: Wajib. Kondisi yang akan dievaluasi.
result: Wajib. Nilai kembali.
Nilai kembali
Jika result hanya berisi tipe BIGINT dan DOUBLE, semua nilai dikonversi ke DOUBLE sebelum hasil dikembalikan.
Jika result mencakup tipe STRING, semua nilai dikonversi ke tipe STRING sebelum hasil dikembalikan. Jika konversi tipe data tidak didukung, error dikembalikan. Misalnya, data tipe BOOLEAN tidak dapat dikonversi ke tipe STRING.
Konversi tipe lainnya tidak diperbolehkan.
Contoh
Tabel
sale_detailmemiliki bidangshop_name string, customer_id string, total_price doubledan 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
Format perintah
CAST(<expr> AS <type>)Deskripsi
Mengonversi hasil expr ke tipe data target type.
Parameter
expr: Wajib. Data sumber yang akan dikonversi.
type: Wajib. Tipe data target. Penggunaannya sebagai berikut:
cast(double as bigint): Mengonversi nilai tipe data DOUBLE ke tipe data BIGINT.cast(string as bigint): Saat mengonversi string ke tipe data BIGINT, jika string berisi angka dalam bentuk bilangan bulat, nilai tersebut langsung dikonversi ke tipe BIGINT. Jika string berisi angka dalam bentuk floating-point atau eksponensial, nilai tersebut terlebih dahulu dikonversi ke tipe data DOUBLE lalu ke tipe BIGINT.cast(string as datetime)ataucast(datetime as string): Format tanggal defaultyyyy-mm-dd hh:mi:ssdigunakan.
Nilai kembali
Nilai kembali bertipe data target.
Jika Anda menjalankan
setproject odps.function.strictmode=false, fungsi mengembalikan digit sebelum huruf.Jika Anda menjalankan
setproject odps.function.strictmode=true, error dikembalikan.Saat mengonversi nilai ke tipe DECIMAL, jika Anda mengatur
odps.sql.decimal.tostring.trimzero=true, nol di belakang koma dihapus. Jika Anda mengaturodps.sql.decimal.tostring.trimzero=false, nol di belakang koma dipertahankan.PentingParameter
odps.sql.decimal.tostring.trimzeroberlaku baik untuk data yang diambil dari tabel maupun nilai statis.
Contoh
COALESCE
Format perintah
COALESCE(<expr1>, <expr2>, ...)Deskripsi
Mengembalikan nilai pertama yang tidak NULL dalam daftar
<expr1>, <expr2>, ....Parameter
expr: Wajib. Nilai yang akan diperiksa.
Nilai kembali
Tipe data nilai kembali sama dengan tipe data parameter.
Contoh
Contoh 1: Penggunaan umum. Berikut adalah contoh perintah.
--Mengembalikan 1. select coalesce(null,null,1,null,3,5,7);Contoh 2: Error dikembalikan jika tipe data nilai parameter tidak didefinisikan.
Perintah tidak valid
-- Tipe data parameter abc tidak didefinisikan. Mesin sistem tidak dapat mengenalinya dan mengembalikan error. select coalesce(null,null,1,null,abc,5,7);Perintah valid
select coalesce(null,null,1,null,'abc',5,7);
Contoh 3: Jika semua nilai parameter null saat Anda tidak membaca data dari tabel, error dikembalikan. Berikut adalah perintah tidak valid.
-- Error dikembalikan, menunjukkan bahwa setidaknya satu nilai parameter harus tidak NULL. select coalesce(null,null,null,null);Contoh 4: Jika semua nilai parameter null saat Anda membaca data dari tabel, NULL dikembalikan.
Tabel sumber:
+-----------+-------------+------------+ | shop_name | customer_id | toal_price | +-----------+-------------+------------+ | ad | 10001 | 100.0 | | jk | 10002 | 300.0 | | ad | 10003 | 500.0 | | tt | NULL | NULL | +-----------+-------------+------------+Seperti yang ditunjukkan dalam tabel sumber, semua nilai untuk tt bernilai null. Setelah menjalankan pernyataan berikut, NULL dikembalikan.
select coalesce(customer_id,total_price) from sale_detail where shop_name='tt';
COMPRESS
Format perintah
BINARY COMPRESS(STRING <str>) BINARY COMPRESS(BINARY <bin>)Deskripsi
Mengompres str atau bin menggunakan algoritma GZIP.
Parameter
str: Wajib. Nilai tipe STRING.
bin: Wajib. Nilai tipe BINARY.
Nilai kembali
Mengembalikan nilai tipe BINARY. Jika parameter input NULL, NULL dikembalikan.
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. Berikut adalah contoh perintah.
-- 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 NULL. Berikut adalah contoh perintah.
-- Mengembalikan NULL. select compress(null);
CRC32
Format perintah
BIGINT CRC32(STRING|BINARY <expr>)Deskripsi
Menghitung nilai Pemeriksaan redundansi siklik (CRC) dari ekspresi STRING atau BINARY expr.
Parameter
expr: Wajib. Nilai tipe STRING atau BINARY.
Nilai kembali
Mengembalikan nilai tipe BIGINT. Aturan berikut berlaku:
Jika parameter input NULL, NULL dikembalikan.
Jika parameter input adalah string kosong, 0 dikembalikan.
Contoh
Contoh 1: Menghitung nilai CRC dari string
ABC. Berikut adalah contoh perintah.-- Mengembalikan 2743272264. select crc32('ABC');Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.
-- Mengembalikan NULL. select crc32(null);
DECOMPRESS
Format perintah
BINARY DECOMPRESS(BINARY <bin>)Deskripsi
Mendekompres bin menggunakan algoritma GZIP.
Parameter
bin: Wajib. Nilai tipe BINARY.
Nilai kembali
Mengembalikan nilai tipe BINARY. Jika parameter input NULL, NULL dikembalikan.
Contoh
Contoh 1: Mendekompres hasil kompresi string
hello, worlddan mengonversinya ke format STRING. Berikut adalah contoh perintah.-- Mengembalikan hello, world. select cast(decompress(compress('hello, world')) as string);Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.
-- Mengembalikan NULL. select decompress(null);
GET_IDCARD_AGE
Format perintah
get_idcard_age(<idcardno>)Deskripsi
Mengembalikan usia saat ini berdasarkan nomor KTP Tiongkok. Usia dihitung dengan mengurangkan tahun kelahiran dari nomor KTP dari tahun saat ini.
Parameter
idcardno: Wajib. Nomor KTP Tiongkok 15 digit atau 18 digit bertipe STRING. Fungsi memeriksa validitas nomor KTP berdasarkan kode provinsi dan digit pemeriksa terakhir. Jika pemeriksaan gagal, NULL dikembalikan.
Nilai kembali
Mengembalikan nilai tipe BIGINT. Jika input NULL, NULL dikembalikan.
GET_IDCARD_BIRTHDAY
Format perintah
get_idcard_birthday(<idcardno>)Deskripsi
Mengembalikan tanggal lahir berdasarkan nomor KTP Tiongkok.
Parameter
idcardno: Wajib. Nomor KTP Tiongkok 15 digit atau 18 digit bertipe STRING. Fungsi memeriksa validitas nomor KTP berdasarkan kode provinsi dan digit pemeriksa terakhir. Jika pemeriksaan gagal, NULL dikembalikan.
Nilai kembali
Mengembalikan nilai tipe DATETIME. Jika input NULL, NULL dikembalikan.
GET_IDCARD_SEX
Format perintah
get_idcard_sex(<idcardno>)Deskripsi
Mengembalikan jenis kelamin berdasarkan nomor KTP Tiongkok. Nilainya adalah
M(laki-laki) atauF(perempuan).Parameter
idcardno: Wajib. Nomor KTP Tiongkok 15 digit atau 18 digit bertipe STRING. Fungsi memeriksa validitas nomor KTP berdasarkan kode provinsi dan digit pemeriksa terakhir. Jika pemeriksaan gagal, NULL dikembalikan.
Nilai kembali
Mengembalikan nilai tipe STRING. Jika input NULL, NULL dikembalikan.
GET_USER_ID
Format perintah
get_user_id()Deskripsi
Memperoleh ID akun saat ini. Ini juga dikenal sebagai user ID atau 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
Format perintah
Jika proyek MaxCompute berada dalam mode kompatibel Hive, format perintahnya sebagai berikut.
INT HASH(<value1>, <value2>[, ...]);Jika proyek MaxCompute tidak dalam mode kompatibel Hive, format perintahnya sebagai berikut.
BIGINT HASH(<value1>, <value2>[, ...]);
Deskripsi
Menghitung nilai hash dari value1 dan value2.
Parameter
value1 dan value2: Wajib. Parameter untuk menghitung nilai hash. Parameter dapat memiliki tipe data berbeda. Tipe data yang didukung berbeda antara mode kompatibel Hive dan 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.
CatatanUntuk input yang sama, nilai hash yang dikembalikan selalu sama. Namun, jika dua nilai hash sama, hal ini tidak menjamin bahwa nilai inputnya sama. Tabrakan hash (hash collision) dapat terjadi.
Nilai kembali
Mengembalikan nilai tipe INT atau BIGINT. Jika parameter input adalah string kosong atau NULL, 0 dikembalikan.
Contoh
Contoh 1: Hitung nilai hash parameter input dengan tipe data yang sama. Berikut adalah contoh perintah.
-- Mengembalikan 66. SELECT HASH(0L, 2L, 4L);Contoh 2: Hitung nilai hash parameter input dengan tipe data berbeda. Berikut adalah contoh perintah.
-- Mengembalikan 97. SELECT HASH(0L, 'a');Contoh 3: Parameter input adalah string kosong atau NULL. Berikut adalah contoh perintah.
-- Mengembalikan 0. SELECT HASH(0L, null); -- Mengembalikan 0. SELECT HASH(0L, '');
IF
Format perintah
IF(<testCondition>, <valueTrue>, <valueFalseOrNull>)Deskripsi
Memeriksa apakah testCondition bernilai true. Jika true, fungsi mengembalikan nilai valueTrue. Jika tidak, fungsi mengembalikan nilai valueFalseOrNull.
Parameter
testCondition: Wajib. Ekspresi yang akan dievaluasi. Harus bertipe BOOLEAN.
valueTrue: Wajib. Nilai yang dikembalikan jika ekspresi testCondition bernilai true.
valueFalseOrNull: Nilai yang dikembalikan jika ekspresi testCondition bernilai false. Nilai ini dapat diatur ke NULL.
Nilai kembali
Tipe data nilai kembali sama dengan tipe data parameter valueTrue atau valueFalseOrNull.
Contoh
-- Mengembalikan 200. select if(1=2, 100, 200);
MAX_PT
Format perintah
MAX_PT(<table_full_name>)Deskripsi
Mengembalikan nilai maksimum partisi tingkat-1 yang berisi data dalam tabel partisi. Nilai-nilai tersebut diurutkan secara alfabetis. Fungsi kemudian membaca data dari partisi tersebut.
Catatan
Fungsi
MAX_PTjuga dapat diimplementasikan menggunakan SQL standar.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. Anda tidak dapat menggunakan pernyataan SQLSELECT * FROM table WHERE pt=MIN_PT("table");untuk mencapai fungsi serupa sepertiMAX_PTguna mengambil partisi minimum yang berisi data. Namun, Anda dapat menggunakan pernyataan SQL standarSELECT * FROM table WHERE pt= (SELECT MIN(pt) FROM table);untuk mencapai efek yang sama.Jika semua partisi dalam tabel kosong, fungsi
MAX_PTgagal. Pastikan setidaknya satu partisi tidak kosong.Tabel eksternal OSS juga mendukung fungsi MAX_PT. Perilakunya sama seperti tabel internal.
Parameter
table_full_name: Wajib. Nilai tipe STRING. Nama tabel. Anda harus memiliki izin baca pada tabel tersebut.
Nilai kembali
Mengembalikan nilai partisi tingkat-1 terbesar.
CatatanJika Anda membuat partisi hanya menggunakan
ALTER TABLEdan partisi tersebut tidak berisi data apa pun, partisi tersebut tidak dikembalikan.Contoh
Contoh 1: Tabel tbl adalah tabel partisi. Partisinya adalah 20120901 dan 20120902, dan keduanya berisi data. Dalam pernyataan berikut,
MAX_PTmengembalikan'20120902'. Pernyataan SQL MaxCompute membaca data dari partisipt='20120902'. Berikut adalah contoh perintah.SELECT * FROM tbl WHERE pt= MAX_PT('tbl'); -- Ini setara dengan pernyataan berikut. SELECT * FROM tbl WHERE pt= (SELECT MAX(pt) FROM tbl);Contoh 2: Dalam skenario partisi multi-level, gunakan SQL standar untuk mendapatkan data dari partisi terbesar. Berikut adalah contoh perintah.
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
Format perintah
T NULLIF(T <expr1>, T <expr2>)Deskripsi
Membandingkan nilai expr1 dan expr2. Jika nilainya sama, fungsi mengembalikan NULL. Jika tidak, fungsi mengembalikan expr1.
Parameter
expr1 dan expr2: Wajib. Ekspresi bertipe apa pun.
Tmenunjukkan tipe data input. Dapat berupa tipe data apa pun yang didukung MaxCompute.Nilai kembali
Mengembalikan NULL atau expr1.
Contoh
-- Mengembalikan 2. select nullif(2, 3); -- Mengembalikan NULL. select nullif(2, 2); -- Mengembalikan 3. select nullif(3, null);
NVL
Format perintah
nvl(T <value>, T <default_value>)Deskripsi
Jika nilai value adalah NULL, fungsi mengembalikan default_value. Jika tidak, fungsi mengembalikan value. Kedua parameter harus memiliki tipe data yang sama.
Parameter
value: Wajib. Parameter input.
Tmenunjukkan tipe data input. Dapat berupa tipe data apa pun yang didukung MaxCompute.default_value: Wajib. Nilai pengganti. Harus memiliki tipe data yang sama dengan value.
Contoh
Tabel
t_datamemiliki tiga kolom:c1 string,c2 bigint, danc3 datetime. Tabel 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 | +----+------------+------------+Anda dapat menggunakan fungsi
nvluntuk menghasilkan 00000 untuk nilai NULL dic1, 0 untuk nilai NULL dic2, dan-untuk nilai NULL dic3. Berikut adalah contoh perintah.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
Format perintah
ORDINAL(BIGINT <nth>, <var1>, <var2>[,...])Deskripsi
Mengurutkan variabel input secara menaik dan mengembalikan nilai pada posisi nth.
Parameter
nth: Wajib. Nomor posisi, dimulai dari 1. Nilai tipe BIGINT. Jika nilai pada posisi yang ditentukan adalah NULL, NULL dikembalikan.
var: Wajib. Nilai yang akan diurutkan. Dapat bertipe BIGINT, DOUBLE, DATETIME, atau STRING.
Nilai kembali
Nilai pada posisi nth. Jika tidak terjadi konversi implisit, tipe data nilai kembali sama dengan tipe data parameter input.
Jika terjadi konversi tipe, konversi antara DOUBLE, BIGINT, dan STRING menghasilkan tipe DOUBLE. Konversi antara STRING dan DATETIME menghasilkan tipe DATETIME. Konversi implisit lainnya tidak diperbolehkan.
NULL dianggap sebagai nilai minimum.
Contoh
-- Mengembalikan 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
Format perintah
boolean partition_exists(string <table_name>, string... <partitions>)Deskripsi
Memeriksa apakah partisi tertentu ada.
Parameter
table_name: Wajib. Nama tabel. Nilai tipe STRING. Nama tabel dapat mencakup nama proyek, seperti
my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan secara default.partitions: Wajib. Nama partisi. Nilai tipe STRING. Tentukan nilai partisi sesuai urutan kolom kunci partisi. Jumlah nilai partisi harus sama dengan jumlah kolom kunci partisi.
Nilai kembali
Mengembalikan nilai tipe BOOLEAN. Fungsi mengembalikan True jika partisi yang ditentukan ada. Jika tidak, fungsi mengembalikan False.
Contoh
-- Buat tabel partisi bernama foo. create table foo (id bigint) partitioned by (ds string, hr string); -- Tambahkan partisi ke tabel foo. alter table foo add partition (ds='20190101', hr='1'); -- Periksa apakah partisi ds='20190101' dan hr='1' ada. Hasilnya True. select partition_exists('foo', '20190101', '1');
SAMPLE
Format perintah
boolean sample(<x>, <y>, [<column_name1>, <column_name2>[,...]])Deskripsi
Sistem mengambil sampel semua nilai column_name yang dibaca berdasarkan pengaturan x dan y, serta menyaring baris yang tidak memenuhi kondisi sampling.
Parameter
x dan y: x wajib. Konstanta BIGINT lebih besar dari 0. Ini menunjukkan bahwa data di-hash ke dalam x bagian, dan bagian ke-y dipilih.
y opsional. Jika dihilangkan, bagian pertama dipilih secara default. Jika Anda menghilangkan parameter y, Anda juga harus menghilangkan column_name.
Jika x atau y bertipe lain atau kurang dari atau sama dengan 0, exception dilemparkan. Jika y lebih besar dari x, exception juga dikembalikan. Jika salah satu dari x atau y bernilai NULL, NULL dikembalikan.
column_name: Opsional. Kolom target untuk sampling. Jika parameter ini dihilangkan, sampling acak dilakukan berdasarkan nilai x dan y. Parameter ini dapat bertipe data apa pun, dan nilainya dapat NULL. Tidak ada konversi tipe implisit yang dilakukan. Jika column_name adalah konstanta NULL, error dikembalikan.
CatatanUntuk mencegah kesenjangan data yang disebabkan oleh nilai NULL, nilai NULL dalam column_name di-hash secara merata ke dalam x bagian. Jika Anda tidak menentukan column_name, output mungkin tidak seragam ketika volume data kecil. Dalam kasus ini, Anda dapat menentukan column_name untuk mendapatkan hasil output yang lebih baik.
Saat ini, sampling acak hanya didukung untuk kolom dengan tipe data berikut: bigint, datetime, boolean, double, string, binary, char, dan varchar.
Nilai kembali
Mengembalikan nilai tipe BOOLEAN.
Contoh
Asumsikan tabel
tblaberisi kolom bernamacola.-- Nilai di-hash ke dalam 4 bagian berdasarkan kolom cola, dan bagian ke-1 diambil. Nilai kembali adalah True. select * from tbla where sample (4, 1 , cola); -- Setiap baris data di-hash secara acak ke dalam 4 bagian, dan bagian ke-2 diambil. Nilai kembali adalah True. select * from tbla where sample (4, 2);
SHA
Format perintah
STRING SHA(STRING|BINARY <expr>)Deskripsi
Menghitung nilai hash SHA-1 dari ekspresi STRING atau BINARY expr dan mengembalikannya sebagai string heksadesimal.
Parameter
expr: Wajib. Nilai tipe STRING atau BINARY.
Nilai kembali
Mengembalikan nilai tipe STRING. Jika parameter input NULL, NULL dikembalikan.
Contoh
Contoh 1: Menghitung nilai hash SHA dari string
ABC. Berikut adalah contoh perintah.-- Mengembalikan 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha('ABC');Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.
-- Mengembalikan NULL. select sha(null);
SHA1
Format perintah
string sha1(string|binary <expr>)Deskripsi
Menghitung nilai hash SHA-1 dari ekspresi STRING atau BINARY expr dan mengembalikannya sebagai string heksadesimal.
Parameter
expr: Wajib. Nilai tipe STRING atau BINARY.
Nilai kembali
Mengembalikan nilai tipe STRING. Jika parameter input NULL, NULL dikembalikan.
Contoh
Contoh 1: Menghitung nilai hash SHA-1 dari string
ABC. Berikut adalah contoh perintah.-- Mengembalikan 3c01bdbb26f358bab27f267924aa2c9a03fcfdb8. select sha1('ABC');Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.
-- Mengembalikan NULL. select sha1(null);
SHA2
Format perintah
string sha2(string|binary <expr>, bigint <number>)Deskripsi
Menghitung nilai hash SHA-2 dari ekspresi STRING atau BINARY expr dan mengembalikannya dalam format yang ditentukan oleh number.
Parameter
expr: Wajib. Nilai tipe STRING atau BINARY.
number: Wajib. Nilai tipe BIGINT. Panjang bit hash. Nilai harus 224, 256, 384, 512, atau 0 (yang sama dengan 256).
Nilai kembali
Mengembalikan nilai tipe STRING. Aturan berikut berlaku:
Jika parameter input bernilai NULL, NULL dikembalikan.
Jika nilai number tidak berada dalam rentang yang diizinkan, NULL dikembalikan.
Contoh
Contoh 1: Menghitung nilai hash SHA-2 dari string
ABC. Berikut adalah contoh perintah.-- Mengembalikan b5d4045c3f466fa91fe2cc6abe79232a1a57cdf104f7a26e716e0a1e2789df78. select sha2('ABC', 256);Contoh 2: Parameter input NULL. Berikut adalah contoh perintah.
-- Mengembalikan NULL. select sha2('ABC', null);
STACK
Format perintah
stack(n, expr1, ..., exprk)Deskripsi
Memisahkan
expr1, ..., exprkmenjadi n baris. Kecuali ditentukan lain, output menggunakan nama kolom defaultcol0, col1, ....Parameter
n: Wajib. Jumlah baris yang akan dibagi.
expr: Wajib. Parameter yang akan dibagi,
expr1, ..., exprk, harus berupa bilangan bulat. Jumlah parameter harus merupakan kelipatan bulat dari n agar dapat dibagi menjadi n baris lengkap. Jika tidak, error dikembalikan.
Nilai kembali
Mengembalikan dataset dengan n baris. Jumlah kolom adalah hasil bagi jumlah parameter dibagi n.
Contoh
-- Mengatur 1, 2, 3, 4, 5, 6 menjadi 3 baris. select stack(3, 1, 2, 3, 4, 5, 6); -- Hasil berikut dikembalikan. +------+------+ | col0 | col1 | +------+------+ | 1 | 2 | | 3 | 4 | | 5 | 6 | +------+------+ -- Mengatur '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 | +------+------+------+ -- Mengatur a, b, c, d menjadi dua baris. Jika tabel sumber memiliki beberapa baris, operasi stack dilakukan baris demi 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 dengan 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
Format perintah
STR_TO_MAP([STRING <mapDupKeyPolicy>,] <text> [, <delimiter1> [, <delimiter2>]])Deskripsi
Menggunakan delimiter1 untuk memisahkan text menjadi pasangan kunci-nilai, lalu menggunakan delimiter2 untuk memisahkan setiap pasangan kunci-nilai menjadi kunci dan nilai.
Parameter
-
mapDupKeyPolicy: opsional. Nilai tipe STRING. Parameter ini menentukan metode yang digunakan untuk menangani kunci duplikat. Nilai yang valid:
-
exception: Error dikembalikan.
-
last_win: Kunci yang belakang menimpa kunci yang depan.
Anda juga dapat menentukan parameter
odps.sql.map.key.dedup.policypada tingkat sesi 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. Nilai tipe STRING. String yang akan dipisahkan.
delimiter1: Opsional. Nilai tipe STRING. Pemisah. Jika tidak ditentukan, nilai default adalah koma (
,).delimiter2: Opsional. Nilai tipe STRING. Pemisah. Jika tidak ditentukan, nilai default adalah tanda sama dengan (
=).CatatanJika pemisah adalah ekspresi reguler atau karakter khusus, Anda harus melakukan escape dengan dua backslash (\\). Karakter khusus meliputi titik dua (:), titik (.), tanda tanya (?), tanda plus (+), dan tanda bintang (*).
-
Nilai kembali
Nilai kembali bertipe
map<string, string>. Nilai kembali adalah hasil pemisahan text oleh delimiter1 dan delimiter2.Contoh
-- Mengembalikan {test1:1, test2:2}. select str_to_map('test1&1-test2&2','-','&'); -- Mengembalikan {test1:1, test2:2}. select str_to_map("test1.1,test2.2", ",", "\\."); -- Mengembalikan {test1:1, test2:3}. select str_to_map("test1.1,test2.2,test2.3", ",", "\\.");
TABLE_EXISTS
Format perintah
BOOLEAN TABLE_EXISTS(STRING <table_name>)Deskripsi
Memeriksa apakah tabel tertentu ada.
Parameter
table_name: Wajib. Nama tabel. Nilai tipe STRING. Nama tabel dapat mencakup nama proyek, seperti
my_proj.my_table. Jika Anda tidak menentukan nama proyek, proyek saat ini digunakan secara default.Nilai kembali
Mengembalikan nilai tipe BOOLEAN. Fungsi mengembalikan True jika tabel yang ditentukan ada. Jika tidak, fungsi mengembalikan False.
Contoh
-- Digunakan dalam daftar SELECT. select if(table_exists('abd'), col1, col2) from src;
TRANS_ARRAY
Batasan
Semua kolom yang digunakan sebagai
keysharus ditempatkan di awal, dan kolom yang akan ditransposisi harus ditempatkan setelahnya.Pernyataan
SELECThanya dapat berisi satu UDTF. Tidak boleh ada kolom lain.Tidak dapat digunakan dengan
GROUP BY,CLUSTER BY,DISTRIBUTE BY, atauSORT BY.
Format perintah
TRANS_ARRAY (<num_keys>, <separator>, <key1>,<key2>,…,<col1>,<col2>,<col3>) AS (<key1>,<key2>,...,<col1>, <col2>)Deskripsi
Fungsi user-defined table-valued function (UDTF) yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini mengonversi array yang disimpan dalam kolom dan dipisahkan oleh pemisah tetap menjadi beberapa baris.
Parameter
num_keys: Wajib. Konstanta BIGINT. Nilainya harus
>=0. Jumlah kolom yang akan digunakan sebagaikeyssaat mengonversi menjadi beberapa baris.separator: Wajib. Konstanta STRING. Pemisah yang digunakan untuk membagi string menjadi beberapa elemen. Jika parameter ini kosong, error dikembalikan.
keys: Wajib. Kolom yang akan digunakan sebagai
keysselama transposisi. Jumlah kolom ditentukan oleh num_keys. Jika num_keys menentukan bahwa semua kolom digunakan sebagaikeys(yaitu, num_keys sama dengan jumlah total kolom), hanya satu baris yang dikembalikan.cols: Wajib. Array yang akan dikonversi menjadi baris. Semua kolom setelah
keysdianggap sebagai array yang akan ditransposisi. Kolom-kolom ini harus bertipe STRING dan menyimpan array dalam format string, sepertiHangzhou;Beijing;Shanghai, yaitu array yang dipisahkan oleh titik koma (;).
Nilai kembali
Mengembalikan baris yang telah ditransposisi. Nama kolom baru ditentukan oleh
AS. Tipe data kolom yang digunakan sebagaikeystetap tidak berubah. Semua kolom lain bertipe STRING. Jumlah baris hasil ditentukan oleh array yang memiliki elemen terbanyak. Array yang lebih pendek 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 -- Data array yang tidak mencukupi diisi dengan NULL. 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 keys, id dan name, untuk mengonversi menjadi 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 keys 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
keysharus ditempatkan di awal, dan kolom yang akan ditransposisi harus ditempatkan setelahnya.Pernyataan
SELECThanya dapat berisi satu UDTF. Tidak boleh ada kolom lain.
Format perintah
TRANS_COLS (<num_keys>, <key1>,<key2>,…,<col1>, <col2>,<col3>) AS (<idx>, <key1>,<key2>,…,<col1>, <col2>)Deskripsi
UDTF yang mengonversi satu baris data menjadi beberapa baris. Fungsi ini memisahkan kolom berbeda menjadi baris berbeda.
Parameter
num_keys: Wajib. Konstanta BIGINT. Nilainya harus
>=0. Jumlah kolom yang akan digunakan sebagai keys saat mengonversi menjadi beberapa baris.keys: Wajib. Kolom yang akan digunakan sebagai keys selama transposisi. Jumlah kolom ditentukan oleh num_keys. Jika num_keys menentukan bahwa semua kolom digunakan sebagai keys (yaitu, num_keys sama dengan jumlah total kolom), hanya satu baris yang dikembalikan.
idx: Wajib. Nomor baris setelah konversi.
cols: Wajib. Kolom yang akan dikonversi menjadi baris.
Nilai kembali
Mengembalikan baris yang telah ditransposisi. Nama kolom baru ditentukan oleh
AS. Kolom pertama output adalah indeks transposisi, yang dimulai dari 1. Tipe data kolom yang digunakan sebagai keys tetap tidak berubah. Semua kolom lain mempertahankan tipe data aslinya.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
Format perintah
string unique_id()Deskripsi
Mengembalikan ID unik acak, seperti
29347a88-1e57-41ae-bb68-a9edbdd9****_1. Fungsi ini lebih efisien daripada fungsi UUID dan mengembalikan ID yang lebih panjang. Dibandingkan dengan UUID, ID ini mencakup garis bawah tambahan (_) dan angka, seperti_1.
UUID
Format perintah
string uuid()Deskripsi
Mengembalikan ID acak, seperti
29347a88-1e57-41ae-bb68-a9edbdd9****.CatatanUUID mengembalikan ID global acak yang memiliki probabilitas sangat rendah untuk berulang.