MaxCompute tablolarında bölümler ekleyin, silin, birleştirin, yeniden adlandırın, inceleyin ve boşaltın.
İşlemlere genel bakış
İşlem | Açıklama | Rol | Platformlar |
Bölümlenmiş bir tabloya bir veya daha fazla bölüm ekler. | Alter izni gerektirir. | Aşağıdaki platformlar bu komutları destekler: | |
Bir bölümün | |||
Bölüm değerlerini yeniden adlandırır. | |||
Birden çok bölümü tek bir hedef bölümde birleştirir. | |||
Tablodaki her bölümü listeler. | |||
Belirli bir bölüm için meta verileri gösterir. | |||
Tablodan bir veya daha fazla bölümü kaldırır. | |||
Bölümleri silmeden içlerindeki verileri kaldırır. |
Sınırlamalar
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bölüm ekleme
Mevcut bir bölümlenmiş tabloya bir veya daha fazla bölüm ekleyin.
Kullanım notları
Çok düzeyli bölümlenmiş bir tablo için bölüm eklerken tüm bölüm anahtarı sütunlarının değerlerini belirtin.
Bu işlem yalnızca bölüm değerlerini ekler; bölüm anahtarı sütunları eklemez.
Söz dizimi
ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...];
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
Aşağıdaki örneklerde sale_detail adlı bölümlenmiş bir tablo kullanılmaktadır. Bu tabloyu oluşturmak için bkz. Tablo oluşturma ve silme.
CREATE TABLE IF NOT EXISTS sale_detail(
shop_name STRING,
customer_id STRING,
total_price DOUBLE)
PARTITIONED BY (sale_date STRING, region STRING);
-
Tek bir bölüm ekleme
Aralık 2025 için Hangzhou bölgesine ait bir bölüm ekleyin.
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202512', region='hangzhou'); -
Aynı anda birden çok bölüm ekleme
Aralık 2025 için Pekin ve Şanghay bölgelerine ait iki bölüm ekleyin.
ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='202512', region='beijing') PARTITION (sale_date='202512', region='shanghai'); -
Eksik bölüm belirtimi (hata)
Çok düzeyli bir bölüm anahtarının yalnızca bir kısmını belirtmek hata döndürür. Hem
sale_datehem deregiongereklidir.ALTER TABLE sale_detail ADD IF NOT EXISTS PARTITION (sale_date='20260111'); -- Error returned: -- FAILED: ODPS-0130071:[1,58] Semantic analysis exception - provided partition spec does not match table partition spec -
Delta Table'a bölüm ekleme
-- Create a Delta Table. CREATE TABLE delta_table_test_par ( pk BIGINT NOT NULL PRIMARY KEY, val BIGINT NOT NULL) PARTITIONED BY (dd STRING, hh STRING) TBLPROPERTIES ("transactional"="true"); -- Add a partition. ALTER TABLE delta_table_test_par ADD PARTITION (dd='01', hh='01'); CREATE TABLE delta_table_test_nonpar ( pk BIGINT NOT NULL PRIMARY KEY, val BIGINT NOT NULL) TBLPROPERTIES ("transactional"="true"); -
PK Delta Table özelliklerini değiştirme
-- Update the number of buckets for a partitioned PK Delta Table. ALTER TABLE delta_table_test_par SET TBLPROPERTIES("write.bucket.num"="64"); -- Update the number of buckets for a non-partitioned PK Delta Table. -- After the update, historical data is redistributed based on the new bucket count. ALTER TABLE delta_table_test_nonpar REWRITE TBLPROPERTIES("write.bucket.num"="128"); -- Update the retain property. This property specifies the number of hours -- for querying historical data states via Time Travel. ALTER TABLE delta_table_test_par SET TBLPROPERTIES("acid.data.retain.hours"="60");
Bölümleri ekledikten sonra SHOW PARTITIONS komutuyla doğrulayın. Bkz. Tüm bölümleri listeleme.
Bölüm güncelleme zamanını değiştirme
touch işlemi, bir bölümün LastModifiedTime değerini geçerli zamana sıfırlar ve yaşam döngüsü yeniden hesaplamasını tetikler.
Kullanım notları
Çok düzeyli bölümlenmiş bir tablo için tüm bölüm anahtarı sütunlarının değerlerini belirtin.
Söz dizimi
ALTER TABLE <table_name> TOUCH PARTITION (<pt_spec>);
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
-- Update the LastModifiedTime of a specific partition in the sale_detail table.
ALTER TABLE sale_detail TOUCH PARTITION (sale_date='202512', region='shanghai');
Bölüm değerini değiştirme
RENAME mevcut bir bölümün değerlerini değiştirir.
Kullanım notları
Bu işlem yalnızca bölüm değerlerini değiştirir; bölüm anahtarı sütunlarını yeniden adlandırmaz.
Çok düzeyli bölümlenmiş bir tablo için tüm bölüm anahtarı sütunlarının değerlerini belirtin.
Söz dizimi
ALTER TABLE <table_name> PARTITION (<pt_spec>) RENAME TO PARTITION (<new_pt_spec>);
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
-- Rename a partition in the sale_detail table.
ALTER TABLE sale_detail PARTITION (sale_date = '201312', region = 'hangzhou') RENAME TO PARTITION (sale_date = '201310', region = 'beijing');
Bölümleri birleştirme
MERGE PARTITION birden çok bölümü tek bir hedef bölümde birleştirir. Veriler hedefe taşınır ve kaynak bölümler silinir.
Kullanım notları
Foreign tables desteklenmez.
Kümelenmiş bir tablonun bölümlerinin birleştirilmesi, sonuçta elde edilen bölümden kümelemeyi kaldırır.
Tek seferde en fazla 4.000 bölüm birleştirilebilir.
Söz dizimi
ALTER TABLE <table_name> MERGE [IF EXISTS] PARTITION (<predicate>) [, PARTITION(<predicate2>) ...] OVERWRITE PARTITION (<fullpartitionSpec>) [PURGE];
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
Koşula göre bölümleri birleştirme
-- View current partitions.
SHOW PARTITIONS sale_detail;
-- Sample result:
-- sale_date=202512/region=beijing
-- sale_date=202512/region=shanghai
-- sale_date=202602/region=beijing
-- Merge all partitions where sale_date='202512' into a single destination partition.
ALTER TABLE sale_detail MERGE PARTITION(sale_date='202512') OVERWRITE PARTITION(sale_date='202601', region='hangzhou');
-- View partitions after the merge.
SHOW PARTITIONS sale_detail;
-- Sample result:
-- sale_date=202601/region=hangzhou
-- sale_date=202602/region=beijing
PURGE ile belirli bölümleri birleştirme
-- Merge two named partitions into a new destination partition.
ALTER TABLE sale_detail MERGE IF EXISTS
PARTITION(sale_date='202601', region='hangzhou'),
PARTITION(sale_date='202602', region='beijing')
OVERWRITE PARTITION(sale_date='202603', region='shanghai') PURGE;
-- View partitions after the merge.
SHOW PARTITIONS sale_detail;
-- Sample result:
-- sale_date=202603/region=shanghai
Tüm bölümleri listeleme
Tablodaki her bölümü listeler. Tablo yoksa veya bölümlenmemişse hata döndürür.
Söz dizimi
SHOW PARTITIONS <table_name>;
Parametreler
|
|
|
|
|
|
|
|
Örnekler
-- List all partitions in the sale_detail table.
SHOW PARTITIONS sale_detail;
-- Sample result:
-- sale_date=202603/region=shanghai
Bölüm bilgilerini görüntüleme
Boyut, oluşturma zamanı ve son değiştirilme zamanı dahil olmak üzere belirli bir bölüm için meta verileri görüntüler.
Söz dizimi
DESC <table_name> PARTITION (<pt_spec>);
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
-- View information for a specific partition.
DESC sale_detail PARTITION (sale_date='202603',region='shanghai');
-- Sample result:
+------------------------------------------------------------------------------------+
| PartitionSize: 0 |
+------------------------------------------------------------------------------------+
| CreateTime: 2026-01-13 11:35:49 |
| LastDDLTime: 2026-01-13 11:35:49 |
| LastModifiedTime: 2026-01-13 11:35:49 |
+------------------------------------------------------------------------------------+
OK
Bölüm silme
Tablodan bir veya daha fazla bölümü kaldırın. Belirli bölümler ada göre silinebilir veya toplu silme için filtre koşulları kullanılabilir.
Bölümlerin silinmesi depolama kullanımını azaltır. Eski bölümlerin otomatik olarak silinmesini sağlamak için Yaşam Döngüsü özelliğini kullanın.
Kullanım notları
Her bölüm filtre yan tümcesi yalnızca bir bölüm anahtarı sütununa başvurabilir.
Filtre ifadelerinde kullanılan işlevler yerleşik skaler işlevler olmalıdır.
Söz dizimi
Belirli bölümleri silme
-- Delete one partition.
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>;
-- Delete multiple partitions.
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <pt_spec>,PARTITION <pt_spec>[,PARTITION <pt_spec>....];
Filtre koşuluna göre bölümleri silme
ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <partition_filtercondition>;
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Bölüm filtre koşulu söz dizimi
Hem silme hem de boşaltma işlemleri aynı bölüm filtre söz dizimini destekler:
partition_filtercondition
: PARTITION (<partition_col> <relational_operators> <partition_col_value>)
| PARTITION (scalar(<partition_col>) <relational_operators> <partition_col_value>)
| PARTITION (<partition_filtercondition1> AND|OR <partition_filtercondition2>)
| PARTITION (NOT <partition_filtercondition>)
| PARTITION (<partition_filtercondition1>)[,PARTITION (<partition_filtercondition2>), ...]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Örnekler
Belirli bölümleri silme
-- Delete one partition.
ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='202603',region='shanghai');
-- Delete two partitions at once.
ALTER TABLE sale_detail DROP IF EXISTS PARTITION(sale_date='202412',region='hangzhou'),PARTITION(sale_date='202412',region='shanghai');
Filtre koşuluna göre bölümleri silme (tek düzeyli tablo)
-- Create a single-level partitioned table with sample partitions.
CREATE TABLE IF NOT EXISTS sale_detail_del(
shop_name STRING,
customer_id STRING,
total_price DOUBLE)
PARTITIONED BY (sale_date STRING);
-- Add partitions.
ALTER TABLE sale_detail_del ADD IF NOT EXISTS
PARTITION (sale_date= '201910') PARTITION (sale_date= '201911') PARTITION (sale_date= '201912')
PARTITION (sale_date= '202001') PARTITION (sale_date= '202002') PARTITION (sale_date= '202003')
PARTITION (sale_date= '202004') PARTITION (sale_date= '202005') PARTITION (sale_date= '202006')
PARTITION (sale_date= '202007');
-- Delete by comparison.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201911');
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date >= '202007');
-- Delete by pattern matching.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date LIKE '20191%');
-- Delete by value list.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date IN ('202002','202004','202006'));
-- Delete by range.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date BETWEEN '202001' AND '202007');
-- Delete using a scalar function.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(substr(sale_date, 1, 4) = '2020');
-- Delete with OR condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201912' OR sale_date >= '202006');
-- Delete with AND condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date > '201912' AND sale_date <= '202004');
-- Delete with NOT condition.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(NOT sale_date > '202004');
-- Multiple filter clauses separated by commas are combined with OR.
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date < '201911'), PARTITION(sale_date >= '202007');
-- Delete by regular expression.
ALTER TABLE sale_detail_del ADD IF NOT EXISTS
PARTITION (sale_date= '2019-10-05')
PARTITION (sale_date= '2019-10-06')
PARTITION (sale_date= '2019-10-07');
ALTER TABLE sale_detail_del DROP IF EXISTS PARTITION(sale_date RLIKE '2019-\\d+-\\d+');
Çok düzeyli bölümlenmiş bir tablodan bölümleri silme
-- Create a multi-level partitioned table with sample partitions.
CREATE TABLE IF NOT EXISTS region_sale_detail(
shop_name STRING,
customer_id STRING,
total_price DOUBLE)
PARTITIONED BY (sale_date STRING , region STRING );
-- Add partitions.
ALTER TABLE region_sale_detail ADD IF NOT EXISTS
PARTITION (sale_date= '201910',region = 'shanghai') PARTITION (sale_date= '201911',region = 'shanghai')
PARTITION (sale_date= '201912',region = 'shanghai') PARTITION (sale_date= '202001',region = 'shanghai')
PARTITION (sale_date= '202002',region = 'shanghai') PARTITION (sale_date= '201910',region = 'beijing')
PARTITION (sale_date= '201911',region = 'beijing') PARTITION (sale_date= '201912',region = 'beijing')
PARTITION (sale_date= '202001',region = 'beijing') PARTITION (sale_date= '202002',region = 'beijing');
-- Comma-separated filter clauses are combined with OR.
-- This deletes all partitions where sale_date < '201911' OR region = 'beijing'.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911'),PARTITION(region = 'beijing');
-- To combine conditions with AND, place both conditions in a single clause.
-- This deletes only partitions where sale_date < '201911' AND region = 'beijing'.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911', region = 'beijing');
Her filtre yan tümcesi yalnızca bir bölüm anahtarı sütununa başvurabilir. Tek bir filtre yan tümcesinde birden çok bölüm anahtarı sütununu birleştirmek için AND kullanılması hata döndürür.
-- The following statement fails because it references two partition key columns
-- (sale_date and region) with AND in a single filter clause.
ALTER TABLE region_sale_detail DROP IF EXISTS PARTITION(sale_date < '201911' AND region = 'beijing');
-- Error returned:
-- FAILED: ODPS-0130071:[1,82] Semantic analysis exception - invalid column reference region,
-- partition expression must have one and only one column reference
Bölüm boşaltma
Bölümlerin kendisini silmeden belirtilen bölümlerdeki tüm verileri kaldırın.
Tam bölüm adına veya filtre koşuluna göre boşaltma yapın.
Söz dizimi
Belirli bölümleri boşaltma
TRUNCATE TABLE <table_name> PARTITION <pt_spec>[, PARTITION <pt_spec>....];
Filtre koşuluna göre bölümleri boşaltma
TRUNCATE TABLE <table_name> PARTITION <partition_filtercondition>;
Parametreler
Parametre | Gerekli | Açıklama |
table_name | Evet | Bölümlenmiş tablonun adı. |
pt_spec | Evet | Boşaltılacak bölüm; biçimi |
partition_filtercondition | Hayır | Filtre tabanlı boşaltma kullanılırken gereklidir. Filtre koşulu büyük/küçük harfe duyarlı değildir. Söz dizimi: Parametreler:
|
Örnekler
Belirli bölümleri boşaltma
-- Truncate one partition.
TRUNCATE TABLE sale_detail PARTITION(sale_date='202601',region='hangzhou');
-- Truncate two partitions at once.
TRUNCATE TABLE sale_detail PARTITION(sale_date='202512',region='hangzhou'), PARTITION(sale_date='202512',region='shanghai');
Filtre koşuluna göre bölümleri boşaltma
-- Truncate all partitions where sale_date starts with '2025' and region is 'hangzhou'.
TRUNCATE TABLE sale_detail PARTITION(sale_date LIKE '2025%' AND region='hangzhou');
Bölümlenmemiş bir Delta Table'ı boşaltma
-- For non-partitioned tables only. Using this on a partitioned table returns an error.
TRUNCATE TABLE non_par_table;