Tüm Ürünler
Search
Belge Merkezi

MaxCompute:Partition operations

Son Güncelleme:Oct 14, 2026

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üm ekleme

Bölümlenmiş bir tabloya bir veya daha fazla bölüm ekler.

Alter izni gerektirir.

Aşağıdaki platformlar bu komutları destekler:

Bölüm güncelleme zamanını değiştirme

Bir bölümün LastModifiedTime değerini geçerli zamana sıfırlar ve yaşam döngüsünü yeniden hesaplar.

Bölüm değerini değiştirme

Bölüm değerlerini yeniden adlandırır.

Bölümleri birleştirme

Birden çok bölümü tek bir hedef bölümde birleştirir.

Tüm bölümleri listeleme

Tablodaki her bölümü listeler.

Bölüm bilgilerini görüntüleme

Belirli bir bölüm için meta verileri gösterir.

Bölüm silme

Tablodan bir veya daha fazla bölümü kaldırır.

Bölüm boşaltma

Bölümleri silmeden içlerindeki verileri kaldırır.

Sınırlamalar


Kısıtlama


Sınır


Bölüm anahtarı sütunları için desteklenen veri türleri


TINYINT, SMALLINT, INT, BIGINT, CHAR, VARCHAR, STRING


Tablo başına maksimum bölüm düzeyi sayısı


6


Tablo başına maksimum bölüm sayısı


60.000


Tek seferde sorgulanabilecek maksimum bölüm sayısı


10.000


İşlemsel tablolar üzerinde bölüm birleştirme


Desteklenmez

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


Parametre


Gerekli


Açıklama


table_name


Evet


Bölümlenmiş tablonun adı.


IF NOT EXISTS


Hayır


Bölüm zaten varsa hatayı bastırır.


pt_spec


Evet


Eklenecek bölüm; biçimi (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) şeklindedir. partition_col bir bölüm anahtarı sütunudur ve partition_col_value bunun değeridir. Bölüm anahtarı sütun adları büyük/küçük harfe duyarlı değildir. Bölüm değerleri büyük/küçük harfe duyarlıdır.

Ö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_date hem de region gereklidir.

    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


Parametre


Gerekli


Açıklama


table_name


Evet


Bölümlenmiş tablonun adı. Tablo yoksa hata döndürür.


pt_spec


Evet


Güncellenecek bölüm; biçimi (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) şeklindedir. partition_col bir bölüm anahtarı sütunudur ve partition_col_value bunun değeridir. Bölüm yoksa hata döndürür.

Ö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


Parametre


Gerekli


Açıklama


table_name


Evet


Bölümlenmiş tablonun adı.


pt_spec


Evet


Mevcut bölüm belirtimi; biçimi (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) şeklindedir. partition_col bir bölüm anahtarı sütunudur ve partition_col_value bunun değeridir. Bölüm yoksa hata döndürür.


new_pt_spec


Evet


Yeni bölüm belirtimi; biçimi (partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...) şeklindedir. partition_col bir bölüm anahtarı sütunudur ve new_partition_col_value yeni değerdir.

Ö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


Parametre


Gerekli


Açıklama


table_name


Evet


Bölümlenmiş tablonun adı.


IF EXISTS


Hayır


Koşulla eşleşen bölüm yoksa hatayı bastırır. Hiçbir bölüm nitelikli değilse yeni bir bölüm oluşturulmaz. Birleştirme sırasında eşzamanlı INSERT, RENAME veya DROP işlemleri yine de hata döndürür.


predicate


Evet


Kaynak bölümlerin karşılaması gereken koşul.


fullpartitionSpec


Evet


Hedef bölüm belirtimi.


PURGE


Hayır


Oturum dizinini temizler. Varsayılan olarak son üç gün içindeki günlükler temizlenir. Daha fazla bilgi için bkz. Purge.

Ö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


Parametre


Gerekli


Açıklama


table_name


Evet


Bölümlenmiş tablonun adı.

Ö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


Parametre


Gerekli


Açıklama


table_name


Evet


Bölümlenmiş tablonun adı.


pt_spec


Evet


İncelenecek bölüm; biçimi partition_col1=col1_value1, partition_col2=col2_value1... şeklindedir. Çok düzeyli bölümlenmiş bir tablo için tüm bölüm değerlerini belirtin.

Ö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


Parametre


Gerekli


Açıklama


table_name


Evet


Bölümlenmiş tablonun adı.


IF EXISTS


Hayır


Bölüm yoksa hatayı bastırır.


pt_spec


Evet


Silinecek bölüm; biçimi (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) şeklindedir. partition_col bir bölüm anahtarı sütunudur ve partition_col_value bunun değeridir. Bölüm anahtarı sütun adları büyük/küçük harfe duyarlı değildir. Bölüm değerleri büyük/küçük harfe duyarlıdır.


partition_filtercondition


Hayır


Filtre tabanlı silme kullanılırken gereklidir. Bkz. Bölüm filtre koşulu söz dizimi.

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


Öğe


Açıklama


partition_col


Bölüm anahtarı sütun adı.


relational_operators


Bir ilişkisel işleç. Ayrıntılar için bkz. İşleçler.


partition_col_value


Bölüm anahtarı sütun değeriyle karşılaştırılacak bir değer veya düzenli ifade. Veri türü bölüm anahtarı sütun türüyle eşleşmelidir.


scalar()


Yerleşik bir skaler işlev. Karşılaştırmadan önce bölüm anahtarı sütun değerini işler.


NOT, AND, OR


Tek bir filtre yan tümcesinde desteklenen mantıksal işleçler.


Virgülle ayrılmış yan tümceler


Virgülle ayrılmış birden çok filtre yan tümcesi OR işleciyle birleştirilir.

Ö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_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) şeklindedir. partition_col bir bölüm anahtarı sütunudur ve partition_col_value bunun değeridir. Bölüm anahtarı sütun adları büyük/küçük harfe duyarlı değildir. Bölüm değerleri büyük/küçük harfe duyarlıdır.

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:

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

Parametreler:

  • partition_col: Bölüm sütunu adı.

  • relational_operators: Bir ilişkisel işleç. Daha fazla bilgi için bkz. İşleçler.

  • partition_col_value: Bölüm sütunu için karşılaştırma değeri veya düzenli ifade. Veri türü bölüm sütunuyla eşleşmelidir.

  • scalar(): İlişkisel işleç kullanılarak partition_col_value ile karşılaştırmadan önce bölüm sütunu değerini dönüştüren bir skaler işlev.

  • Filtre koşulu aşağıdaki mantıksal işleçleri destekler:

    • NOT: Filtre koşulunun tamamlayıcısını döndürür.

    • AND / OR: Birden çok filtre koşulunu genel bir bölüm eşleştirme kuralında birleştirir.

  • Virgül (,): Birden çok PARTITION yan tümcesini ayırır. Virgülle ayrılmış yan tümceler OR mantığıyla değerlendirilir.

Ö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;

Başvurular