Gunakan pernyataan INSERT … VALUES atau klausa VALUES TABLE untuk memasukkan data dalam jumlah kecil ke dalam tabel.
Menjalankan pernyataan INSERT INTO memerlukan izin ALTER untuk tabel tujuan dan izin DESCRIBE untuk tabel sumber. Untuk informasi tentang cara memberikan izin, lihat izin MaxCompute.
Anda dapat menjalankan perintah dalam topik ini pada platform berikut:
Fitur
MaxCompute memungkinkan Anda menggunakan INSERT … VALUES atau VALUES TABLE untuk memasukkan data dalam jumlah kecil ke dalam tabel.
Operasi | Deskripsi |
| Saat pengujian, Anda dapat menggunakan
|
| Untuk perhitungan sederhana pada data yang dimasukkan, gunakan klausa
|
Batasan
Saat menggunakan INSERT … VALUES atau VALUES TABLE untuk memasukkan data ke dalam tabel, Anda tidak dapat menggunakan INSERT OVERWRITE untuk menentukan kolom tujuan. Anda harus menggunakan INSERT INTO.
Sintaksis
--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 | Wajib | Deskripsi |
table_name | Ya | Nama tabel tempat data akan dimasukkan. Tabel tersebut harus sudah ada. |
pt_spec | Tidak | Partisi tujuan. Formatnya adalah |
col_name | Tidak | Nama kolom tujuan. |
col_value | Tidak | Nilai untuk kolom yang sesuai. Pisahkan beberapa nilai dengan koma (,). Nilai ini dapat berupa konstanta atau ekspresi non-konstanta, seperti fungsi user-defined atau fungsi bawaan. Jika nilai tidak ditentukan untuk suatu kolom, kolom tersebut akan bernilai NULL secara default. |
Contoh
Contoh 1: Gunakan
INSERT … VALUESuntuk memasukkan data ke partisi tertentu.-- Buat tabel partisi bernama srcp. CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING); -- Tambahkan partisi ke tabel srcp. ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc'); -- Masukkan data ke partisi 'abc' tabel srcp. INSERT INTO TABLE srcp PARTITION (p='abc') VALUES ('a',1),('b',2),('c',3); -- Kueri tabel srcp. SELECT * FROM srcp WHERE p='abc'; -- Hasil berikut dikembalikan. +------------+------------+------------+ | key | value | p | +------------+------------+------------+ | a | 1 | abc | | b | 2 | abc | | c | 3 | abc | +------------+------------+------------+Contoh 2: Gunakan
INSERT … VALUESuntuk memasukkan data tanpa menentukan nilai partisi.-- Buat tabel partisi bernama srcp. CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING); -- Masukkan data ke tabel srcp tanpa menentukan nilai partisi. Kolom partisi disertakan dalam daftar kolom. INSERT INTO TABLE srcp PARTITION (p)(key,p) VALUES ('d','20170101'),('e','20170101'),('f','20170101'); -- Kueri tabel srcp. SELECT * FROM srcp WHERE p='20170101'; -- Hasil berikut dikembalikan. +------------+------------+------------+ | key | value | p | +------------+------------+------------+ | d | NULL | 20170101 | | e | NULL | 20170101 | | f | NULL | 20170101 | +------------+------------+------------+Contoh 3: Gunakan pernyataan
INSERTdengan klausa SELECT untuk memasukkan data tipe kompleks.-- Buat tabel partisi bernama srcp dengan tipe data kompleks. CREATE TABLE IF NOT EXISTS srcp (key STRING,value ARRAY<INT>) PARTITIONED BY (p STRING); -- Tambahkan partisi ke tabel srcp. ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc'); -- Masukkan data ke partisi 'abc' tabel srcp. INSERT INTO TABLE srcp PARTITION (p='abc') SELECT 'a', ARRAY(1, 2, 3); -- Kueri tabel srcp. SELECT * FROM srcp WHERE p='abc'; -- Hasil berikut dikembalikan. +------------+------------+------------+ | key | value | p | +------------+------------+------------+ | a | [1,2,3] | abc | +------------+------------+------------+Contoh 4: Gunakan
INSERT … VALUESuntuk menulis data DATETIME atau TIMESTAMP. Anda harus secara eksplisit melakukan casting literal dengan menambahkan nama tipe di depannya dalam klausaVALUES.-- Buat tabel partisi bernama srcp. CREATE TABLE IF NOT EXISTS srcp (key STRING, value TIMESTAMP) PARTITIONED BY (p STRING); -- Tambahkan partisi ke tabel srcp. ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc'); -- Masukkan data ke partisi 'abc' tabel srcp. INSERT INTO TABLE srcp PARTITION (p='abc') VALUES (datetime'2017-11-11 00:00:00', TIMESTAMP'2017-11-11 00:00:00.123456789'); -- Kueri tabel srcp. SELECT * FROM srcp WHERE p='abc'; -- Hasil berikut dikembalikan. +------------+------------+------------+ | key | value | p | +------------+------------+------------+ | 2017-11-11 00:00:00 | 2017-11-11 00:00:00.123 | abc | +------------+------------+------------+Contoh 5: Gunakan
VALUES tableuntuk memasukkan data.-- Buat tabel partisi bernama srcp. CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING); -- Masukkan data ke tabel srcp. 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 tabel srcp. SELECT * FROM srcp WHERE p='20170102'; -- Hasil berikut dikembalikan. +------------+------------+------------+ | key | value | p | +------------+------------+------------+ | d4 | 2 | 20170102 | | e5 | 2 | 20170102 | | f6 | 2 | 20170102 | +------------+------------+------------+Database melakukan inferensi tipe data kolom (dalam kasus ini, STRING dan BIGINT) dari nilai-nilai dalam daftar
VALUES.VALUES (…), (…) t(a, b)mendefinisikan tabel temporary bernamatdengan kolomadanb.Contoh 6: Gunakan VALUES table untuk membuat tabel konstan sebagai alternatif penggunaan
SELECT * FROMdenganUNION ALL.SELECT 1 c UNION ALL SELECT 2 c; -- Pernyataan di atas setara dengan pernyataan berikut: SELECT * FROM VALUES (1), (2) t(c); -- Hasil berikut dikembalikan. +------------+ | c | +------------+ | 1 | | 2 | +------------+Contoh 7: Gunakan bentuk khusus dari
VALUES tableuntuk memasukkan data tanpa klausaFROM.-- Buat tabel partisi bernama srcp. CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING); -- Masukkan data ke tabel srcp. INSERT INTO TABLE srcp PARTITION (p) SELECT ABS(-1), LENGTH('abc'), GETDATE(); -- Kueri tabel srcp. SET odps.sql.allow.fullscan=true; SELECT * FROM srcp; -- Contoh hasil: +------------+------------+------------+ | key | value | p | +------------+------------+------------+ | 1 | 3 | 2024-12-10 16:58:56 | +------------+------------+------------+Contoh 8: Gunakan ekspresi non-konstanta.
SELECT * FROM VALUES (GETDATE()),(TO_DATE('20190101', 'yyyyMMdd')),(LASTDAY(DATETIME '2019-01-01 01:10:00')) t(d);Hasil berikut dikembalikan:
+------------+ | d | +------------+ | 2019-01-31 00:00:00 | | 2019-01-01 00:00:00 | | 2024-12-10 16:52:36 | +------------+