全部产品
Search
文档中心

MaxCompute:TRANS_ARRAY

更新时间:Jul 02, 2025

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 keys harus 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 sebagai keys saat 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 keys saat Anda mentranspos satu baris menjadi beberapa baris. Jumlah keys ditentukan oleh num_keys. Jika semua kolom digunakan sebagai keys dan 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 keys dianggap sebagai array yang akan ditranspos. Nilai parameter ini harus bertipe STRING untuk menyimpan array dalam format STRING, seperti Hangzhou;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_table berisi 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 NULL
  • Contoh 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.