All Products
Search
Document Center

MaxCompute:VALUES

Last Updated:Aug 22, 2026

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

INSERT … VALUES

Saat pengujian, Anda dapat menggunakan INSERT … VALUES untuk menambahkan data uji ke tabel secara cepat.

  • Gunakan pernyataan INSERT … VALUES untuk memasukkan data dalam jumlah kecil.

  • Untuk memasukkan lebih banyak baris, gunakan Tunnel untuk mengunggah file TXT atau CSV. Untuk informasi selengkapnya, lihat Impor data.

VALUES TABLE

Untuk perhitungan sederhana pada data yang dimasukkan, gunakan klausa VALUES TABLE. Klausa VALUES TABLE dapat digunakan dalam pernyataan INSERT dan semua pernyataan DML. Fitur-fitur berikut disediakan:

  • Simulasikan tabel multi-baris dengan data arbitrer tanpa menggunakan tabel fisik, sehingga memungkinkan Anda melakukan perhitungan langsung.

  • Buat tabel konstan lebih efisien dibandingkan menggunakan kombinasi SELECT * FROM dan UNION ALL.

  • Gunakan bentuk khusus dari VALUES TABLE untuk menjalankan pernyataan SELECT tanpa klausa FROM. Ekspresi dalam daftar SELECT tidak boleh mereferensi data dari tabel lain. Hal ini diimplementasikan dengan memilih dari tabel VALUES anonim, satu baris, nol kolom. Metode ini berguna untuk menguji fungsi user-defined (UDF) atau fungsi lain tanpa membuat tabel DUAL.

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 (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Parameter ini wajib jika Anda memasukkan data ke dalam tabel partisi.

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.

Catatan
  • Klausa VALUES tidak mendukung literal untuk tipe data kompleks, seperti ARRAY. Memasukkan data ARRAY memerlukan sintaksis berbeda. Untuk detailnya, lihat Contoh 3.

  • Saat menggunakan VALUES untuk menulis data DATETIME atau TIMESTAMP, Anda perlu menentukan nama tipe dalam VALUES. Lihat Contoh 4.

Contoh

  • Contoh 1: Gunakan INSERT … VALUES untuk 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 … VALUES untuk 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 INSERT dengan 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 … VALUES untuk menulis data DATETIME atau TIMESTAMP. Anda harus secara eksplisit melakukan casting literal dengan menambahkan nama tipe di depannya dalam klausa VALUES.

    -- 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 table untuk 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 bernama t dengan kolom a dan b.

  • Contoh 6: Gunakan VALUES table untuk membuat tabel konstan sebagai alternatif penggunaan SELECT * FROM dengan UNION 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 table untuk memasukkan data tanpa klausa FROM.

    -- 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 |
    +------------+