Aracılığıyla paylaş


ALTER TABLE

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime

Bir tablonun şemasını veya özelliklerini değiştirir.

Delta Lake'te tür değişiklikleri veya sütunları yeniden adlandırmak için bkz. verileriyeniden yazma.

Tablo veya sütundaki açıklamayı değiştirmek için COMMENT ONde kullanabilirsiniz.

STREAMING TABLEdeğiştirmek için ALTER STREAMING TABLEkullanın.

Tablo önbelleğe alınırsa, komut tablonun önbelleğe alınmış verilerini ve ona başvuran tüm bağımlılarını temizler. Tabloya veya bağımlılara bir sonraki sefer erişildiğinde önbellek gecikmeli olarak doldurulur.

Uyarı

Var olan bir Delta tablosuna sütun eklediğinizde, DEFAULT değeri tanımlayamazsınız. Delta tablolarına eklenen tüm sütunlar, var olan satırlar için NULL olarak değerlendirilir. Sütun ekledikten sonra isteğe bağlı olarak sütun için varsayılan bir değer tanımlayabilirsiniz, ancak bu yalnızca tabloya eklenen yeni satırlar için uygulanır. Aşağıdaki sözdizimini kullanın:

ALTER TABLE table_name ALTER COLUMN column_name SET DEFAULT default_expression

Yabancı tablolarda yalnızca ALTER TABLE SET OWNER ve ALTER TABLE RENAME TO'i gerçekleştirebilirsiniz.

Gerekli izinler

Unity Kataloğu'nu kullanıyorsanız şunlar için MODIFY iznine sahip olmalısınız:

  • ALTER COLUMN
  • ADD COLUMN
  • DROP COLUMN
  • SET TBLPROPERTIES
  • UNSET TBLPROPERTIES
  • Değiştir PREDICTIVE OPTIMIZATION

Unity Kataloğu kullanıyorsanız şu MANAGE iznine veya sahipliğe sahip olmanız gerekir:

  • SET OWNER TO

Diğer tüm işlemler tablonun sahipliğini gerektirir.

Sözdizimi

ALTER TABLE table_name
    { RENAME TO clause |
      ADD COLUMN clause |
      ALTER COLUMN clause |
      DROP COLUMN clause |
      RENAME COLUMN clause |
      DEFAULT COLLATION clause |
      ADD CONSTRAINT clause |
      DROP CONSTRAINT clause |
      DROP FEATURE clause |
      ADD PARTITION clause |
      DROP PARTITION clause |
      PARTITION SET LOCATION clause |
      RENAME PARTITION clause |
      RECOVER PARTITIONS clause |
      SET { ROW FILTER clause } |
      DROP ROW FILTER |
      SET TBLPROPERTIES clause |
      UNSET TBLPROPERTIES clause |
      SET SERDE clause |
      SET LOCATION clause |
      SET OWNER TO clause |
      SET SERDE clause |
      SET TAGS clause |
      UNSET TAGS clause |
      CLUSTER BY clause |
      PREDICTIVE OPTIMIZATION clause}

