Topik ini menjelaskan cara membuat, membaca dari, dan menulis ke tabel eksternal JSON di OSS.
Lingkup
Tabel eksternal OSS tidak mendukung properti cluster.
Ukuran satu file tidak boleh melebihi 2 GB. Anda harus membagi file yang lebih besar dari 2 GB.
MaxCompute dan OSS harus berada di wilayah yang sama.
Buat tabel eksternal
Sintaksis
Jika file JSON memiliki kolom lebih sedikit daripada definisi tabel eksternal, MaxCompute mengisi kolom yang hilang dengan NULL. Jika file memiliki kolom lebih banyak, MaxCompute mengabaikan kolom tambahan tersebut.
Sintaksis sederhana
CREATE EXTERNAL TABLE <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS textfile
LOCATION '<oss_location>';Sintaksis lengkap
CREATE EXTERNAL TABLE <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
[PARTITIONED BY (<col_name> <data_type>, ...)]
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
[WITH serdeproperties (
['<property_name>'='<property_value>',...])
]
STORED AS textfile
LOCATION '<oss_location>'
[tblproperties ('<tbproperty_name>'='<tbproperty_value>',...)];Parameter umum
Untuk informasi selengkapnya, lihat Parameter sintaksis umum.
Parameter eksklusif
Parameter Tblproperties
Parameter | Kasus penggunaan | Deskripsi | Nilai | Bawaan |
mcfed.mapreduce.output.fileoutputformat.compress | Untuk menulis data TEXTFILE ke OSS dalam format terkompresi. | Properti kompresi TEXTFILE. Jika diatur ke |
| False |
mcfed.mapreduce.output.fileoutputformat.compress.codec | Untuk menulis data TEXTFILE ke OSS dalam format terkompresi. | Properti kompresi TEXTFILE. Menetapkan kodek kompresi untuk file data TEXTFILE. Secara bawaan, file dikompresi menggunakan kodek Catatan: Hanya metode kompresi dalam |
| org.apache.hadoop.io.compress.DeflateCodec |
odps.external.data.output.prefix (kompatibel mundur dengan odps.external.data.prefix) | Untuk menambahkan awalan kustom ke nama file output. |
| Kombinasi karakter valid, seperti | Tidak ada |
odps.external.data.enable.extension | Untuk menambahkan ekstensi file ke nama file output. | Jika diatur ke |
| False |
odps.external.data.output.suffix | Untuk menambahkan akhiran kustom ke nama file output. | Akhiran hanya boleh berisi angka (0-9), huruf (a-z, A-Z), dan garis bawah (_). | String valid, seperti '_hangzhou'. | Tidak ada |
odps.external.data.output.explicit.extension | Untuk menambahkan ekstensi file kustom ke nama file output. |
| Kombinasi karakter valid, seperti | Tidak ada |
odps.text.option.bad.row.skipping | Untuk melewati data kotor dalam file data OSS. | Menentukan apakah akan melewati data kotor saat MaxCompute membaca dari file OSS. |
|
Saat membuat tabel eksternal untuk JSON dengan objek bersarang (structs), jangan definisikan tipe data bidang objek sebagai STRING atau JSON. Jika tidak, MaxCompute tidak dapat mengurai subfield-nya.
Dua pendekatan berikut direkomendasikan. Untuk langkah-langkah detailnya, lihat contoh dalam topik ini:
Definisikan bidang sebagai STRING dan gunakan fungsi seperti
get_json_objectdalam kueri Anda untuk mengekstrak konten subfield internal sesuai kebutuhan.Gunakan tipe
STRUCTuntuk mendefinisikan bidang secara struktural, memetakan setiap subfield objek JSON ke subkolom terpisah. Hal ini memungkinkan Anda mengakses data internal secara langsung menggunakan sintaksisfield_name.subfield_name.
Tulis data
Untuk informasi tentang sintaksis penulisan data dari MaxCompute ke OSS, lihat Tulis data ke OSS.
Kueri data
Untuk informasi tentang sintaksis SELECT, lihat Baca data dari OSS.
Untuk informasi tentang cara mengoptimalkan rencana kueri, lihat Optimasi kueri.
Untuk informasi selengkapnya tentang BadRowSkipping, lihat BadRowSkipping.
BadRowSkipping
Fitur BadRowSkipping memungkinkan Anda melewati baris yang berisi data kotor atau menyebabkan error parsing. Fitur ini tidak mengubah cara interpretasi format data dasar.
Contoh
Siapkan data
Unggah data uji json_bad_row_skipping.json, yang berisi beberapa data kotor, ke direktori
oss-mc-test/badrow/di OSS.Buat tabel eksternal JSON
Perilaku berbeda tergantung pada properti tingkat tabel dan flag tingkat sesi. Tiga kasus berikut mungkin terjadi:
Parameter tabel:
odps.text.option.bad.row.skipping = flexible/rigid/<tidak ditentukan>Flag sesi:
odps.sql.unstructured.text.bad.row.skipping = on/off/<tidak diatur>
Tidak ada properti tingkat tabel
-- Tidak ada properti tingkat tabel yang diatur. Error ditangani berdasarkan flag tingkat sesi. CREATE EXTERNAL TABLE test_json_bad_data_skipping_flag ( a INT, b INT ) row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' stored AS textfile location '<oss://databucketpath>';Pelewat fleksibel
-- Properti tingkat tabel melewatkan baris error, tetapi flag tingkat sesi dapat menonaktifkan perilaku ini. CREATE EXTERNAL TABLE test_json_bad_data_skipping_flexible ( a INT, b INT ) row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' stored AS textfile location '<oss://databucketpath>' tblproperties ( 'odps.text.option.bad.row.skipping' = 'flexible' -- Mode fleksibel, dapat dinonaktifkan pada tingkat sesi. );Pelewat kaku
-- Properti tingkat tabel memaksa pelewat error. Perilaku ini tidak dapat dinonaktifkan pada tingkat sesi. CREATE EXTERNAL TABLE test_json_bad_data_skipping_rigid ( a INT, b INT ) row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' stored AS textfile location '<oss://databucketpath>' tblproperties ( 'odps.text.option.bad.row.skipping' = 'rigid' -- Dipaksa aktif. );Verifikasi hasil kueri
Tidak ada properti tingkat tabel
-- Aktifkan pada tingkat sesi. SET odps.sql.unstructured.text.bad.row.skipping=on; -- Nonaktifkan pada tingkat sesi. Jika properti tabel adalah 'flexible', perilaku ini akan dinonaktifkan. Jika properti tabel adalah 'rigid', pengaturan ini tidak berpengaruh. SET odps.sql.unstructured.text.bad.row.skipping=off; -- Cetak baris bermasalah. Maksimum 1.000. Jika nilainya kurang dari atau sama dengan 0, pencetakan dinonaktifkan. SET odps.sql.unstructured.text.bad.row.skipping.debug.num=10; SELECT * FROM test_json_bad_data_skipping_flag;Jika pelewat error dinonaktifkan pada tingkat sesi (
SET odps.sql.unstructured.text.bad.row.skipping=off), kueri gagal dengan error berikut: FAILED: ODPS-0123131:User defined function exceptionPelewat fleksibel
-- Aktifkan pada tingkat sesi. SET odps.sql.unstructured.text.bad.row.skipping=on; -- Nonaktifkan pada tingkat sesi. Jika properti tabel adalah 'flexible', perilaku ini akan dinonaktifkan. Jika properti tabel adalah 'rigid', pengaturan ini tidak berpengaruh. SET odps.sql.unstructured.text.bad.row.skipping=off; -- Cetak baris bermasalah. Maksimum 1.000. Jika nilainya kurang dari atau sama dengan 0, pencetakan dinonaktifkan. SET odps.sql.unstructured.text.bad.row.skipping.debug.num=10; SELECT * FROM test_json_bad_data_skipping_flexible;Jika pelewat error dinonaktifkan pada tingkat sesi (
SET odps.sql.unstructured.text.bad.row.skipping=off), kueri gagal dengan error berikut: FAILED: ODPS-0123131:User defined function exceptionPelewat kaku
-- Aktifkan pada tingkat sesi. SET odps.sql.unstructured.text.bad.row.skipping=on; -- Nonaktifkan pada tingkat sesi. Jika properti tabel adalah 'flexible', perilaku ini akan dinonaktifkan. Jika properti tabel adalah 'rigid', pengaturan ini tidak berpengaruh. SET odps.sql.unstructured.text.bad.row.skipping=off; -- Cetak baris bermasalah. Maksimum 1.000. Jika nilainya kurang dari atau sama dengan 0, pencetakan dinonaktifkan. SET odps.sql.unstructured.text.bad.row.skipping.debug.num=10; SELECT * FROM test_json_bad_data_skipping_rigid;Hasil berikut dikembalikan:
+------------+------------+ | a | b | +------------+------------+ | 1 | 2 | | 15 | 16 | +------------+------------+
Contoh
Prasyarat
Proyek MaxCompute telah dibuat. Untuk informasi selengkapnya, lihat Buat proyek MaxCompute.
Bucket dan direktori OSS telah disiapkan. Untuk informasi selengkapnya, lihat Buat bucket dan Kelola direktori.
MaxCompute hanya tersedia di beberapa wilayah. Untuk menghindari potensi masalah konektivitas data lintas wilayah, kami merekomendasikan penggunaan bucket di wilayah yang sama dengan proyek MaxCompute Anda.
Izin yang diperlukan telah diberikan:
Izin untuk mengakses OSS. Akun Alibaba Cloud, Pengguna RAM, atau Peran RAM dapat digunakan untuk mengakses tabel eksternal OSS. Untuk informasi selengkapnya tentang otorisasi, lihat Otorisasi mode STS untuk OSS.
Izin
CreateTabledalam proyek MaxCompute Anda. Untuk informasi selengkapnya tentang izin operasi tabel, lihat Izin MaxCompute.
Contoh 1: Buat, tulis, dan kueri tabel JSON
Contoh ini menunjukkan cara membuat tabel eksternal JSON menggunakan parser data open source bawaan, menulis data ke OSS, lalu mengkueri data tersebut.
Siapkan data.
Masuk ke Konsol OSS dan unggah file data uji json2025.txt ke direktori
external-table-test/json/dt=20250521/dalam Bucket OSS. Untuk informasi selengkapnya, lihat Unggah file ke OSS.Buat tabel eksternal JSON.
CREATE EXTERNAL TABLE mc_oss_extable_name_json ( action STRING, time STRING ) PARTITIONED BY (dt STRING) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) STORED AS textfile LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/json/';Jika tabel eksternal OSS Anda adalah tabel partisi, Anda juga harus mengimpor data partisi. Untuk informasi selengkapnya, lihat Tabel eksternal OSS.
-- Tambahkan partisi. MSCK REPAIR TABLE mc_oss_extable_name_json ADD PARTITIONS;Baca data dari tabel eksternal JSON.
SELECT * FROM mc_oss_extable_name_json WHERE dt=20250526;Hasil berikut dikembalikan:
+------------+------------+------------+ | action | time | dt | +------------+------------+------------+ | Close | 1469679568 | 20250526 | | Close | 1469679568 | 20250526 | +------------+------------+------------+Tulis data ke tabel eksternal JSON.
INSERT INTO mc_oss_extable_name_json PARTITION (dt='20250526') VALUES ('test','1627273823');Lihat data yang ditulis.
SELECT * FROM mc_oss_extable_name_json WHERE dt=20250526;Hasil berikut dikembalikan:
+------------+------------+------------+ | action | time | dt | +------------+------------+------------+ | test | 1627273823 | 20250526 | | Close | 1469679568 | 20250526 | | Close | 1469679568 | 20250526 | +------------+------------+------------+
Contoh 2: Baca field JSON bersarang
Siapkan data
Buat file JSON events.json:
{"a":{"x":1, "y":2}, "id":"123"}
{"a":{"x":3, "y":4}, "id":"345"}Masuk ke Konsol OSS dan unggah data uji ke direktori external-table-test/json-sturct/ dalam bucket OSS. Untuk informasi selengkapnya, lihat Unggah file ke OSS.
Metode 1: Buat tabel eksternal TEXTFILE dan gunakan fungsi get_json_object untuk membaca nilai field
Buat tabel eksternal TEXTFILE yang hanya berisi satu kolom bertipe
string:CREATE EXTERNAL TABLE extable_json_test01 ( col STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\n' STORED AS textfile LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/json_struct/'; SELECT * FROM extable_json_test01;Hasil berikut dikembalikan:
+------------------------------------+ | col | +------------------------------------+ | {"a": {"x": 1, "y": 2},"id":"123"} | | {"a": {"x": 3, "y": 4},"id":"345"} | +------------------------------------+Gunakan fungsi
get_json_objectuntuk membaca fieldadanid:SELECT get_json_object(col, '$.a') AS a, get_json_object(col, '$.id') AS id FROM extable_json_test01;Hasil berikut dikembalikan:
+-------------------+-----+ | a | id | +-------------------+-----+ | {"x":1,"y":2} | 123 | | {"x":3,"y":4} | 345 | +-------------------+-----+Baca field bersarang
x,y, danid:SELECT get_json_object(get_json_object(col,'$.a'),'$.x') AS x, get_json_object(get_json_object(col,'$.a'),'$.y') AS y, get_json_object(col,'$.id') AS id FROM extable_json_test01;Hasil berikut dikembalikan:
+---+---+-----+ | x | y | id | +---+---+-----+ | 1 | 2 |123 | | 3 | 4 |345 | +---+---+-----+
Metode 2: Buat tabel eksternal JSON dan gunakan tipe STRUCT untuk menerima data
Buat tabel eksternal berformat JSON dan gunakan tipe
STRUCTuntuk menerima field bersarang:CREATE EXTERNAL TABLE extable_json_test02 ( a STRUCT<x: BIGINT, y: BIGINT>, id STRING ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS textfile LOCATION 'oss://oss-cn-hangzhou-internal.aliyuncs.com/external-table-test/json_struct/';Kueri data dalam tabel secara langsung:
SELECT * FROM extable_json_test02;Hasil berikut dikembalikan:
+----------+-----+ | a | id | +----------+-----+ | {x:1, y:2}|123 | | {x:3, y:4}|345 | +----------+-----+Anda juga dapat menggunakan fungsi
get_json_objectdanTO_JSONuntuk membaca fieldxdany:SELECT get_json_object(TO_JSON(a), '$.x') AS x, get_json_object(TO_JSON(a), '$.y') AS y, id FROM extable_json_test02;Hasil berikut dikembalikan:
+---+---+-----+ | x | y | id | +---+---+-----+ | 1 | 2 |123 | | 3 | 4 |345 | +---+---+-----+
Contoh 3: Sesuaikan nama file output
Atur awalan kustom untuk file yang ditulis ke OSS menjadi
test06_. DDL-nya adalah sebagai berikut:CREATE EXTERNAL TABLE <mc_oss_extable_name> ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitute DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) STORED AS textfile LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/***/' TBLPROPERTIES ( -- Tambahkan awalan kustom. 'odps.external.data.output.prefix'='test06_') ; -- Tulis data ke tabel eksternal. INSERT INTO <mc_oss_extable_name> VALUES (1,32,76,1,63.32106,-92.08174,'9/14/2014 0:10','NW');Gambar berikut menunjukkan file yang dihasilkan setelah operasi penulisan.

Untuk menyesuaikan akhiran file yang ditulis ke OSS menjadi
_beijing, DDL-nya adalah sebagai berikut:CREATE EXTERNAL TABLE <mc_oss_extable_name> ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitute DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) STORED AS textfile LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/***/' TBLPROPERTIES ( -- Tambahkan akhiran kustom. 'odps.external.data.output.suffix'='_beijing') ; -- Tulis data ke tabel eksternal. INSERT INTO <mc_oss_extable_name> VALUES (1,32,76,1,63.32106,-92.08174,'9/14/2014 0:10','NW');Gambar berikut menunjukkan file yang dihasilkan setelah operasi penulisan.

