Tüm Ürünler
Search
Belge Merkezi

MaxCompute:VALUES

Son Güncelleme:Oct 04, 2026

Bir tabloya az miktarda veri eklemek için INSERT … VALUES ifadesini veya VALUES TABLE yan tümcesini kullanın.

Bir INSERT INTO ifadesini çalıştırmak için hedef tablo üzerinde ALTER izni ve kaynak tablo üzerinde DESCRIBE izni gerekir. İzinlerin nasıl verileceği hakkında bilgi almak için MaxCompute izinleri konusuna bakın.

Bu konudaki komutları aşağıdaki platformlarda çalıştırabilirsiniz:

Özellikler

MaxCompute, bir tabloya az miktarda veri eklemek için INSERT … VALUES veya VALUES TABLE kullanımına olanak tanır.

İşlem

Açıklama

INSERT … VALUES

Test sırasında, bir tabloya hızlıca test verisi eklemek için INSERT … VALUES kullanabilirsiniz.

  • Az miktarda veri eklemek için bir INSERT … VALUES ifadesi kullanın.

  • Daha fazla satır eklemek için Tunnel kullanarak bir TXT veya CSV dosyası yükleyin. Daha fazla bilgi için bkz. Veri içe aktarma.

VALUES TABLE

Eklenen veriler üzerinde basit hesaplamalar yapmak için VALUES TABLE yan tümcesini kullanın. VALUES TABLE yan tümcesi, INSERT ifadelerinde ve herhangi bir DML ifadesinde kullanılabilir. Aşağıdaki özellikleri sağlar:

  • Fiziksel bir tablo kullanmadan rastgele verilerle çok satırlı bir tabloyu simüle eder; bu sayede anında hesaplama yapmanıza olanak tanır.

  • SELECT * FROM ve UNION ALL kombinasyonunu kullanmaya kıyasla sabit bir tabloyu daha verimli şekilde oluşturur.

  • VALUES TABLE özel bir formunu kullanarak FROM yan tümcesi olmayan bir SELECT ifadesi çalıştırın. SELECT listesindeki ifadeler diğer tablolardaki verilere başvuramaz. Bu işlem, anonim, tek satırlı ve sıfır sütunlu bir VALUES tablosundan seçim yapılarak uygulanır. Bu yöntem, bir DUAL tablosu oluşturmadan kullanıcı tanımlı bir işlevi (UDF) veya diğer işlevleri test etmek için kullanışlıdır.

Sınırlamalar

Bir tabloya veri eklemek için INSERT … VALUES veya VALUES TABLE kullandığınızda, hedef sütunları belirtmek üzere INSERT OVERWRITE kullanamazsınız. INSERT INTO kullanmanız gerekir.

Söz dizimi

--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>,...)...


Parametre


Gerekli


Açıklama


table_name


Evet


Verilerin ekleneceği tablonun adı. Tablo önceden mevcut olmalıdır.


pt_spec


Hayır


Hedef bölüm. Biçim şöyledir: (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). Bölümlendirilmiş bir tabloya veri ekliyorsanız bu parametre gereklidir.


col_name


Hayır


Bir hedef sütunun adı.


col_value


Hayır


İlgili sütun için değer. Birden çok değeri virgül (,) ile ayırın. Bu, bir sabit veya kullanıcı tanımlı işlev ya da yerleşik işlev gibi sabit olmayan bir ifade olabilir. Bir sütun için değer belirtilmezse sütun varsayılan olarak NULL olur.

Not
  • VALUES yan tümcesi, ARRAY gibi karmaşık veri türleri için değişmez değerleri desteklemez. ARRAY verisi eklemek farklı bir söz dizimi gerektirir. Ayrıntılar için bkz. Örnek 3.

  • DATETIME veya TIMESTAMP verisi yazmak için VALUES kullandığınızda, VALUES içinde tür adını belirtmeniz gerekir. Bkz. Örnek 4.

