Tüm Ürünler
Search
Belge Merkezi

MaxCompute:ALTER TABLE

Son Güncelleme:Oct 10, 2026

Mevcut bir tablonun yapısını, özelliklerini veya bölümlerini değiştirir.

Kullanım notları

Şema evrimi; karmaşık veri türlerine sahip sütun ekleme, sütun silme, sütunları yeniden sıralama ve sütun veri türlerini değiştirme gibi işlemleri kapsar. Sütunları yeniden sıraladığınızda, sütun ekleyip ardından yeniden sıraladığınızda veya sütun sildiğinizde tablonun okuma ve yazma davranışı etkilenir ve aşağıdaki sınırlamalar geçerli olur:

  • İş tipi MapReduce 1.0 ise Graph görevleri değiştirilen tablodan veri okuyamaz veya tabloya veri yazamaz.

  • CUPID işleri için yalnızca aşağıdaki Spark sürümleri tablodan veri okuyabilir. Tabloya veri yazamazsınız.

    • Spark-2.3.0-odps0.34.0

    • Spark-3.1.1-odps0.34.0

  • PAI işleri tablodan veri okuyabilir ancak tabloya veri yazamaz.

  • Hologres işleri için 1,3'ten önceki bir Hologres sürümü kullanıyorsanız değiştirilen tabloyu yabancı tablo olarak referans aldığınızda tablodan okuma veya tabloya yazma işlemi yapamazsınız.

  • Şema evriminden sonra CLONE TABLE desteklenmez.

  • Şema evrimi gerçekleştiyse Streaming Tunnel hata bildirir.

Tablo sahibini değiştirin

ALTER TABLE <table_name> changeowner TO <new_owner>;

Parametreler:


Parametre


Zorunlu


Açıklama


table_name


Evet


Sahibini değiştirmek istediğiniz tablonun adı.


new_owner


Evet


Yeni sahibin hesap adı.

Örnek:

-- Transfer ownership of the test1 table to ALIYUN$xxx@aliyun.com.
ALTER TABLE test1 changeowner TO 'ALIYUN$xxx@aliyun.com';

Tablo açıklamasını değiştirin

ALTER TABLE <table_name> SET COMMENT '<new_comment>';

Parametreler:


Parametre


Zorunlu


Açıklama


table_name


Evet


Açıklamasını değiştirmek istediğiniz tablonun adı.


new_comment


Evet


Yeni açıklama metni.

Örnek:

ALTER TABLE sale_detail SET COMMENT 'new comments for table sale_detail';

Güncellenen açıklamayı doğrulamak için DESC <table_name> komutunu çalıştırın.

Bir tablonun LastModifiedTime değerini güncelleyin

touch işlemi LastModifiedTime değerini geçerli zamana ayarlar; bu da tablo için yaşam döngüsü hesaplamasını yeniden başlatır.

ALTER TABLE <table_name> touch;

Örnek:

ALTER TABLE sale_detail touch;

Bir tablonun kümeleme özelliklerini değiştirin

Bölümlendirilmiş bir tablo için kümeleme özellikleri ekler veya kaldırır.

Önemli

Kümeleme özellikleri yalnızca bölümlendirilmiş tablolar için değiştirilebilir. Bölümlendirilmemiş tablolar oluşturulduktan sonra kümeleme özelliklerini değiştiremez. Değişiklik yalnızca yeni bölümleri (INSERT OVERWRITE ile oluşturulanlar dahil) etkiler. Eski bölümler özgün kümeleme özelliklerini korur. Bu ifade yalnızca yeni bölümleri etkilediğinden bu ifadede bir bölüm belirtemezsiniz.

Sözdizimi:

