All Products
Search
Document Center

MaxCompute:INSERT INTO VALUES

Last Updated:Mar 26, 2026

Gunakan INSERT ... VALUES atau VALUES TABLE untuk memasukkan sejumlah kecil baris langsung ke dalam tabel MaxCompute—biasanya selama pengembangan dan pengujian.

Untuk set data yang lebih besar (puluhan baris atau lebih), gunakan perintah Tunnel untuk mengunggah file TXT atau CSV sebagai gantinya. Lihat Impor data ke tabel

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  • Izin ALTER pada tabel tujuan

  • Izin DESCRIBE pada metadata tabel sumber

Untuk detailnya, lihat Izin MaxCompute.

Platform yang didukung

Jalankan pernyataan ini di salah satu platform berikut:

Operasi

OperasiKapan digunakan
INSERT ... VALUESMemasukkan beberapa atau puluhan baris ke dalam tabel uji selama fase pengujian
VALUES TABLEMelakukan komputasi sederhana pada data inline. Dapat digunakan dalam pernyataan INSERT dan pernyataan bahasa manipulasi data (DML)

Batasan

Saat menggunakan INSERT ... VALUES atau VALUES TABLE, INSERT OVERWRITE dengan spesifikasi kolom tidak didukung. Gunakan INSERT INTO sebagai gantinya.

Sintaks

INSERT ... VALUES

INSERT INTO TABLE <table_name>
[PARTITION (<pt_spec>)][(<col1_name>, <col2_name>, ...)]
VALUES (<col1_value>, <col2_value>, ...), (<col1_value>, <col2_value>, ...), ...

VALUES TABLE

VALUES (<col1_value>, <col2_value>, ...), (<col1_value>, <col2_value>, ...) <table_name> (<col1_name>, <col2_name>, ...) ...

Parameter

ParameterWajibDeskripsi
table_nameYaNama tabel yang sudah ada untuk memasukkan data
pt_specTidakPartisi tujuan. Format: (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Wajib jika memasukkan data ke tabel partisi
col_nameTidakNama kolom tujuan
col_valueTidakNilai yang akan dimasukkan. Menerima literal, ekspresi konstan, atau ekspresi non-konstan (seperti fungsi bawaan atau ekspresi user-defined function (UDF)). Kolom yang tidak tercantum dalam col_name akan bernilai default NULL

Catatan penggunaan

Tipe nilai yang didukung dalam VALUES

  • Literal (string, integer, decimal)

  • Ekspresi konstan

  • Ekspresi non-konstan, seperti fungsi bawaan dan ekspresi UDF

Tipe nilai yang tidak didukung dalam VALUES

Hal-hal berikut tidak dapat digunakan secara langsung dalam daftar VALUES. Gunakan ekspresi SELECT sebagai gantinya:

  • Tipe data kompleks selain ARRAY. Untuk memasukkan data ARRAY, gunakan SELECT dengan ARRAY() — lihat Masukkan data ARRAY.

Tipe tanggal dan waktu

Untuk memasukkan data DATETIME atau TIMESTAMP, tentukan awalan tipe data di dalam VALUES. Contohnya: datetime'2017-11-11 00:00:00' atau TIMESTAMP'2017-11-11 00:00:00.123456789'.

Contoh

Masukkan baris ke partisi tertentu

Buat tabel partisi dan masukkan tiga baris ke partisi bernama.

-- Buat tabel partisi bernama srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Tambahkan partisi abc ke tabel srcp.
ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');

-- Masukkan tiga baris ke partisi abc.
INSERT INTO TABLE srcp PARTITION (p='abc') VALUES ('a', 1), ('b', 2), ('c', 3);

-- Kueri partisi untuk verifikasi.
SELECT * FROM srcp WHERE p='abc';

-- Hasil kueri
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| a          | 1          | abc        |
| b          | 2          | abc        |
| c          | 3          | abc        |
+------------+------------+------------+

Masukkan baris dengan nilai partisi inline

Tentukan nilai kolom partisi secara langsung dalam daftar VALUES alih-alih dalam klausa PARTITION.

-- Buat tabel partisi bernama srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Masukkan baris dan turunkan nilai partisi dari daftar VALUES.
INSERT INTO TABLE srcp PARTITION (p)(key, p) VALUES ('d', '20170101'), ('e', '20170101'), ('f', '20170101');

-- Kueri partisi untuk verifikasi.
SELECT * FROM srcp WHERE p='20170101';

-- Hasil kueri
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| d          | NULL       | 20170101   |
| e          | NULL       | 20170101   |
| f          | NULL       | 20170101   |
+------------+------------+------------+
Kolom value tidak tercantum dalam daftar kolom, sehingga bernilai default NULL.

Masukkan data ARRAY

Karena literal ARRAY tidak dapat digunakan langsung dalam VALUES, gunakan ekspresi SELECT dengan ARRAY() sebagai gantinya.

-- Buat tabel partisi bernama srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value ARRAY<INT>) PARTITIONED BY (p STRING);