Untuk menghasilkan ekstensi file secara otomatis untuk file output, gunakan DDL berikut:
CREATE EXTERNAL TABLE <mc_oss_extable_name> ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitute DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) STORED AS textfile LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/***/' TBLPROPERTIES ( -- Hasilkan ekstensi file secara otomatis. 'odps.external.data.enable.extension'='true') ; -- Tulis data ke tabel eksternal. INSERT INTO <mc_oss_extable_name> VALUES (1,32,76,1,63.32106,-92.08174,'9/14/2014 0:10','NW');Gambar berikut menunjukkan file yang dihasilkan setelah operasi penulisan.
Untuk menyesuaikan ekstensi file menjadi
jsonluntuk file yang ditulis ke OSS, DDL-nya adalah sebagai berikut:CREATE EXTERNAL TABLE <mc_oss_extable_name> ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitute DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) STORED AS textfile LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/***/' TBLPROPERTIES ( -- Tambahkan ekstensi file kustom. 'odps.external.data.output.explicit.extension'='jsonl') ; -- Tulis data ke tabel eksternal. INSERT INTO <mc_oss_extable_name> VALUES (1,32,76,1,63.32106,-92.08174,'9/14/2014 0:10','NW');Gambar berikut menunjukkan file yang dihasilkan setelah operasi penulisan.