-- Add hash cluster properties.
ALTER TABLE <table_name> [clustered BY (<col_name> [, <col_name>, ...]) [sorted BY (<col_name> [ASC | DESC]
  [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> buckets];

-- Remove hash or range cluster properties from a table.
ALTER TABLE <table_name> NOT clustered;

-- Add range cluster properties (bucket count is optional; the system auto-determines the optimal count).
ALTER TABLE <table_name> [RANGE clustered BY (<col_name> [, <col_name>, ...]) [sorted BY (<col_name> [ASC | DESC]
  [, <col_name> [ASC | DESC] ...])] INTO <number_of_buckets> buckets];

-- Remove range cluster properties from a partition or a table.
ALTER TABLE <table_name> NOT clustered;
ALTER TABLE <table_name> PARTITION [<pt_spec>] NOT clustered;

Parametreler CREATE TABLE içindekilerle aynıdır.

Örnek:

-- Create a partitioned table.
CREATE TABLE IF NOT EXISTS sale_detail(
  shop_name     STRING,
  customer_id   STRING,
  total_price   DOUBLE)
PARTITIONED BY (sale_date STRING, region STRING);

-- Add hash cluster properties. New partitions are stored with these settings.
ALTER TABLE sale_detail clustered BY (customer_id) sorted BY (customer_id) INTO 10 buckets;

Kümeleme türleriyle ilgili ayrıntılar için bkz. Hash Clustering ve Range clustering.

PK Delta Table özelliklerini değiştirin

-- Update the bucket count for a partitioned PK Delta Table.
ALTER TABLE <table_name> SET tblproperties("write.bucket.num"="64");

-- Update the bucket count for a non-partitioned PK Delta Table.-- Existing data is redistributed based on the new bucket count.
ALTER TABLE <table_name> REWRITE tblproperties("write.bucket.num"="128");

-- Update the retain property: the time range (in hours) for Time Travel queries.
ALTER TABLE <table_name> SET tblproperties("acid.data.retain.hours"="60");

Bir tabloyu yeniden adlandırın

Verileri değiştirmeden bir tabloyu yeniden adlandırır.

ALTER TABLE <table_name> RENAME TO <new_table_name>;

Parametreler:


Parametre


Zorunlu


Açıklama


table_name


Evet


Yeniden adlandırılacak tablo.


new_table_name


Evet


Yeni ad. Bu ada sahip bir tablo zaten varsa hata döndürülür.

Örnek:

ALTER TABLE sale_detail RENAME TO sale_detail_rename;

Yaşam döngüsü süresini değiştirin

Mevcut bölümlendirilmiş veya bölümlendirilmemiş bir tablonun yaşam döngüsü süresini değiştirir.

ALTER TABLE <table_name> SET LIFECYCLE <days>;

Parametreler:


Parametre


Zorunlu


Açıklama


table_name


Evet


Yaşam döngüsü süresini değiştirmek istediğiniz tablonun adı.


days


Evet


Yeni yaşam döngüsü süresi gün cinsinden. Pozitif bir tamsayı olmalıdır.

Örnek:

-- Modify the lifecycle of sale_detail_rename to 50 days.
ALTER TABLE sale_detail_rename SET LIFECYCLE 50;

Yaşam döngüsünü etkinleştirin veya devre dışı bırakın

Bir tablo veya belirli bir bölüm için yaşam döngüsünü etkinleştirir veya devre dışı bırakır.

ALTER TABLE <table_name> PARTITION [<pt_spec>] {enable|disable} LIFECYCLE;

Parametreler:


Parametre


Zorunlu


Açıklama


table_name


Evet


Tablonun adı.


pt_spec


Hayır


Hedef bölüm. Biçim: partition_col1=val1, partition_col2=val2, .... Çok düzeyli bölümlendirilmiş tablolar için tüm bölüm değerlerini belirtin.


enable


—


Geçerli yaşam döngüsü yapılandırmalarını kullanarak tablo ve bölümlerine yaşam döngüsü geri kazanımını yeniden uygular. İstenmeyen veri geri kazanımını önlemek için gerekirse etkinleştirmeden önce yaşam döngüsü yapılandırmalarını güncelleyin.


disable


—


Tablonun ve tüm bölümlerinin geri kazanılmasını engeller. Bu herhangi bir bölüm düzeyindeki enable ayarından önceliklidir. Yaşam döngüsü devre dışı bırakıldığında bile yaşam döngüsü yapılandırmaları ve bölüm düzeyindeki işaretler korunur ve hala değiştirilebilir.

Örnekler:

-- Example 1: Disable the lifecycle for the sale_detail_rename table.
ALTER TABLE sale_detail_rename disable LIFECYCLE;

-- Example 2: Add test partitions.
ALTER TABLE sale_detail_rename ADD IF NOT EXISTSPARTITION (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');

-- Disable the lifecycle for a single partition.
ALTER TABLE sale_detail_rename PARTITION (sale_date='201912', region='shanghai') disable LIFECYCLE;

Bölüm ekleyin

Mevcut bölümlendirilmiş bir tabloya bir veya daha fazla bölüm ekleyin.

Kullanım notları

  • Çok düzeyli bölümlendirilmiş 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özdizimi

ALTER TABLE <table_name> ADD [IF NOT EXISTS] PARTITION <pt_spec> [PARTITION <pt_spec> PARTITION <pt_spec>...];

Parametreler


Parametre


Zorunlu


Açıklama


table_name


Evet


Bölümlendirilmiş tablonun adı.


IF NOT EXISTS


Hayır


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


pt_spec


Evet


Eklenecek bölüm biçim (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). 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ümlendirilmiş bir tablo kullanılmaktadır. Bu tabloyu oluşturmak için bkz. Tabloları 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 ekleyin

    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');
  • Birden çok bölümü aynı anda ekleyin

    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 ekleyin

    -- 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ştirin

    -- 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 ile doğrulayın. Bkz. Tüm bölümleri listeleme.

Bölüm güncelleme saatini değiştirin

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ümlendirilmiş bir tablo için tüm bölüm anahtarı sütunlarının değerlerini belirtin.

Sözdizimi

ALTER TABLE <table_name> TOUCH PARTITION (<pt_spec>);

Parametreler


Parametre


Zorunlu


Açıklama


table_name


Evet


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


pt_spec


Evet


Güncellenecek bölüm biçim (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). 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ştirin

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ümlendirilmiş bir tablo için tüm bölüm anahtarı sütunlarının değerlerini belirtin.

Sözdizimi

ALTER TABLE <table_name> PARTITION (<pt_spec>) RENAME TO PARTITION (<new_pt_spec>);

Parametreler


Parametre


Zorunlu


Açıklama


table_name


Evet


Bölümlendirilmiş tablonun adı.


pt_spec


Evet


Mevcut bölüm belirtimi biçim (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). 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çim (partition_col1 = new_partition_col_value1, partition_col2 = new_partition_col_value2, ...). 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ştirin

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ı

  • Yabancı tablolar desteklenmez.

  • Kümelenmiş bir tablonun bölümlerini birleştirmek sonuçta oluşan bölümden kümelemeyi kaldırır.

  • Bir seferde en fazla 4.000 bölüm birleştirilebilir.

Sözdizimi

ALTER TABLE <table_name> MERGE [IF EXISTS] PARTITION (<predicate>) [, PARTITION(<predicate2>) ...] OVERWRITE PARTITION (<fullpartitionSpec>) [PURGE];

Parametreler


Parametre


Zorunlu


Açıklama


table_name


Evet


Bölümlendirilmiş tablonun adı.


IF EXISTS


Hayır


Koşulla eşleşen hiçbir bölüm yoksa hatayı bastırır. Uygun bölüm yoksa yeni 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ştirin

-- 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ştirin

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

Bölüm silin

Bir 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 silinmesi 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özdizimi

Belirli bölümleri silin

-- 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şuluyla bölümleri silin

ALTER TABLE <table_name> DROP [IF EXISTS] PARTITION <partition_filtercondition>;

Parametreler


Parametre


Zorunlu


Açıklama


table_name


Evet


Bölümlendirilmiş tablonun adı.


IF EXISTS


Hayır


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


pt_spec


Evet


Silinecek bölüm biçim (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...). 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ırken gereklidir. Bkz. Bölüm filtre koşulu sözdizimi.

Bölüm filtre koşulu sözdizimi

Hem silme hem de kesme işlemleri aynı bölüm filtre sözdizimini 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


İliş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 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 silin

-- 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şuluyla bölümleri silin (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ümlendirilmiş bir tablodan bölümleri silin

-- 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 AND kullanarak birden çok bölüm anahtarı sütununu birleştirmek 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

Sütun veya açıklama ekleyin

Mevcut bölümlendirilmemiş veya bölümlendirilmiş bir tabloya sütun veya açıklama ekleyebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları. MaxCompute STRUCT<x: STRING, y: BIGINT> ve MAP<STRING, STRUCT<x: DOUBLE, y: DOUBLE>> gibi STRUCT türündeki sütunların eklenmesini destekler.

  • Önkoşullar

    Şema evrimini etkinleştirmek için setproject odps.schema.evolution.enable=true; komutunu çalıştırın.

    • İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Kullanıcıya yerleşik yönetim rolü atama.

    • Etki süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.

  • Sözdizimi

    ALTER TABLE <table_name> 
      ADD COLUMNS [IF NOT EXISTS]
      (<col_name1> <type1> COMMENT ['<col_comment>']
      [, <col_name2> <type2> COMMENT '<col_comment>'...]
      );
  • Parametreler


    Parametre


    Zorunlu


    Açıklama


    table_name


    Evet


    Değiştirilecek tablonun adı. Yeni sütunlar tablonun sonuna eklenir.


    col_name


    Evet


    Yeni sütunun adı.


    type


    Evet


    Yeni sütunun veri türü.


    col_comment


    Hayır


    Yeni sütun için açıklama.

  • Örnekler

    • Örnek 1: sale_detail tablosuna iki sütun ekleyin.

      ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(customer_name STRING, education BIGINT);
    • Örnek 2: sale_detail tablosuna açıklamalı iki sütun ekleyin.

      ALTER TABLE sale_detail ADD COLUMNS (customer_name STRING COMMENT 'Customer', education BIGINT COMMENT 'Education' );
    • Örnek 3: sale_detail tablosuna karmaşık veri türünde bir sütun ekleyin.

      ALTER TABLE sale_detail ADD COLUMNS (region_info struct<province:string, area:string>);
    • Örnek 4: Zaten var olan bir sütunu eklemek için IF NOT EXISTS kullanırsanız komut sütunu tekrar eklemeden başarı mesajı döndürür.

      -- The statement is successful, but the ID column is not repeatedly added.
      ALTER TABLE sale_detail ADD COLUMNS IF NOT EXISTS(id bigint);
    • Örnek 5: Delta tablosuna sütun ekleyin.

      CREATE TABLE delta_table_test (pk BIGINT NOT NULL PRIMARY KEY, val BIGINT) 
        TBLPROPERTIES ("transactional"="true");
        
      ALTER TABLE delta_table_test ADD COLUMNS (val2 bigint);

Sütun silin

Mevcut bölümlendirilmemiş veya bölümlendirilmiş bir tablodan bir veya daha fazla sütunu silebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları.

  • Önkoşullar

    Şema evrimini etkinleştirmek için setproject odps.schema.evolution.enable=true; komutunu çalıştırın.

    • İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Kullanıcıya yerleşik yönetim rolü atama.

    • Etki süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.

  • Sözdizimi

    -- Delete a single column.
    ALTER TABLE <table_name> DROP COLUMN <col_name>;
    
    -- Delete multiple columns.
    ALTER TABLE <table_name> DROP COLUMNS <col_name1>[, <col_name2>...];
  • Parametreler

    • table_name: Zorunlu. Değiştirilecek tablonun adı.

    • col_name: Zorunlu. Silinecek sütunun adı.

  • Örnekler

    -- Example 1: Delete the customer_id column from the sale_detail table.
    ALTER TABLE sale_detail DROP COLUMNS customer_id;
    
    -- Example 2: Delete the shop_name and total_price columns from the sale_detail table.
    ALTER TABLE sale_detail DROP COLUMNS shop_name, total_price;

Sütun veri türlerini değiştirin

Mevcut bir sütunun veri türünü değiştirebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları.

  • Önkoşullar

    Şema evrimini etkinleştirmek için setproject odps.schema.evolution.enable=true; komutunu çalıştırın.

    • İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Kullanıcıya yerleşik yönetim rolü atama.

    • Etki süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.

  • Sözdizimi

    ALTER TABLE <table_name> CHANGE [COLUMN] <old_column_name> <new_column_name> <new_data_type>;
  • Parametreler


    Parametre


    Zorunlu


    Açıklama


    table_name


    Evet


    Sütunu içeren tablonun adı.


    old_column_name


    Evet


    Değiştirilecek sütunun adı.


    new_column_name


    Evet

    Sütunun yeni adı.

    old_column_name ile new_column_name aynı olabilir; bu sütun adının değiştirilmediği anlamına gelir. Ancak new_column_name old_column_name dışındaki herhangi bir sütun adıyla aynı olamaz.


    new_data_type


    Evet


    Sütun için yeni veri türü.

  • Örnek

    -- Change the data type of the id field in the sale_detail table from BIGINT to STRING.
    ALTER TABLE sale_detail CHANGE COLUMN id id STRING;
  • Desteklenen veri türü dönüşümleri

    Not

    Y dönüşümün desteklendiğini gösterir. N dönüşümün desteklenmediğini gösterir. - dönüşümün uygulanamadığını gösterir. Y() parantez içindeki koşul karşılanırsa dönüşümün desteklendiğini gösterir.

    Data type conversion table

Sütun sırasını değiştirin

Mevcut bölümlendirilmemiş veya bölümlendirilmiş bir tablodaki sütun sırasını değiştirebilirsiniz. Kısıtlamalar hakkında daha fazla bilgi için bkz. Kullanım notları.

  • Önkoşullar

    Şema evrimini etkinleştirmek için setproject odps.schema.evolution.enable=true; komutunu çalıştırın.

    • İzinler: Bu proje düzeyinde bir özelliktir. Bu komutu çalıştırmak için proje sahibi olmanız veya proje düzeyinde Super_Administrator ya da Admin rolüne sahip olmanız gerekir. Daha fazla bilgi için bkz. Kullanıcıya yerleşik yönetim rolü atama.

    • Etki süresi: Değişiklik yaklaşık 10 dakika içinde etkili olur.

  • Sözdizimi

    ALTER TABLE <table_name> CHANGE <old_column_name> <new_column_name> <column_type> AFTER <column_name>;
  • Parametreler


    Parametre


    Zorunlu


    Açıklama


    table_name


    Evet


    Değiştirilecek tablonun adı.


    old_column_name


    Evet


    Taşınacak sütunun adı.


    new_col_name


    Evet

    Sütunun yeni adı.

    new_col_name ile old_column_name aynı olabilir; bu sütun adının değiştirilmediği anlamına gelir. Ancak new_col_name old_column_name dışındaki herhangi bir sütun adıyla aynı olamaz.


    column_type


    Evet


    Sütunun özgün veri türü. Bu değiştirilemez.


    column_name


    Evet


    Sütunu yeniden sıralamak için column_name öğesinden sonra taşır.

  • Örnekler

    -- Change the name of the customer column in the sale_detail table to customer_id and move it after the total_price column.
    ALTER TABLE sale_detail CHANGE customer customer_id STRING AFTER total_price;
    
    -- Move the customer_id column in the sale_detail table after the total_price column without changing the column name.
    ALTER TABLE sale_detail CHANGE customer_id customer_id STRING AFTER total_price;

Sütun adını değiştirin

Mevcut bölümlendirilmemiş veya bölümlendirilmiş bir tablodaki bir sütunun adını değiştirebilirsiniz.

  • Sözdizimi

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> RENAME TO <new_col_name>;
  • Parametreler


    Parametre


    Zorunlu


    Açıklama


    table_name


    Evet


    Değiştirilecek tablonun adı.


    old_col_name


    Evet


    Sütunun mevcut adı. Sütun mevcut olmalıdır.


    new_col_name


    Evet


    Sütun için yeni ad. Sütun adı tablo içinde benzersiz olmalıdır.

  • Örnek

    -- Rename the customer_name column in the sale_detail table to customer.
    ALTER TABLE sale_detail CHANGE COLUMN customer_name RENAME TO customer;

Sütun açıklamasını değiştirin

Mevcut bölümlendirilmemiş veya bölümlendirilmiş bir tablodaki bir sütunun açıklamasını değiştirebilirsiniz.

  • Sözdizimi

    ALTER TABLE <table_name> CHANGE COLUMN <col_name> COMMENT '<col_comment>';
  • Parametreler


    Parametre


    Zorunlu


    Açıklama


    table_name


    Evet


    Değiştirilecek tablonun adı.


    col_name


    Evet


    Açıklamasını değiştirmek istediğiniz sütunun adı. Sütun mevcut olmalıdır.


    col_comment


    Evet


    Yeni açıklama geçerli bir dize olmalıdır. Maksimum uzunluk 1.024 bayttır.

  • Örnek

    -- Change the comment of the customer column in the sale_detail0113 table.
    ALTER TABLE sale_detail0113 CHANGE COLUMN customer COMMENT 'customer';

Sütun adını ve açıklamasını değiştirin

Bölümlendirilmemiş veya bölümlendirilmiş bir tablodaki bir sütunun adını ve açıklamasını değiştirebilirsiniz.

  • Sözdizimi

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> <new_col_name> <column_type> COMMENT '<col_comment>';
  • Parametreler


    Parametre


    Zorunlu


    Açıklama


    table_name


    Evet


    Değiştirilecek tablonun adı.


    old_col_name


    Evet


    Değiştirilecek sütunun mevcut adı. Sütun mevcut olmalıdır.


    new_col_name


    Evet


    Sütun için yeni ad. Sütun adı tablo içinde benzersiz olmalıdır.


    column_type


    Evet


    Sütunun veri türü.


    col_comment


    İsteğe bağlı


    Yeni açıklama. Maksimum uzunluk 1.024 bayttır.

  • Örnek

    -- Change the name of the customer column in the sale_detail table to customer_newname and change its comment to 'customer'.
    ALTER TABLE sale_detail CHANGE COLUMN customer customer_newname STRING COMMENT 'customer';

Sütunun NOT NULL özelliğini değiştirin

Bölüm anahtarı olmayan bir sütunun NOT NULL özelliğini değiştirebilirsiniz. Örneğin bölüm anahtarı olmayan bir sütun NULL değerlere izin vermeyecek şekilde tanımlanmışsa bu komutu kullanarak NULL değerlere izin verecek şekilde değiştirebilirsiniz.

Bu işlem geri alınamaz: NULL değerlere izin verdikten sonra bir sütunu NULL değerlere izin vermeyecek şekilde değiştiremezsiniz.

  • Nullable özelliğini görüntülemek ve sütunun NULL değerlere izin verip vermediğini belirlemek için DESC EXTENDED table_name; komutunu çalıştırın:

    • Nullable değeri true ise NULL değerlere izin verilir.

    • Nullable değeri false ise NULL değerlere izin verilmez.

  • Sözdizimi

    ALTER TABLE <table_name> CHANGE COLUMN <old_col_name> NULL;
  • Parametreler


    Parametre


    Zorunlu


    Açıklama


    table_name


    Evet


    Değiştirilecek tablonun adı.


    old_col_name


    Evet


    Değiştirilecek bölüm anahtarı olmayan sütunun adı. Sütun mevcut olmalıdır.

  • Örnek

    -- Create a partitioned table in which the id column cannot be NULL.
    CREATE TABLE null_test(id INT NOT NULL, name STRING) PARTITIONED BY (ds string);
    
    -- View table properties.
    DESC EXTENDED null_test;
    -- The following result is returned:
    +------------------------------------------------------------------------------------+
    | Native Columns:                                                                    |
    +------------------------------------------------------------------------------------+
    | Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
    +------------------------------------------------------------------------------------+
    | id       | int    |       |               | false    | NULL         |              |
    | name     | string |       |               | true     | NULL         |              |
    +------------------------------------------------------------------------------------+
    | Partition Columns:                                                                 |
    +------------------------------------------------------------------------------------+
    | ds              | string     |                                                     |
    +------------------------------------------------------------------------------------+
    
    -- Allow the id column to be NULL.
    ALTER TABLE null_test CHANGE COLUMN id NULL;
    -- View table properties.
    DESC EXTENDED null_test;
    -- The following result is returned:
    +------------------------------------------------------------------------------------+
    | Native Columns:                                                                    |
    +------------------------------------------------------------------------------------+
    | Field    | Type   | Label | ExtendedLabel | Nullable | DefaultValue | Comment      |
    +------------------------------------------------------------------------------------+
    | id       | int    |       |               | true     | NULL         |              |
    | name     | string |       |               | true     | NULL         |              |
    +------------------------------------------------------------------------------------+
    | Partition Columns:                                                                 |
    +------------------------------------------------------------------------------------+
    | ds              | string     |                                                     |
    +------------------------------------------------------------------------------------+

İşlemsel tablo dosyalarını sıkıştırın

İşlemsel bir tablonun temel fiziksel depolaması doğrudan okunamayan temel dosyalardan ve delta dosyalardan oluşur. İşlemsel bir tabloda update veya delete işlemleri gerçekleştirildiğinde yalnızca delta dosyalar eklenir. Temel dosyalar değiştirilmez. Sonuç olarak daha fazla güncelleme veya silme işlemi daha yüksek depolama tüketimine ve daha yüksek sorgu maliyetlerine yol açar.

Aynı tablo veya bölüm üzerinde birden çok update veya delete işlemi gerçekleştirmek çok sayıda delta dosyası oluşturur. Verileri okurken sistem hangi satırların güncellendiğini veya silindiğini belirlemek için bu delta dosyalarını yükler. Çok sayıda delta dosyası veri okuma performansını düşürür. Bu durumda depolamayı azaltmak ve veri okuma performansını artırmak için temel dosyaları ve delta dosyaları sıkıştırın.

  • Sözdizimi

    ALTER TABLE <table_name> [PARTITION (<partition_key> = '<partition_value>' [, ...])] compact {minor|major};
  • Parametreler

    • table_name: Zorunlu. Dosyaları sıkıştırılacak işlemsel tablonun adı.

    • partition_key: İsteğe bağlı. İşlemsel tablo bölümlendirilmiş bir tabloysa bölüm sütunu adı.

    • partition_value: İsteğe bağlı. İşlemsel tablo bölümlendirilmiş bir tabloysa bölüm sütunu değeri.

    • major|minor: En az birini belirtin. Farklar aşağıdaki gibidir:

      • minor: Temel dosyaları ve ilişkili tüm delta dosyalarını birleştirerek delta dosyalarını ortadan kaldırır.

      • major: Yalnızca temel dosyaları ve ilişkili tüm delta dosyalarını birleştirerek delta dosyalarını ortadan kaldırmakla kalmaz aynı zamanda tablonun temel dosyaları arasındaki küçük dosyaları da birleştirir. Temel dosyalar küçükse (32 MB'den az) veya delta dosyalar mevcutsa bu tabloda insert overwrite işlemi gerçekleştirmeye eşdeğerdir. Ancak temel dosyalar yeterince büyükse (32 MB veya daha fazla) ve delta dosyalar yoksa yeniden yazma gerçekleşmez.

  • Örnekler

    • Örnek 1: acid_delete işlemsel tablosunun dosyalarını sıkıştırın.

      ALTER TABLE acid_delete compact minor;

      Örnek çıktı:

      Summary:
      Nothing found to merge, set odps.merge.cross.paths=true IF cross path merge is permitted.
      OK
    • Örnek 2: acid_update_pt işlemsel tablosunun dosyalarını sıkıştırın.

      ALTER TABLE acid_update_pt PARTITION (ds = '2019') compact major;

      Örnek çıktı:

      Summary:
      table name: acid_update_pt /ds=2019  instance count: 2  run time: 6
        before merge, file count:        8  file size: 2613  file physical size: 7839
         after merge, file count:        2  file size: 679  file physical size: 2037
      
      OK

Küçük dosyaları birleştirin

Dağıtılmış bir dosya sistemi verileri bloklar halinde depolar. Blok boyutundan (64 MB) küçük dosyalara küçük dosyalar denir. Dağıtılmış sistemler kaçınılmaz olarak SQL veya diğer dağıtılmış motor hesaplama sonuçları ve Tunnel veri alımı çıkışı gibi küçük dosyalar üretir. Küçük dosyaların birleştirilmesi hesaplama performansını artırabilir.

Sözdizimi

ALTER TABLE <tablename> [PARTITION(<partition_key>=<partition_value>)] MERGE SMALLFILES;
  • Parametreler

    • table_name: Zorunlu. Dosyaları birleştirilecek tablonun adı.

    • partition_key: İsteğe bağlı. Tablo bölümlendirilmiş bir tabloysa bölüm sütunu adı.

    • partition_value: İsteğe bağlı. Tablo bölümlendirilmiş bir tabloysa bölüm sütunu değeri.

  • Örnekler

    SET odps.merge.cross.paths=true;
    SET odps.merge.smallfile.filesize.threshold=128;
    SET odps.merge.max.filenumber.per.instance = 2000;
    ALTER TABLE tbcdm.dwd_tb_log_pv_di PARTITION (ds='20151116') MERGE smallfiles;

Küçük dosyaları birleştirme özelliği hesaplama kaynakları gerektirir. Kullandıkça öde örnekler için bu işlem ücretlendirilir. Faturalandırma kuralları SQL kullandıkça öde faturalandırmasıyla aynıdır. Daha fazla bilgi için bkz. Hesaplama fiyatlandırması (kullandıkça öde).

Daha fazla bilgi için bkz. Küçük dosyaları birleştirme.

İlgili ifadeler

  • CREATE TABLE: Bölümlendirilmemiş tablo, bölümlendirilmiş tablo, harici tablo veya kümelenmiş tablo oluşturur.

  • TRUNCATE TABLE: Belirtilen tablodaki verileri keser.

  • DROP TABLE: Bölümlendirilmiş veya bölümlendirilmemiş tabloyu siler.

  • DESC TABLE/VIEW: MaxCompute iç tabloları, görünümler, materyalleştirilmiş görünümler, harici tablolar, kümelenmiş tablolar veya işlemsel tablolar hakkında bilgileri görüntüler.

  • SHOW: Bir tablonun SQL DDL ifadesini görüntüler, projedeki tüm tabloları ve görünümleri listeler veya bir tablonun tüm bölümlerini listeler.\