Açıklama
TRUNCATE TABLE ifadesi, tablo şemasını, izinleri ve meta verileri koruyarak bir tablodaki veya belirtilen bölümlerdeki tüm verileri kaldırır. Tabloyu tamamen silen DROP TABLE ifadesinden farklı olarak TRUNCATE TABLE tablo yapısını korur; böylece veriler hemen ardından tekrar eklenebilir. Tek tek satır silme işlemlerini taramadığı veya günlüklemediği için DELETE ifadesinden çok daha hızlı çalışır.
Söz dizimi
Bölümlenmemiş bir tabloyu boşaltma
TRUNCATE TABLE <table_name>;
Belirli bölümleri boşaltma
TRUNCATE TABLE <table_name> PARTITION <partition_spec>[, PARTITION <partition_spec>...];
Filtre koşulu kullanarak bölümleri boşaltma
TRUNCATE TABLE <table_name> PARTITION <partition_filter_condition>;
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bölüm belirtimi bileşenleri:
partition_col: Bölüm sütunu adı (büyük/küçük harfe duyarlı değil).partition_col_value: Bölüm değeri (büyük/küçük harfe duyarlı).
Bölüm filtre koşulu ayrıntıları
partition_filter_condition parametresi aşağıdaki biçimleri destekler:
partition (<partition_col> <comparison_operator> <partition_col_value>)-- Bir bölüm sütununu doğrudan karşılaştırır.partition (scalar(<partition_col>) <comparison_operator> <partition_col_value>)-- Karşılaştırmadan önce bir skaler işlev uygular.partition (<partition_filter_condition1> AND|OR <partition_filter_condition2>)-- Koşulları mantıksal işleçlerle birleştirir.partition (NOT <partition_filter_condition>)-- Bir koşulu olumsuzlar.partition (<partition_filter_condition1>)[, partition (<partition_filter_condition2>), ...]-- Birden fazla filtre yan tümcesini virgülle ayırır.
Filtre koşulu bileşenleri:
partition_col: Bölüm sütunu adı.comparison_operator: Karşılaştırma işleci (örneğin=,!=,>,<,LIKEvb.).partition_col_value: Bölüm sütunu veri türüyle eşleşen karşılaştırma değeri veya düzenli ifade.scalar(): Karşılaştırmadan önce bölüm sütunu değerini işleyen skaler işlev.
Mantıksal işleçler:
NOT: Bölüm filtre koşulunun tümleyenini döndürür.ANDveyaOR: Birden fazla bölüm filtre koşulunu birleştirir.Virgülle ayrılan birden fazla bölüm filtre yan tümcesi,
ORmantığıyla birleştirilir.
Kullanım notları
TRUNCATE TABLEverileri kaldırır ancak tablo şemasını ve sütun yapısını korur. Tabloyu tamamen kaldırmak için DROP TABLE ifadesini kullanın. Belirli satırları bir koşula göre kaldırmak içinDELETEifadesini kullanın.TRUNCATE TABLEifadesi, satırları tek tek taramadığı içinDELETEifadesindenWHEREyan tümcesi olmadan daha hızlıdır. Büyük tablolar veya bölümler için tüm verileri kaldırmanız gerektiğindeTRUNCATE TABLEifadesini kullanın.MaxCompute, her bölümü tek tek belirtmeden bölümlenmiş verilerin toplu temizlenmesini sağlayan filtre koşullarıyla bölüm düzeyinde boşaltmayı destekler.
TRUNCATE TABLEbir DDL işlemidir. İfade başarıyla yürütüldükten sonra veri kaldırma işlemi geri alınamaz.
Sınırlamalar
TRUNCATE TABLEyalnızca tablolar için geçerlidir. Görünümler veya materyalleştirilmiş görünümlerde kullanılamaz.Bölümlenmiş tablolar için
PARTITIONyan tümcesi gereklidir. Bölümleri belirtmeden bölümlenmiş bir tablodaTRUNCATE TABLEçalıştırmak hata döndürür.Belirtilen bölümün mevcut olması gerekir. Bir bölüm mevcut değilse ifade hata döndürür.
Örnekler
Bölümlenmemiş bir tabloyu boşaltma
-- Remove all data from the sales table
TRUNCATE TABLE sales;
Bölümlenmemiş bir tabloyu boşaltma (uçtan uca)
Aşağıdaki örnek tam yaşam döngüsünü gösterir: tablo oluşturma, veri ekleme, tabloyu boşaltma ve sonucu doğrulama.
-- Create a simple table.
CREATE TABLE IF NOT EXISTS truncate_demo (id BIGINT, name STRING);
-- Insert sample data.
INSERT INTO TABLE truncate_demo VALUES (1, 'Alice'), (2, 'Bob'), (3, 'Carol');
-- Verify that the data exists.
SELECT * FROM truncate_demo;
Beklenen çıktı:
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
+----+-------+
-- Truncate the table to remove all data.
TRUNCATE TABLE truncate_demo;
-- Verify that the table is now empty.
SELECT * FROM truncate_demo;
Beklenen çıktı:
+----+------+
| id | name |
+----+------+
+----+------+
Tek bir bölümü boşaltma
-- Remove sales records for December 2013 in Hangzhou region
TRUNCATE TABLE sale_detail PARTITION (sale_date='201312', region='hangzhou');
Birden fazla bölümü boşaltma
-- Remove sales records for December 2013 in both Hangzhou and Shanghai regions
TRUNCATE TABLE sale_detail
PARTITION (sale_date='201312', region='hangzhou'),
PARTITION (sale_date='201312', region='shanghai');
Filtre koşulu kullanarak bölümleri boşaltma
-- Remove all partitions in Hangzhou region where sale_date starts with '2013'
TRUNCATE TABLE sale_detail PARTITION (sale_date LIKE '2013%' AND region='hangzhou');
Skaler işlev kullanarak bölümleri boşaltma
-- Remove partitions using a scalar function to process the partition column
TRUNCATE TABLE sale_detail PARTITION (scalar(sale_date) > '201300');
NOT işlecini kullanarak bölümleri boşaltma
-- Remove all partitions except those in Hangzhou region
TRUNCATE TABLE sale_detail PARTITION (NOT region='hangzhou');
OR mantığını kullanarak bölümleri boşaltma
-- Remove partitions matching multiple conditions (OR logic)
TRUNCATE TABLE sale_detail
PARTITION (region='hangzhou'),
PARTITION (region='shanghai');
İlgili komutlar
CREATE TABLE: Bölümlenmemiş tablolar, bölümlenmiş tablolar, harici tablolar veya kümeleme tabloları oluşturun
ALTER TABLE: Tablo işlemlerini değiştirin
DROP TABLE: Bölümlenmiş veya bölümlenmemiş tabloları silin
DESC TABLE/VIEW: MaxCompute iç tablolar, görünümler, materyalleştirilmiş görünümler, harici tablolar, kümeleme tabloları veya işlem tabanlı tablolar hakkında bilgi görüntüleyin
SHOW: SQL Veri Tanımlama Dili (DDL) deyimlerini görüntüleyin, bir projedeki tüm tabloları ve görünümleri listeleyin veya bir tablodaki tüm bölümleri listeleyin