Parametreler

  • table_name

    Değiştirilen tabloyu tanımlar. Ad bir zamansal belirtim veya seçenek belirtimi içermemelidir. Tablo bulunamazsa Azure Databricks bir TABLE_OR_VIEW_NOT_FOUND hatası oluşturur.

  • RENAME TO to_table_name

    Tabloyu yeniden adlandırır.

    • to_table_name

      Yeni tablo adını tanımlar. Ad bir zamansal belirtim veya seçenek belirtimi içermemelidir.

      Unity Kataloğu tabloları için, to_table_name aynı katalogda table_name içinde olmalıdır. Diğer tablolar için, to_table_name ile table_name aynı şemada olmalıdır.

      Nitelenmemişse, to_table_name geçerli şema ile otomatik olarak nitelenir.

  • EKLEMEK COLUMN

    Tabloya bir veya daha fazla sütun ekler.

  • ADD CONSTRAINT

    Tabloya bir denetim kısıtlaması, bilgi amaçlı yabancı anahtar kısıtlaması veya bilgi amaçlı birincil anahtar kısıtlaması ekler.

    Yabancı anahtarlar ve birincil anahtarlar yalnızca Unity Kataloğu'ndaki tablolar için desteklenir, hive_metastore kataloğunda desteklenmez.

  • DEFAULT COLLATION sıralama_adı

    Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi Databricks Runtime 16.3 ve üzeri

    Yeni STRING sütunları için tablonun varsayılan harmanlamasını değiştirir. Varolan sütunlar bu yan tümceden etkilenmez. Var olan bir sütunun harmanlamasını değiştirmek için ALTER TABLE ... ALTER COLUMN ... COLLATE collation_namekullanın.

  • DROP CONSTRAINT

    Tablodan birincil anahtarı, yabancı anahtarı veya kontrol kısıtlamasını kaldırır.

  • DROP FEATURE feature_name [ TRUNCATE HISTORY ]

    Şunun için geçerlidir:evet olarak işaretlenmiş Databricks Runtime 14.3 LTS ve üzerini denetleyin

    Eski destek DROP FEATURE için Databricks Runtime 14.3 LTS'den itibaren kullanılabilir. Eski işlevlerin belgeleri için bkz. Delta tablosu özelliklerini bırakma (eski).

    Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL evet olarak işaretlendi Databricks Runtime 16.3 ve üzeri

  • Azure Databricks, eski davranışın yerini alan tüm DROP FEATURE komutlar için Databricks Runtime 16.3 ve üzerini kullanmanızı önerir.

    Delta Lake tablosundan bir özelliği kaldırır.

    Bir özelliğin kaldırılması, tablo protokolünde yazıcı özelliğinin checkpointProtection eklenmesine neden olabilir. Daha fazla bilgi için bkz. Protokol uyumluluğu içinDelta tablosu özelliklerini ve Tablo özelliklerini bırakma.

    • feature_name

      değişmez veya tanımlayıcı biçimindeki bir özelliğin adı, Azure Databricks tarafından anlaşılmalı ve tabloda desteklenmelidir.

      Özellik tabloda mevcut değilse, Azure Databricks DELTA_FEATURE_DROP_FEATURE_NOT_PRESENToluşturur.

    • GEÇMIŞİ KISALT

      Geçmişi keserek özelliklerin kaldırılması. Bunun için iki aşamalı bir işlem gerekir:

