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 |
Mendukung penggunaan daftar nilai dan daftar ekspresi bernama. |
|
|
|
| |
Mendukung penggunaan asterisk (*) untuk membangun STRUCT dari semua kolom tabel. |
| |
Mendukung penggunaan daftar nilai. |
|
|
|
| |
|
| |
Mendukung penggunaan daftar nama/nilai. |
|
|
|
|
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}