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
| Operasi | Kapan digunakan |
|---|---|
INSERT ... VALUES | Memasukkan beberapa atau puluhan baris ke dalam tabel uji selama fase pengujian |
VALUES TABLE | Melakukan 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
| Parameter | Wajib | Deskripsi |
|---|---|---|
table_name | Ya | Nama tabel yang sudah ada untuk memasukkan data |
pt_spec | Tidak | Partisi tujuan. Format: (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Wajib jika memasukkan data ke tabel partisi |
col_name | Tidak | Nama kolom tujuan |
col_value | Tidak | Nilai 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
SELECTdenganARRAY()— 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 |
+---------------------+