Özelliklerin kırpılarak kaldırılması için iki adımlı bir işlem gerekir:

  • İlk çağrı özelliğin izlerini temizler ve kısmi başarı hakkında sizi bilgilendirmektedir.

  • Ardından, kaldırma işlemini tamamlamak için ifadeyi yeniden yürütmeden önce bekletme süresi sona erene kadar bekleyin.

    İkinci çağrıyı çok erken başlatırsanız Azure Databricks DELTA_FEATURE_DROP_WAIT_FOR_RETENTION_PERIOD veya DELTA_FEATURE_DROP_HISTORICAL_VERSIONS_EXIST başlatır.

    Tablo geçmişini kesmek, DESCRIBE HISTORY gerçekleştirme ve zaman yolculuğuyla ilgili sorguları yürütme yeteneğinizi sınırlar.

  • EKLEMEK PARTITION

    Tabloya bir veya daha fazla bölümlendirme ekler.

  • DÜŞÜRMEK PARTITION

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

  • PARTITION ... SET KONUM

    Bir bölümün konumunu ayarlar.

  • YENİ ADLANDIR PARTITION

    Bölümün anahtarlarını değiştirir.

  • BÖLÜMLERİ KURTARMA

    Azure Databricks'e tablonun konumunu taramasını ve doğrudan dosya sistemine eklenmiş tüm dosyaları tabloya eklemesini ister.

  • SET ROW FILTER madde

    Şunlar için geçerlidir:işaretli evet Databricks SQL işaretli evet Databricks Runtime 12.2 LTS ve üzeri işaretli evet yalnızca Unity Kataloğu

    Tabloya bir satır filtresi işlevi ekler. Tabloya gelen sonraki tüm sorgular, işlevin TRUE değerini değerlendirdiği satırların bir alt kümesini alır. Bu, işlevin belirli satırları filtreleyip filtrelemeyeceğini belirlemek için çağıran kullanıcının kimlik veya grup üyeliklerini incelediği ayrıntılı erişim denetimi amaçları için yararlı olabilir.

  • DROP ROW FILTER

    Şunlar için geçerlidir:yalnızca Unity Kataloğu evet olarak işaretlenmiş onay kutusunu işaretleyin

    Tablodaki satır filtresini varsa kaldırır. Gelecekteki sorgular, otomatik filtreleme olmadan tablodaki tüm satırları döndürür.

  • SET TBLPROPERTIES

    Bir veya daha fazla kullanıcı tanımlı özelliği ayarlar veya sıfırlar.

  • TBLPROPERTIES'I KALDıRMA

    Bir veya daha fazla kullanıcı tanımlı özelliği kaldırır.

  • SET LOCATION

    Tablonun konumunu taşır.

    SET LOCATION path
    
    • LOCATION path

      path sabit STRING olmalıdır. Tablonun yeni konumunu belirtir.

      Dosyalar özgün konumlarında kalacak ve yeni konuma taşınmayacak.

  • [ SET ] OWNER TO müdür

    Tablonun sahipliği principal'a aktarılır.

    Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 11.3 LTS ve üzeri

    SET isteğe bağlı anahtar sözcük olarak izin verilir.

  • SET TAGS ( { tag_name = tag_value } [, ...] )

    Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 13.3 LTS ve üzeri

    Tabloya etiket uygulama. Tabloya etiket eklemek için APPLY TAG izniniz olmalıdır.

    • tag_name

      Bir sabit STRING. tag_name tablo veya sütun içinde benzersiz olmalıdır.

    • tag_value

      Bir sabit STRING.

  • UNSET TAGS ( tag_name [, ...] )

    Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 13.3 LTS ve üzeri

    Tablodan etiketleri kaldırın. Tablodan etiketleri kaldırmak için APPLY TAG izniniz olması gerekir.

    • tag_name

      Bir sabit STRING. tag_name tablo veya sütun içinde benzersiz olmalıdır.

  • CLUSTER BY madde

    Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş Databricks Runtime 13.3 LTS ve üzeri

    Delta Lake tablosu için kümeleme stratejisini ekler, değiştirir veya bırakır.

  • { ENABLE | DISABLE | INHERIT } PREDICTIVE OPTIMIZATION

    Şunlar için geçerlidir:işaretli evet Databricks SQL işaretli evet Databricks Runtime 12.2 LTS ve üzeri işaretli evet yalnızca Unity Kataloğu

    Yönetilen Delta Lake tablosunu istenen tahmine dayalı iyileştirme ayarıyla değiştirir.

    Varsayılan olarak, tablolar oluşturulduğunda davranış şemadan INHERIT yapmak şeklindedir.

    Tahmine dayalı iyileştirme açıkça etkinleştirildiğinde veya etkin durumda devralındığında, OPTIMIZE ve VACUUM Azure Databricks tarafından uygun görüldüğü şekilde tabloda otomatik olarak çağrılır. Daha fazla ayrıntı için bkz. Unity Kataloğu tarafından yönetilen tablolar için tahmine dayalı optimizasyon.

Örnekler

Delta Lake kısıtlama ekleme ve sütun örneklerini değiştirme için bkz.

-- RENAME table
> DESCRIBE student;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

> ALTER TABLE Student RENAME TO StudentInfo;

-- After Renaming the table
> DESCRIBE StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

-- RENAME partition
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=10
    age=11
    age=12

> ALTER TABLE default.StudentInfo PARTITION (age='10') RENAME TO PARTITION (age='15');

-- After renaming Partition
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

-- Add new columns to a table
> DESCRIBE StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

> ALTER TABLE StudentInfo ADD columns (LastName string, DOB timestamp);

-- After Adding New columns to the table
> DESCRIBE StudentInfo;
                col_name data_type comment
 ----------------------- --------- -------
                    name    string    NULL
                  rollno       int    NULL
                LastName    string    NULL
                     DOB timestamp    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

-- Add a new partition to a table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18);

-- After adding a new partition to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18

-- Drop a partition from the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18

> ALTER TABLE StudentInfo DROP IF EXISTS PARTITION (age=18);

-- After dropping the partition of the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

-- Adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15

> ALTER TABLE StudentInfo ADD IF NOT EXISTS PARTITION (age=18) PARTITION (age=20);

-- After adding multiple partitions to the table
> SHOW PARTITIONS StudentInfo;
 partition
 ---------
    age=11
    age=12
    age=15
    age=18
    age=20