-- Tambahkan partisi abc ke tabel srcp.
ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');

-- Masukkan nilai ARRAY menggunakan ekspresi SELECT.
INSERT INTO TABLE srcp PARTITION (p='abc') SELECT 'a', ARRAY(1, 2, 3);

-- Kueri partisi untuk verifikasi.
SELECT * FROM srcp WHERE p='abc';

-- Hasil kueri
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| a          | [1,2,3]    | abc        |
+------------+------------+------------+

Masukkan data DATETIME dan TIMESTAMP

Tambahkan awalan nama tipe data pada literal tanggal dan waktu untuk menghindari kesalahan inferensi tipe.

-- Buat tabel partisi bernama srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value TIMESTAMP) PARTITIONED BY (p STRING);

-- Tambahkan partisi abc ke tabel srcp.
ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');

-- Masukkan nilai DATETIME dan TIMESTAMP dengan awalan tipe eksplisit.
INSERT INTO TABLE srcp PARTITION (p='abc') VALUES (datetime'2017-11-11 00:00:00', TIMESTAMP'2017-11-11 00:00:00.123456789');

-- Kueri partisi untuk verifikasi.
SELECT * FROM srcp WHERE p='abc';

-- Hasil kueri
+------------------------+-------------------------+------------+
| key                    | value                   | p          |
+------------------------+-------------------------+------------+
| 2017-11-11 00:00:00    | 2017-11-11 00:00:00.123 | abc        |
+------------------------+-------------------------+------------+

Gunakan VALUES TABLE dengan kolom terhitung

Referensikan nilai inline sebagai tabel bernama dan terapkan fungsi selama INSERT.

-- Buat tabel partisi bernama srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Masukkan data dengan ekspresi terhitung yang diturunkan dari tabel VALUES inline t(a, b).
INSERT INTO TABLE srcp PARTITION (p)
SELECT concat(a, b), length(a) + length(b), '20170102'
FROM VALUES ('d', 4), ('e', 5), ('f', 6) t(a, b);

-- Kueri partisi untuk verifikasi.
SELECT * FROM srcp WHERE p='20170102';

-- Hasil kueri
+------------+------------+------------+
| key        | value      | p          |
+------------+------------+------------+
| d4         | 2          | 20170102   |
| e5         | 2          | 20170102   |
| f6         | 2          | 20170102   |
+------------+------------+------------+

VALUES (...) t(a, b) mendefinisikan tabel inline bernama t dengan kolom a dan b. Tipe data diinferensi dari daftar VALUES: a bertipe STRING dan b bertipe BIGINT.

Buat tabel konstan tanpa UNION ALL

Gunakan VALUES TABLE sebagai alternatif ringkas daripada rangkaian pernyataan SELECT ... UNION ALL.

-- Kedua pernyataan ini setara:
SELECT 1 c UNION ALL SELECT 2 c;

SELECT * FROM VALUES (1), (2) t(c);

-- Hasil kueri
+------------+
| c          |
+------------+
| 1          |
| 2          |
+------------+

Gunakan VALUES TABLE tanpa klausa FROM

VALUES TABLE memungkinkan Anda menjalankan pernyataan SELECT yang memanggil fungsi tanpa mereferensikan tabel apa pun. Implementasi internalnya memilih dari tabel VALUES anonim berbaris tunggal dan tanpa kolom, sehingga tidak diperlukan tabel DUAL.

-- Buat tabel partisi bernama srcp.
CREATE TABLE IF NOT EXISTS srcp (key STRING, value BIGINT) PARTITIONED BY (p STRING);

-- Masukkan satu baris yang dihitung sepenuhnya dari fungsi bawaan.
INSERT INTO TABLE srcp PARTITION (p)
SELECT ABS(-1), LENGTH('abc'), GETDATE();

-- Kueri semua baris.
SET odps.sql.allow.fullscan=true;
SELECT * FROM srcp;

-- Hasil kueri
+------------+------------+---------------------+
| key        | value      | p                   |
+------------+------------+---------------------+
| 1          | 3          | 2024-12-10 16:58:56 |
+------------+------------+---------------------+

Gunakan ekspresi non-konstan dalam VALUES

Teruskan pemanggilan fungsi secara langsung sebagai nilai kolom dalam daftar VALUES.

SELECT * FROM VALUES (GETDATE()), (TO_DATE('20190101', 'yyyyMMdd')), (LASTDAY(DATETIME '2019-01-01 01:10:00')) t(d);

Hasil:

+---------------------+
| d                   |
+---------------------+
| 2019-01-31 00:00:00 |
| 2019-01-01 00:00:00 |
| 2024-12-10 16:52:36 |
+---------------------+