ALTER TABLE

Dotyczy:sprawdź oznaczone jako tak Zaznaczone pole wyboru SQL usługi Databricks oznaczone jako tak Databricks Runtime

Zmienia schemat lub właściwości tabeli.

Aby uzyskać informacje o zmianach typu lub zmianie nazw kolumn w usłudze Delta Lake, zobacz Ponowne zapisywanie danych.

Aby zmienić komentarz w tabeli, użyj funkcji COMMENT ON.

Jeśli tabela jest buforowana, polecenie czyści buforowane dane tabeli i wszystkie jej zależności, które się do niej odwołują. Pamięć podręczna zostanie wypełniona z opóźnieniem, gdy tabela lub zależności będą uzyskiwane przy następnym dostępie.

Wymagane uprawnienia

Jeśli używasz wykazu aparatu Unity, musisz mieć MODIFY uprawnienia do:

  • ALTER COLUMN
  • DODAJ KOLUMNĘ
  • UPUŚĆ KOLUMNĘ
  • SET TBLPROPERTIES
  • UNSET TBLPROPERTIES

Wszystkie inne operacje wymagają własności tabeli.

Składnia

ALTER TABLE table_name
   { RENAME TO clause |
     ADD COLUMN clause |
     ALTER COLUMN clause |
     DROP COLUMN clause |
     RENAME COLUMN clause |
     ADD CONSTRAINT clause |
     DROP CONSTRAINT clause |
     ADD PARTITION clause |
     DROP PARTITION clause |
     RENAME PARTITION clause |
     RECOVER PARTITIONS clause |
     SET TBLPROPERTIES clause |
     UNSET TBLPROPERTIES clause |
     SET SERDE clause |
     SET LOCATION clause |
     SET OWNER TO clause }

