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 |
| Test sırasında, bir tabloya hızlıca test verisi eklemek için
|
| Eklenen veriler üzerinde basit hesaplamalar yapmak için
|
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>,...)...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
VALUESyan 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
VALUESkullandığınızda,VALUESiçinde tür adını belirtmeniz gerekir. Bkz. Örnek 4.
Örnekler
-
Örnek 1: Belirli bir bölüme veri eklemek için
INSERT … VALUESkullanı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 … VALUESkullanı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
INSERTifadesi 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 … VALUESkullanın. Değişmez değeri açıkça cast etmek içinVALUESyan 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 tablekullanı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)
VALUESlistesindeki değerlerden çıkarır.VALUES (…), (…) t(a, b)ifadesi,avebsütunlarına sahiptadlı geçici bir tablo tanımlar. -
Örnek 6:
SELECT * FROMileUNION ALLkullanmaya 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:
FROMyan tümcesi olmadan veri eklemek için özel birVALUES tableformu 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 | +------------+