All Products
Search
Document Center

MaxCompute:Tipe Data STRUCT

Last Updated:Sep 16, 2025

MaxCompute mendukung tipe data STRUCT yang memungkinkan penggabungan bidang dengan tipe berbeda menjadi satu unit logis. Topik ini menjelaskan cara menggunakan tipe data STRUCT.

Metode Konstruksi

Perbedaan Metode Konstruksi

MaxCompute mendukung tiga metode konstruksi tipe data STRUCT: STRUCT EXPRESSION, fungsi STRUCT, dan fungsi NAMED_STRUCT.

Metode Konstruksi

Contoh

Tipe Data

STRUCT EXPRESSION

Mendukung penggunaan daftar nilai dan daftar ekspresi bernama.

STRUCT(1L AS a,'abc' AS b,null as c)

STRUCT<a:bigint,b:string,c:string>

STRUCT(str_col AS abc) from t

STRUCT<abc:string>

STRUCT(*) from t

Mendukung penggunaan asterisk (*) untuk membangun STRUCT dari semua kolom tabel.

STRUCT<str_col:string,...>

Fungsi STRUCT

Mendukung penggunaan daftar nilai.

STRUCT(1L,2L,3L)

STRUCT<col1:bigint,col2:bigint,col3:bigint>

STRUCT('abc')

STRUCT<col1:string>

STRUCT(1L,t.str_col) from t

STRUCT<col1:int,col2:string>

Fungsi NAMED_STRUCT

Mendukung penggunaan daftar nama/nilai.

NAMED_STRUCT('a',1L,'b','b_','c',3.50)

STRUCT<a:bigint,b:string,c:double>

NAMED_STRUCT('a', str_col...) from t

STRUCT<a:string,...>

Perbedaan antara STRUCT EXPRESSION dan Fungsi STRUCT: Fungsi STRUCT tidak mendukung penentuan alias untuk setiap parameter. Saat membangun STRUCT, sistem secara otomatis menambahkan nama bidang sesuai urutan parameter sebagai col1, col2, dan seterusnya.

Catatan Penggunaan

  • Sintaks konstruksi yang berbeda mendukung nesting dan dapat digabungkan dengan fungsi konstruksi tipe kompleks lainnya seperti ARRAY dan MAP.

  • Secara default, tipe data STRUCT tidak mendukung NULL sebagai nilai bidang. Untuk menggunakan nilai NULL, aktifkan mode kompatibilitas Bigquery dengan perintah SET odps.sql.bigquery.compatible=true;. Dalam mode ini, hanya metode STRUCT EXPRESSION yang dapat digunakan untuk konstruksi.

STRUCT EXPRESSION

STRUCT EXPRESSION menyediakan cara untuk membangun tipe STRUCT kompleks. Metode ini mendukung penggunaan daftar nilai dan daftar ekspresi bernama saat membangun STRUCT.

Sintaks

STRUCT(expression1 [[AS] field_name1], expression2 [[AS] field_name2], ...)
  • Parameter

    Parameter

    Diperlukan

    Deskripsi

    expression

    Ya

    Parameter ini dapat berupa ekspresi dan tipe data apa pun. Nama kolom, konstanta, dan ekspresi didukung.

    as

    Tidak

    Kata kunci awalan untuk nama bidang dalam ekspresi STRUCT.

    field_name

    Tidak

    Nama bidang dalam STRUCT yang dihasilkan. Nama bidang bersifat case-insensitive. Nama bidang dalam ekspresi STRUCT yang sama tidak boleh duplikat.

  • Nilai Kembali: Mengembalikan tipe STRUCT, STRUCT <field_name1:T1, field_name2:T2, ...>, dengan nama bidang field_name1, field_name2, dan seterusnya.

Contoh

  • Gunakan nilai non-NULL sebagai nilai bidang.

    SELECT * FROM VALUES (STRUCT (1 AS a, 2 AS b, 3 AS c, 4 AS d)) AS tbl1(struct1);
    
    -- Hasil
    {a:1, b:2, c:3, d:4}
    
    SELECT struct1.b FROM VALUES (STRUCT (1 AS a, 2 AS b, 3 AS c, 4 AS d)) AS tbl1(struct1);
    
    -- Hasil
    +------------+
    | b          |
    +------------+
    | 2          |
    +------------+
  • Gunakan nilai NULL sebagai nilai bidang. Aktifkan mode kompatibilitas Bigquery dengan menjalankan perintah SET odps.sql.bigquery.compatible=true;.

    SET odps.sql.bigquery.compatible=true;
    SELECT STRUCT (NULL AS Col_1, 2 AS Col_2);
    
    -- Hasil
     {col_1:NULL, col_2:2} 

Fungsi STRUCT

MaxCompute mendukung penggunaan fungsi STRUCT untuk membuat tipe data STRUCT dari daftar nilai tertentu.

Sintaks

STRUCT STRUCT(value1,value2, ...)
  • Parameter: Nilai dapat berupa tipe apa pun, tetapi NULL tidak didukung.

  • Nilai Kembali: Mengembalikan tipe STRUCT, STRUCT<col1:T1, col2:T2,...>, dengan nama bidang col1, col2, dan seterusnya.

Contoh

SELECT STRUCT('a',123,'true',56.90);

-- Hasil
{col1:a, col2:123, col3:true, col4:56.9}

Fungsi NAMED_STRUCT

MaxCompute mendukung penggunaan fungsi NAMED_STRUCT untuk membangun tipe data STRUCT dari daftar nama/nilai tertentu.

Sintaks

STRUCT NAMED_STRUCT(string_name1, T1 value1, string_name2, T2 value2,...)
  • Parameter:

    • string_name: Nama bidang dengan tipe STRING, harus berupa konstanta. Nama bidang bersifat case-insensitive.

    • value: Nilai dapat berupa tipe apa pun, tetapi NULL tidak didukung.

  • Nilai Kembali: Mengembalikan tipe STRUCT, STRUCT<string_name1:T1, string_name2:T2, ...>, dengan nama bidang string_name1, string_name2, dan seterusnya.

Contoh

SELECT NAMED_STRUCT('user_id',10001,'user_name','LiLei','married','F','weight',63.50);

-- Hasil
{user_id:10001, user_name:LiLei, married:F, weight:63.5}