Parametry

  • Nazwa_tabeli

    Identyfikuje tabelę, która jest zmieniana. Nazwa nie może zawierać specyfikacji czasowej. Jeśli nie można odnaleźć tabeli usługi Azure Databricks, wystąpi błąd TABLE_OR_VIEW_NOT_FOUND .

  • ZMIEŃ NAZWĘ NA TO_TABLE_NAME

    Zmienia nazwę tabeli w tym samym schemacie.

  • DODAJ KOLUMNĘ

    Ta klauzula nie jest obsługiwana w przypadku JDBC źródeł danych.

    Dodaje co najmniej jedną kolumnę do tabeli lub pól do istniejących kolumn w tabeli usługi Delta Lake.

    { ADD [COLUMN | COLUMNS ]
      ( { { column_identifier | field_name } data_type
          [DEFAULT clause] [COMMENT comment] [FIRST | AFTER identifier]
          } [, ...] ) }
    
    • column_identifier

      Nazwa kolumny do dodania. Nazwa musi być unikatowa w tabeli.

      AFTER name Chyba że FIRST zostanie określona kolumna lub pole, które zostanie dołączone na końcu.

    • Field_name

      W pełni kwalifikowana nazwa pola do dodania do istniejącej kolumny. Wszystkie składniki ścieżki do zagnieżdżonego pola muszą istnieć, a sama nazwa pola musi być unikatowa.

    • DEFAULT_EXPRESSION DOMYŚLNE

      Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL Warehouse w wersji 2022.35 lub nowszej oznaczone jako tak Databricks Runtime 11.2 lub nowsze

      DEFAULT Definiuje wartość kolumny, która jest używana w INSERT kolumnie i MERGE ... INSERT gdy kolumna nie jest określona.

      Jeśli wartość domyślna nie jest określona, DEFAULT NULL jest sugerowana dla kolumn dopuszczanych do wartości null.

      default_expression Może składać się z literałów i wbudowanych funkcji LUB operatorów SQL, z wyjątkiem:

      default_expression nie może zawierać żadnego podzapytania.

      DEFAULTJest obsługiwany w przypadku CSVźródeł , , JSONPARQUETi ORC .

    • Data_type

      Określa typ danych kolumny lub pola. Nie wszystkie typy danych obsługiwane przez usługę Azure Databricks są obsługiwane przez wszystkie źródła danych.

    • Komentarz KOMENTARZ

      Opcjonalny literał CIĄGU opisujący dodaną kolumnę lub pole.

    • PIERWSZYM

      Jeśli zostanie określona kolumna zostanie dodana jako pierwsza kolumna tabeli, lub pole zostanie dodane jako pierwsze pole w zawierającej strukturę.

    • IDENTYFIKATOR AFTER

      Jeśli określono kolumnę lub pole, zostanie dodane natychmiast po polu lub kolumnie identifier.

  • ALTER COLUMN

    Zmienia właściwość lub lokalizację kolumny.

    { { ALTER | CHANGE } [COLUMN] { column_identifier | field_name }
      { COMMENT comment |
        { FIRST | AFTER column_identifier } |
        { SET | DROP } NOT NULL |
        SET DEFAULT clause |
        DROP DEFAULT |
        SYNC IDENTITY } }
    
    • column_identifier

      Nazwa kolumny, która ma zostać zmieniona.

    • Field_name

      W pełni kwalifikowana nazwa pola do zmiany. Wszystkie składniki ścieżki do zagnieżdżonego pola muszą istnieć.

    • Komentarz KOMENTARZ

      Zmienia opis kolumny column_name . comment musi być literałem CIĄGU.

    • IDENTYFIKATOR FIRST lub AFTER

      Przenosi kolumnę z bieżącej pozycji do przodu (FIRST) lub natychmiast AFTER .identifier Ta klauzula jest obsługiwana tylko wtedy, gdy table_name jest tabelą delty.

    • USTAW WARTOŚĆ NOT NULL LUB DROP NOT NULL

      Zmienia domenę prawidłowych wartości kolumn, aby wykluczyć wartości null SET NOT NULLlub uwzględnić wartości null DROP NOT NULL. Ta opcja jest obsługiwana tylko w przypadku tabel usługi Delta Lake. Usługa Delta Lake zapewni, że ograniczenie jest prawidłowe dla wszystkich istniejących i nowych danych.

    • SYNCHRONIZACJA TOŻSAMOŚCI

      Dotyczy:zaznacz pole wyboru oznaczone jako tak Zaznaczone sql usługi Databricks oznaczone jako tak Databricks Runtime 10.3 lub nowsze

      Zsynchronizuj metadane kolumny tożsamości z rzeczywistymi danymi. Podczas zapisywania własnych wartości w kolumnie tożsamości może ona nie być zgodna z metadanymi. Ta opcja ocenia stan i aktualizuje metadane tak, aby były zgodne z rzeczywistymi danymi. Po wykonaniu tego polecenia następna automatycznie przypisana wartość tożsamości rozpocznie się od start + (n + 1) * step, gdzie n jest najmniejszą wartością, która spełnia start + n * step >= max() (dla pozytywnego kroku).

      Ta opcja jest obsługiwana tylko w przypadku kolumn tożsamości w tabelach usługi Delta Lake.

    • DROP DEFAULT

      Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL Warehouse w wersji 2022.35 lub nowszej oznaczone jako tak Databricks Runtime 11.2 lub nowsze

      Usuwa wyrażenie domyślne z kolumny. W przypadku kolumn dopuszczanych do wartości null jest to odpowiednik SET DEFAULT NULLwartości . W przypadku kolumn zdefiniowanych za pomocą NOT NULL polecenia należy podać wartość dla każdej przyszłej INSERT operacji

  • DEFAULT_EXPRESSION DOMYŚLNE

    Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL Warehouse w wersji 2022.35 lub nowszej oznaczone jako tak Databricks Runtime 11.2 lub nowsze

    DEFAULT Definiuje wartość kolumny, która jest używana w INSERT kolumnie i MERGE ... INSERT gdy kolumna nie jest określona.

    Jeśli nie określono DEFAULT NULL wartości domyślnej dla kolumn dopuszczanych do wartości null.

    default_expression Może składać się z literałów, wbudowanych funkcji SQL lub operatorów z wyjątkiem:

    default_expression nie może zawierać podzapytania.

    DEFAULTJest obsługiwany w przypadku CSVźródeł , , JSONORCi PARQUET .

    Po zdefiniowaniu wartości domyślnej dla nowo dodanej kolumny wartość domyślna dotyczy wszystkich istniejących wcześniej wierszy. Jeśli wartość domyślna zawiera funkcję niedeterministyczną, taką jak rand lub current_timestamp wartość jest obliczana raz po wykonaniu ALTER TABLE , i stosowana jako stała do istniejących wierszy. W przypadku nowo wstawionych wierszy wyrażenie domyślne jest wykonywane raz na wiersze.

    Po ustawieniu wartości domyślnej przy użyciu ALTER COLUMN istniejących wierszy nie ma to wpływu na zmianę.

  • Data_type

    Określa typ danych kolumny lub pola. Nie wszystkie typy danych obsługiwane przez usługę Azure Databricks są obsługiwane przez wszystkie źródła danych.

  • UPUŚĆ KOLUMNĘ

    Ważne

    Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

    Dotyczy:zaznacz pole wyboru oznaczone jako tak Zaznaczone sql usługi Databricks oznaczone jako tak Databricks Runtime 11.0 lub nowsze

    Upuść co najmniej jedną kolumnę lub pola w tabeli usługi Delta Lake.

    Podczas upuszczania kolumny lub pola należy usunąć zależne ograniczenia sprawdzania i wygenerowane kolumny.

    Aby uzyskać informacje o wymaganiach, zobacz Zmienianie nazwy i usuwanie kolumn za pomocą mapowania kolumn usługi Delta Lake.

    DROP [COLUMN | COLUMNS] [ IF EXISTS ] ( { {column_identifier | field_name} [, ...] )
    
    • JEŚLI ISTNIEJE

      Po określeniu parametru IF EXISTSusługa Azure Databricks ignoruje próbę porzucenia kolumn, które nie istnieją. W przeciwnym razie usunięcie nie istniejących kolumn spowoduje błąd.

    • column_identifier

      Nazwa istniejącej kolumny.

    • Field_name

      W pełni kwalifikowana nazwa istniejącego pola.

  • ZMIENIANIE NAZWY KOLUMNY

    Ważne

    Ta funkcja jest dostępna w publicznej wersji zapoznawczej.

    Dotyczy:zaznacz pole wyboru oznaczone jako tak Zaznaczone sql usługi Databricks oznaczone jako tak Databricks Runtime 11.0 lub nowsze

    Zmienia nazwę kolumny lub pola w tabeli usługi Delta Lake.

    Zmiana nazwy kolumny lub pola wymaga również zmiany zależnych ograniczeń sprawdzania i wygenerowanych kolumn. Wszystkie klucze podstawowe i klucze obce używające kolumny zostaną porzucone. W przypadku kluczy obcych musisz być właścicielem tabeli, w której zdefiniowano klucz obcy.

    Aby uzyskać informacje o wymaganiach, zobacz Zmienianie nazwy i usuwanie kolumn za pomocą mapowania kolumn usługi Delta Lake.

    RENAME COLUMN { column_identifier TO to_column_identifier|
                    field_name TO to_field_identifier }
    
  • DODAWANIE OGRANICZENIA

    Dodaje ograniczenie kontrolne, ograniczenie klucza obcego informacyjnego lub ograniczenie klucza podstawowego informacyjnego do tabeli.

    Klucze obce i klucze podstawowe nie są obsługiwane w przypadku tabel w wykazie hive_metastore .

  • OGRANICZENIE DROP

    Odrzuca klucz podstawowy, klucz obcy lub ograniczenie sprawdzania z tabeli.

  • DODAJ PARTYCJĘ

    Jeśli określono, dodaje do tabeli co najmniej jedną partycję. Dodawanie partycji nie jest obsługiwane w przypadku tabel usługi Delta Lake.

    ADD [IF NOT EXISTS] { PARTITION clause [ LOCATION path ] } [...]
    
    • JEŚLI NIE ISTNIEJE

      Opcjonalna klauzula kierująca usługę Azure Databricks do ignorowania instrukcji, jeśli partycja już istnieje.

    • PARTITION, klauzula

      Partycja do dodania. Klucze partycji muszą być zgodne z partycjonowaniem tabeli i być skojarzone z wartościami. Jeśli partycja już istnieje, zostanie zgłoszony błąd, chyba że IF NOT EXISTS został określony.

    • ŚCIEŻKA LOKALIZACJI

      path musi być literałem STRING reprezentującym opcjonalną lokalizację wskazującą partycję.

      Jeśli nie określono lokalizacji, lokalizacja będzie pochodzić z lokalizacji tabeli i kluczy partycji.

      Jeśli istnieją pliki w lokalizacji, w której wypełniają partycję i muszą być zgodne z tabelą data_source i jej opcjami.

  • UPUŚĆ PARTYCJĘ

    Jeśli określono tę klauzulę, usuwa co najmniej jedną partycję z tabeli, opcjonalnie usuwając wszystkie pliki w lokalizacjach partycji.

    Tabele usługi Delta Lake nie obsługują usuwania partycji.

    DROP [ IF EXISTS ] PARTITION clause [, ...] [PURGE]
    
    • JEŚLI ISTNIEJE

      Po określeniu IF EXISTS usługi Azure Databricks zignoruje próbę porzucenia partycji, które nie istnieją. W przeciwnym razie nie istniejące partycje spowodują błąd.

    • PARTITION, klauzula

      Określa partycję, która ma zostać porzucona. Jeśli partycja jest identyfikowana tylko częściowo, część partycji zostanie porzucona.

    • PRZECZYŚĆ

      W przypadku ustawienia wykaz tabel musi usunąć dane partycji, pomijając folder Kosz nawet wtedy, gdy wykaz został skonfigurowany. Ta opcja ma zastosowanie tylko w przypadku tabel zarządzanych. Jest on skuteczny tylko wtedy, gdy:

      System plików obsługuje folder Kosz. Wykaz został skonfigurowany do przenoszenia usuniętej partycji do folderu Kosz. W usłudze AWS S3 nie ma folderu Kosz, więc nie jest on skuteczny.

      Po usunięciu partycji nie ma potrzeby ręcznego usuwania plików.

  • ZMIENIANIE NAZWY PARTYCJI

    Zastępuje klucze partycji.

    Tabele usługi Delta Lake nie obsługują zmiany nazw partycji.

    from_partition_clause RENAME TO to_partition_clause
    
  • ODZYSKIWANIE PARTYCJI

    Ta klauzula nie ma zastosowania do tabel usługi Delta Lake.

    Instruuje usługę Azure Databricks, aby przeskanowała lokalizację tabeli i dodała wszystkie pliki do tabeli, które zostały dodane bezpośrednio do systemu plików.

  • SET TBLPROPERTIES

    Ustawia lub resetuje co najmniej jedną właściwości zdefiniowaną przez użytkownika.

  • UNSET TBLPROPERTIES

    Usuwa co najmniej jedną zdefiniowaną przez użytkownika właściwości.

  • USTAW LOKALIZACJĘ

    Przenosi lokalizację partycji lub tabeli.

    Usługa Delta Lake nie obsługuje przenoszenia poszczególnych partycji tabeli usługi Delta Lake.

    [ PARTITION clause ] SET LOCATION path
    
    • PARTITION, klauzula

      Opcjonalnie identyfikuje partycję, dla której lokalizacja ma zostać zmieniona. W przypadku pominięcia nazwy partycji usługa Azure Databricks przenosi lokalizację tabeli.

    • ŚCIEŻKA LOKALIZACJI

      path musi być literałem CIĄGU. Określa nową lokalizację partycji lub tabeli.

      Pliki w oryginalnej lokalizacji nie zostaną przeniesione do nowej lokalizacji.

  • [ SET ] WŁAŚCICIEL DO podmiotu zabezpieczeń

    Przenosi własność tabeli na .principal

    Dotyczy:sprawdzanie oznaczone jako tak Databricks SQL Warehouse w wersji 2022.35 lub nowszej oznaczone jako tak Databricks Runtime 11.2 lub nowsze

    SET jest dozwolone jako opcjonalne słowo kluczowe.

Przykłady

Aby uzyskać informacje na temat dodawania ograniczeń i modyfikowania przykładów kolumn, zobacz

-- 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');