Topik ini menjelaskan cara membuat, membaca dari, dan menulis ke tabel eksternal JSON di OSS.
Ruang 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.
Format kompresi yang didukung
File JSON yang dikompresi dalam format berikut didukung untuk operasi baca dan tulis: SNAPPY, LZO, BZip2, LZ4, Deflate, GZIP, dan ZSTD.
Untuk menulis file terkompresi ke OSS, tambahkan klausa
tblpropertiesdan konfigurasikan properti kompresi. Untuk informasi selengkapnya, lihat Parameter TBLPROPERTIES.
Buat tabel eksternal
Sintaks
Jika file JSON memiliki kolom lebih sedikit daripada definisi tabel eksternal, MaxCompute mengisi kolom yang hilang dengan NULL. Jika file memiliki lebih banyak kolom, MaxCompute mengabaikan kolom tambahan tersebut.
Sintaks ringkas
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>';Sintaks 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 sintaks 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 codec kompresi untuk file data TEXTFILE. Secara bawaan, file dikompresi menggunakan codec 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 sintaksfield_name.subfield_name.
Tulis data
Untuk informasi tentang sintaks penulisan data dari MaxCompute ke OSS, lihat Tulis data ke OSS.
Kueri data
Untuk informasi tentang sintaks 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 format data dasar diinterpretasikan.
Parameter
Parameter tingkat tabel:
odps.text.option.bad.row.skippingrigid: Memaksa pelewat. Pengaturan ini tidak dapat diganti oleh konfigurasi tingkat sesi atau tingkat proyek.flexible: Mengaktifkan pelewat. Pengaturan ini fleksibel, sehingga dapat diganti oleh konfigurasi tingkat sesi atau tingkat proyek.
Parameter tingkat
sesi/proyekParameter
odps.sql.unstructured.text.bad.row.skippingdapat mengganti parameter tingkat tabelflexible, tetapi tidak dapat mengganti yangrigid.on: Mengaktifkan fitur. Jika fitur tidak dikonfigurasi untuk tabel, fitur ini diaktifkan secara bawaan.off: Menonaktifkan fitur. Jika tabel dikonfigurasi sebagai flexible, fitur dinonaktifkan. Jika tidak, pengaturan parameter tabel yang digunakan.<null> atau input tidak valid: Konfigurasi tingkat tabel yang digunakan.
odps.sql.unstructured.text.bad.row.skipping.debug.num: Menentukan jumlah hasil error yang dicetak ke stdout di Logview.Nilai maksimum adalah 1000.
Jika nilainya <=0, fitur ini dinonaktifkan.
Jika nilainya tidak valid, fitur ini dinonaktifkan.
Interaksi antara parameter tingkat sesi dan properti tabel
properti tbl
flag sesi
hasil
rigid
on
On, Dipaksa aktif
off
<null>, nilai tidak valid, atau parameter tidak dikonfigurasi
flexible
on
On
off
Off, Dinonaktifkan oleh sesi
<null>, nilai tidak valid, atau parameter tidak dikonfigurasi
On
Tidak dikonfigurasi
on
On, Diaktifkan oleh sesi
off
Off
<null>, nilai tidak valid, atau parameter tidak dikonfigurasi
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 berdasarkan 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. );Pelewatan 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 'flexible', fitur ini akan dinonaktifkan. Jika properti tabel '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 exceptionPelewatan Fleksibel
-- Aktifkan pada tingkat sesi. SET odps.sql.unstructured.text.bad.row.skipping=on; -- Nonaktifkan pada tingkat sesi. Jika properti tabel 'flexible', fitur ini akan dinonaktifkan. Jika properti tabel '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 exceptionPelewatan Kaku
-- Aktifkan pada tingkat sesi. SET odps.sql.unstructured.text.bad.row.skipping=on; -- Nonaktifkan pada tingkat sesi. Jika properti tabel 'flexible', fitur ini akan dinonaktifkan. Jika properti tabel '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
-
Anda telah membuat proyek MaxCompute.
-
Anda telah menyiapkan bucket dan direktori OSS. Untuk informasi selengkapnya, lihat Buat bucket dan Kelola direktori.
Pastikan bucket Anda berada di wilayah yang sama dengan proyek MaxCompute Anda.
-
Berikan izin.
-
Anda memiliki izin untuk mengakses OSS. Anda dapat mengakses tabel eksternal OSS menggunakan Akun Alibaba Cloud, Pengguna RAM, atau Peran RAM. Untuk informasi selengkapnya tentang cara memberikan izin, lihat Otorisasi mode STS untuk OSS.
-
Anda memiliki izin CreateTable di proyek MaxCompute. Untuk informasi selengkapnya tentang izin terkait 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.
Login ke Konsol OSS dan unggah file data uji json2025.txt ke direktori
external-table-test/json/dt=20250521/di 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"}Login ke Konsol OSS dan unggah data uji ke direktori external-table-test/json-sturct/ di 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 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 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 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 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, 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 melewatkan 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 |
Tambahkan 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 |