Mengubah satu baris data menjadi beberapa baris. Fungsi ini merupakan fungsi tabel bernilai pengguna (UDTF) yang mentranspos array yang dipisahkan oleh pemisah tetap dalam kolom menjadi beberapa baris.
Batasan
Semua kolom yang digunakan sebagai
keysharus ditempatkan sebelum kolom yang akan ditranspos.Hanya satu UDTF yang diizinkan dalam pernyataan
SELECT.
Sintaksis
trans_array (<num_keys>, <separator>, <key1>,<key2>,...,<col1>,<col2>,<col3>) as (<key1>,<key2>,...,<col1>, <col2>)Parameter
num_keys: wajib. Nilainya adalah konstanta tipe BIGINT dan harus lebih besar dari atau sama dengan
0. Parameter ini menentukan jumlah kolom yang dapat digunakan sebagaikeyssaat Anda mentranspos satu baris menjadi beberapa baris.separator: wajib. Nilainya adalah konstanta tipe STRING. Parameter ini digunakan untuk membagi string menjadi beberapa elemen. Jika parameter ini dibiarkan kosong, kesalahan akan dikembalikan.
keys: wajib. Parameter ini menentukan kolom yang digunakan sebagai
keyssaat Anda mentranspos satu baris menjadi beberapa baris. Jumlah keys ditentukan oleh num_keys. Jika semua kolom digunakan sebagaikeysdan num_keys sama dengan jumlah total semua 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 Pengembalian
Baris yang telah ditranspos dikembalikan. Nama kolom baru ditentukan oleh as. Tipe data kolom yang digunakan sebagai keys tetap tidak berubah. Semua kolom lainnya bertipe STRING. Jumlah baris yang ditranspos didasarkan pada array dengan jumlah elemen maksimum. Jika jumlah baris tidak mencukupi, nilai null ditambahkan.
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 berikut: 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 | +----------+----------+------------+ -- 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 cukup. 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 kolom id dan name sebagai keys untuk mentranspos data dalam tabel. Jalankan pernyataan SQL berikut: 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: +------------+------------+------------+------------+ | 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 | +------------+------------+------------+------------+
Fungsi terkait
Untuk informasi lebih lanjut, lihat Fungsi lainnya.