Untuk file yang ditulis ke OSS, atur awalan menjadi
mc_, akhiran menjadi_beijing, dan ekstensi file menjadijsonl. DDL-nya adalah sebagai berikut:CREATE EXTERNAL TABLE <mc_oss_extable_name> ( vehicleId INT, recordId INT, patientId INT, calls INT, locationLatitute DOUBLE, locationLongitude DOUBLE, recordTime STRING, direction STRING ) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' WITH serdeproperties ( 'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole' ) STORED AS textfile LOCATION 'oss://oss-cn-beijing-internal.aliyuncs.com/***/' TBLPROPERTIES ( -- Tambahkan awalan kustom. 'odps.external.data.output.prefix'='mc_', -- Tambahkan akhiran kustom. 'odps.external.data.output.suffix'='_beijing', -- Tambahkan ekstensi file kustom. 'odps.external.data.output.explicit.extension'='jsonl') ; -- Tulis data ke tabel eksternal. INSERT INTO <mc_oss_extable_name> VALUES (1,32,76,1,63.32106,-92.08174,'9/14/2014 0:10','NW');Gambar berikut menunjukkan file yang dihasilkan setelah operasi penulisan.

FAQ
Error: Unexpected end-of-input: expected close marker for OBJECT
Pesan error
ODPS-0123131:User defined function exception - Traceback: com.aliyun.odps.serde.SerDeException: org.apache.hadoop.hive.serde2.SerDeException: org.codehaus.jackson.JsonParseException: Unexpected end-of-input: expected close marker for OBJECT (from [Source: java.io.ByteArrayInputStream@5a021cb9; line: 1, column: 0]) at [Source: java.io.ByteArrayInputStream@5a021cb9; line: 1, column: 3] at com.aliyun.odps.hive.wrapper.HiveSerDeWrapper.deserialize(HiveSerDeWrapper.java:122) at com.aliyun.odps.udf.HiveReaderHandler.next(HiveReaderHandler.java:152) at com.aliyun.odps.udf.HiveReaderHandler5c9b68c118d14fb2b392e8d916ddea8c.next(Unknown Source)Penyebab
Error ini biasanya terjadi karena data JSON tidak valid, seperti file JSON Lines (JSONL). Error dipicu jika suatu record berisi karakter newline yang tidak di-escape, sehingga melanggar aturan satu record per baris.
Solusi
Escape karakter newline dalam file JSON lalu baca datanya.
Pemecahan masalah
Saat Anda mengaktifkan BadRowSkipping, detail tentang baris yang dilewati dicetak ke log stdout di Logview. Hal ini membantu Anda mendiagnosis error data. Gunakan pengaturan berikut untuk mengaktifkan fitur ini:
-- Atur parameter BadRowSkipping ke on pada tingkat sesi untuk melewati data error. SET odps.sql.unstructured.text.bad.row.skipping=on; -- Tentukan jumlah record error yang dapat dicetak ke stdout di Logview. SET odps.sql.unstructured.text.bad.row.skipping.debug.num=<number>;
Tipe data yang didukung
Untuk informasi selengkapnya tentang tipe data MaxCompute, lihat Tipe data (Versi 1.0) dan Tipe data (Versi 2.0).
Tipe | Didukung | Tipe | Didukung |
TINYINT | STRING | ||
SMALLINT | DATE | ||
INT | DATETIME | ||
BIGINT | TIMESTAMP | ||
BINARY | TIMESTAMP_NTZ | ||
FLOAT | BOOLEAN | ||
DOUBLE | ARRAY | ||
DECIMAL(precision, scale) | MAP | ||
VARCHAR(n) | STRUCT | ||
CHAR(n) | JSON |
Evolusi skema
Tabel eksternal JSON memetakan kolom tabel ke field JSON berdasarkan nama.
Dalam tabel berikut, Kompatibilitas data menunjukkan apakah tabel masih dapat membaca data historis dengan benar setelah perubahan skema.
Operasi | Didukung | Deskripsi | Kompatibilitas data |
Tambah kolom |
|
| |
Hapus kolom | Tabel eksternal JSON memetakan kolom berdasarkan nama. | Kompatibel | |
Ubah urutan kolom | Tabel eksternal JSON memetakan kolom berdasarkan nama. | Kompatibel | |
Ubah tipe data kolom | Untuk informasi tentang konversi tipe data yang didukung, lihat Ubah tipe data kolom. | Kompatibel | |
Ubah nama kolom | Operasi ini tidak disarankan. Tabel eksternal JSON memetakan kolom berdasarkan nama. Setelah Anda mengganti nama kolom, nama kolom dalam file JSON tidak lagi cocok dengan skema baru, yang dapat menyebabkan operasi baca gagal. |
| |
Ubah komentar kolom | Komentar harus berupa string valid dengan panjang maksimal 1.024 byte. Jika tidak, error akan dilaporkan. | Kompatibel | |
Ubah properti non-null kolom | Operasi ini tidak didukung. Kolom bersifat nullable secara bawaan. | Tidak berlaku |