Örnekler

  • Örnek 1: Belirli bir bölüme veri eklemek için INSERT … VALUES kullanın.

    -- Create a partitioned table named srcp.
    CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING);
    
    -- Add a partition to the srcp table.
    ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');
    
    -- Insert data into the 'abc' partition of the srcp table.
    INSERT INTO TABLE srcp PARTITION (p='abc') VALUES ('a',1),('b',2),('c',3);
    
    -- Query the srcp table.
    SELECT * FROM srcp WHERE p='abc';
    
    -- The following result is returned.
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | a          | 1          | abc        |
    | b          | 2          | abc        |
    | c          | 3          | abc        |
    +------------+------------+------------+
  • Örnek 2: Bir bölüm değeri belirtmeden veri eklemek için INSERT … VALUES kullanın.

    -- Create a partitioned table named srcp.
    CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING);
    
    -- Insert data into the srcp table without specifying a partition value. The partition column is included in the column list.
    INSERT INTO TABLE srcp PARTITION (p)(key,p) VALUES ('d','20170101'),('e','20170101'),('f','20170101');
    
    -- Query the srcp table.
    SELECT * FROM srcp WHERE p='20170101';
    
    -- The following result is returned.
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | d          | NULL       | 20170101   |
    | e          | NULL       | 20170101   |
    | f          | NULL       | 20170101   |
    +------------+------------+------------+
  • Örnek 3: Karmaşık bir veri türündeki verileri eklemek için SELECT yan tümceli bir INSERT ifadesi kullanın.

    -- Create a partitioned table named srcp with a complex data type.
    CREATE TABLE IF NOT EXISTS srcp (key STRING,value ARRAY<INT>) PARTITIONED BY (p STRING);
    
    -- Add a partition to the srcp table.
    ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');
    
    -- Insert data into the 'abc' partition of the srcp table.
    INSERT INTO TABLE srcp PARTITION (p='abc') SELECT 'a', ARRAY(1, 2, 3);
    
    -- Query the srcp table.
    SELECT * FROM srcp WHERE p='abc';
    
    -- The following result is returned.
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | a          | [1,2,3]    | abc        |
    +------------+------------+------------+
  • Örnek 4: DATETIME veya TIMESTAMP verisi yazmak için INSERT … VALUES kullanın. Değişmez değeri açıkça cast etmek için VALUES yan tümcesinde tür adını önek olarak eklemeniz gerekir.

    -- Create a partitioned table named srcp.
    CREATE TABLE IF NOT EXISTS srcp (key STRING, value TIMESTAMP) PARTITIONED BY (p STRING);
    
    -- Add a partition to the srcp table.
    ALTER TABLE srcp ADD IF NOT EXISTS PARTITION (p='abc');
    
    -- Insert data into the 'abc' partition of the srcp table.
    INSERT INTO TABLE srcp PARTITION (p='abc') VALUES (datetime'2017-11-11 00:00:00', TIMESTAMP'2017-11-11 00:00:00.123456789');
    
    -- Query the srcp table.
    SELECT * FROM srcp WHERE p='abc';
    
    -- The following result is returned.
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | 2017-11-11 00:00:00 | 2017-11-11 00:00:00.123 | abc        |
    +------------+------------+------------+
  • Örnek 5: Veri eklemek için bir VALUES table kullanın.

    -- Create a partitioned table named srcp.
    CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING);
    
    -- Insert data into the srcp table.
    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);
    
    -- Query the srcp table.
    SELECT * FROM srcp WHERE p='20170102';
    
    -- The following result is returned.
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | d4         | 2          | 20170102   |
    | e5         | 2          | 20170102   |
    | f6         | 2          | 20170102   |
    +------------+------------+------------+

    Veritabanı, sütun veri türlerini (bu durumda STRING ve BIGINT) VALUES listesindeki değerlerden çıkarır. VALUES (…), (…) t(a, b) ifadesi, a ve b sütunlarına sahip t adlı geçici bir tablo tanımlar.

  • Örnek 6: SELECT * FROM ile UNION ALL kullanmaya alternatif olarak sabit bir tablo oluşturmak için bir VALUES tablosu kullanın.

    SELECT 1 c UNION ALL SELECT 2 c;
    -- The preceding statement is equivalent to the following statement:
    SELECT * FROM VALUES (1), (2) t(c);
    
    -- The following result is returned.
    +------------+
    | c          |
    +------------+
    | 1          |
    | 2          |
    +------------+
  • Örnek 7: FROM yan tümcesi olmadan veri eklemek için özel bir VALUES table formu kullanın.

    -- Create a partitioned table named srcp.
    CREATE TABLE IF NOT EXISTS srcp (key STRING,value BIGINT) PARTITIONED BY (p STRING);
    
    -- Insert data into the srcp table.
    INSERT INTO TABLE srcp PARTITION (p) SELECT ABS(-1), LENGTH('abc'), GETDATE();
    
    -- Query the srcp table.
    SET odps.sql.allow.fullscan=true;
    SELECT * FROM srcp;
    
    -- Sample result:
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | 1          | 3          | 2024-12-10 16:58:56 |
    +------------+------------+------------+
  • Örnek 8: Sabit olmayan ifadeler kullanın.

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

    Aşağıdaki sonuç döndürülür:

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