ALTER TABLE
Dotyczy: wyboru SQL usługi Databricks
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
-
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.
-
Identyfikuje nową nazwę tabeli. Nazwa nie może zawierać specyfikacji czasowej.
-
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] } [, ...] ) }
-
Nazwa kolumny do dodania. Nazwa musi być unikatowa w tabeli.
AFTER name
Chyba żeFIRST
zostanie określona kolumna lub pole, które zostanie dołączone na końcu. -
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:
Databricks SQL Warehouse w wersji 2022.35 lub nowszej
Databricks Runtime 11.2 lub nowsze
DEFAULT
Definiuje wartość kolumny, która jest używana wINSERT
kolumnie iMERGE ... 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:- Funkcje agregujące
- Funkcje okna analitycznego
- Funkcje okna klasyfikacji
- Funkcje generatora wartości tabeli
default_expression
nie może zawierać żadnego podzapytania.DEFAULT
Jest obsługiwany w przypadkuCSV
źródeł , ,JSON
PARQUET
iORC
.- Funkcje agregujące
-
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 } }
-
Nazwa kolumny, która ma zostać zmieniona.
-
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.-
Przenosi kolumnę z bieżącej pozycji do przodu (
FIRST
) lub natychmiastAFTER
.identifier
Ta klauzula jest obsługiwana tylko wtedy, gdytable_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 NULL
lub uwzględnić wartości nullDROP 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:
usługi Databricks
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
, gdzien
jest najmniejszą wartością, która spełniastart + 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:
Databricks SQL Warehouse w wersji 2022.35 lub nowszej
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 NULL
wartości . W przypadku kolumn zdefiniowanych za pomocąNOT NULL
polecenia należy podać wartość dla każdej przyszłejINSERT
operacji
-
DEFAULT_EXPRESSION DOMYŚLNE
Dotyczy:
Databricks SQL Warehouse w wersji 2022.35 lub nowszej
Databricks Runtime 11.2 lub nowsze
DEFAULT
Definiuje wartość kolumny, która jest używana wINSERT
kolumnie iMERGE ... 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:- Funkcje agregujące
- Funkcje okna analitycznego
- Funkcje okna klasyfikacji
- Funkcje generatora wartości tabeli
default_expression
nie może zawierać podzapytania.DEFAULT
Jest obsługiwany w przypadkuCSV
źródeł , ,JSON
ORC
iPARQUET
.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
lubcurrent_timestamp
wartość jest obliczana raz po wykonaniuALTER 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ę.-
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:
Zaznaczone sql usługi Databricks
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 EXISTS
usługa Azure Databricks ignoruje próbę porzucenia kolumn, które nie istnieją. W przeciwnym razie usunięcie nie istniejących kolumn spowoduje błąd.-
Nazwa istniejącej kolumny.
-
W pełni kwalifikowana nazwa istniejącego pola.
ZMIENIANIE NAZWY KOLUMNY
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
Dotyczy:
Zaznaczone sql usługi Databricks
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 }
-
Istniejąca nazwa kolumny.
-
Nowy identyfikator kolumny. Identyfikator musi być unikatowy w tabeli.
-
Istniejąca w pełni kwalifikowana nazwa pola.
-
Nowy identyfikator pola. Identyfikator musi być unikatowy w obrębie struktury lokalnej.
-
-
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
. -
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.
-
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.-
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
-
Definicja partycji, która ma zostać zmieniona.
-
Nowa definicja dla tej partycji. Partycja z tymi samymi kluczami nie może jeszcze istnieć.
-
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.
-
Ustawia lub resetuje co najmniej jedną właściwości zdefiniowaną przez użytkownika.
-
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
-
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:
Databricks SQL Warehouse w wersji 2022.35 lub nowszej
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');