-- ALTER or CHANGE COLUMNS
> DESCRIBE StudentInfo;
                col_name data_type comment
+-----------------------+---------+-------
                    name    string    NULL
                  rollno       int    NULL
                LastName    string    NULL
                     DOB timestamp    NULL
                     age       int    NULL
 # Partition Information
              # col_name data_type comment
                     age       int    NULL

ALTER TABLE StudentInfo ALTER COLUMN name COMMENT "new comment";

--After ALTER or CHANGE COLUMNS
> DESCRIBE StudentInfo;
                col_name data_type     comment
 ----------------------- --------- -----------
                    name    string new comment
                  rollno       int        NULL
                LastName    string        NULL
                     DOB timestamp        NULL
                     age       int        NULL
 # Partition Information
              # col_name data_type     comment
                     age       int        NULL

-- RENAME COLUMN
> ALTER TABLE StudentInfo RENAME COLUMN name TO FirstName;

--After RENAME COLUMN
> DESCRIBE StudentInfo;
                col_name data_type     comment
 ----------------------- --------- -----------
               FirstName    string new comment
                  rollno       int        NULL
                LastName    string        NULL
                     DOB timestamp        NULL
                     age       int        NULL
 # Partition Information
              # col_name data_type     comment
                     age       int        NULL

-- Change the file Location
> ALTER TABLE dbx.tab1 PARTITION (a='1', b='2') SET LOCATION '/path/to/part/ways';

-- SET SERDE/ SERDE Properties (DBR only)
> ALTER TABLE test_tab SET SERDE 'org.apache.hadoop.hive.serde2.columnar.LazyBinaryColumnarSerDe';

> ALTER TABLE dbx.tab1 SET SERDE 'org.apache.hadoop' WITH SERDEPROPERTIES ('k' = 'v', 'kay' = 'vee');

-- SET TABLE PROPERTIES
> ALTER TABLE dbx.tab1 SET TBLPROPERTIES ('winner' = 'loser');

-- DROP TABLE PROPERTIES
> ALTER TABLE dbx.tab1 UNSET TBLPROPERTIES ('winner');

-- Drop the "deletion vectors" from a Delta table
> ALTER TABLE my_table DROP FEATURE deletionVectors;

-- 24 hours later
> ALTER TABLE my_table DROP FEATURE deletionVectors TRUNCATE HISTORY;

-- Applies three tags to the table named `test`.
> ALTER TABLE test SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3');

-- Removes three tags from the table named `test`.
> ALTER TABLE test UNSET TAGS ('tag1', 'tag2', 'tag3');

-- Applies three tags to table `main.schema1.test` column `col1`.
> ALTER TABLE main.schema1.test ALTER COLUMN col1 SET TAGS ('tag1' = 'val1', 'tag2' = 'val2', 'tag3' = 'val3');

-- Removes three tags from table `main.schema1.test` column `col1`.
> ALTER TABLE main.schema1.test ALTER COLUMN col1 UNSET TAGS ('tag1', 'tag2', 'tag3');

-- Enables predictive optimization for my_table
> ALTER TABLE my_table ENABLE PREDICTIVE OPTIMIZATION;

-- Alter multiple columns in a single statement
-- Create a table with 3 columns
> CREATE TABLE my_table (num INT, str STRING, bool BOOLEAN) TBLPROPERTIES('delta.feature.allowColumnDefaults' = 'supported')
> DESCRIBE TABLE my_table;
  col_name    data_type     comment
  --------    ---------     -------
       num          int        null
       str       string        null
       bool      boolean       null

-- Update comments on multiple columns
> ALTER TABLE table ALTER COLUMN
   num COMMENT 'number column',
   str COMMENT 'string column';

> DESCRIBE TABLE my_table;
  col_name    data_type      comment
  --------    ---------   -------------
       num          int   number column
       str       string   string column
      bool      boolean            null

-- Can mix different types of column alter
> ALTER TABLE table ALTER COLUMN
   bool COMMENT 'boolean column',
   num AFTER bool,
   str AFTER num,
   bool SET DEFAULT true;

> DESCRIBE TABLE my_table;
  col_name    data_type      comment
  --------    ---------   --------------
      bool      boolean   boolean column
       num          int    number column
       str       string    string column