Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:
Databricks SQL
Databricks Runtime
Definiuje zarządzaną lub zewnętrzną tabelę, opcjonalnie przy użyciu źródła danych.
Składnia
{ { [CREATE OR] REPLACE TABLE | CREATE [EXTERNAL | { TEMP | TEMPORARY } ] TABLE [ IF NOT EXISTS ] }
table_name
[ table_specification ]
[ USING data_source ]
[ table_clauses ]
[ AS query ] }
table_specification
( { column_identifier column_type [ column_properties ] } [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL |
COLLATE collation_name |
GENERATED ALWAYS AS ( expr ) |
GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start | INCREMENT BY step ] [ ...] ) ] |
DEFAULT default_expression |
COMMENT column_comment |
column_constraint |
MASK clause } [ ... ]
table_clauses
{ OPTIONS clause |
PARTITIONED BY clause |
CLUSTER BY clause |
clustered_by_clause |
LOCATION path [ WITH ( CREDENTIAL credential_name ) ] |
COMMENT table_comment |
TBLPROPERTIES clause |
DEFAULT COLLATION default_collation_name |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Zanim Databricks Runtime 16.1, START WITH musi poprzedzać INCREMENT BY.
Parametry
ZAMIEŃ
Jeśli zostanie określona, zastępuje tabelę i jej zawartość, jeśli już istnieje. Ta klauzula jest obsługiwana tylko w przypadku tabel Delta i Apache Iceberg.
REPLACEZachowuje historię tabeli i przyznane uprawnienia, filtry wierszy i maski kolumn.Uwaga
Usługa Azure Databricks zdecydowanie zaleca używanie
REPLACEzamiast usuwania i ponownego tworzenia tabel.ZEWNĘTRZNY
Jeśli zostanie określona, zostanie utworzona tabela zewnętrzna. Podczas tworzenia tabeli zewnętrznej należy również podać klauzulę
LOCATION. Gdy tabela zewnętrzna zostanie usunięta, pliki w lokalizacjiLOCATIONnie zostaną usunięte.TEMP lub TYMCZASOWY
Dotyczy:
Databricks SQL
Databricks Runtime 17.3 lub nowszyWażne
Ta funkcja jest dostępna w publicznej wersji testowej.
Jeśli zostanie określona, tworzy tabelę tymczasową, do której może uzyskać dostęp tylko bieżąca sesja.
JEŚLI NIE ISTNIEJE
Jeśli określono i tabela o tej samej nazwie już istnieje, instrukcja jest ignorowana.
IF NOT EXISTSnie może współistnieć zREPLACE, co oznacza, żeCREATE OR REPLACE TABLE IF NOT EXISTSnie jest dozwolone.-
Nazwa tabeli do utworzenia. Nazwa nie może zawierać specyfikacji czasowej ani specyfikacji opcji. Jeśli tabela jest tabelą
table_nametymczasową, może być kwalifikowana przezsession, lubsystem.sessionW przeciwnym razie, jeśli nazwa nie jest kwalifikowana, tabela zostanie utworzona w bieżącym schemacie.Tabele utworzone w programie
hive_metastoremogą zawierać tylko znaki alfanumeryczne ASCII i podkreślenia (INVALID_SCHEMA_OR_RELATION_NAME).Tabele Iceberg należy utworzyć w katalogu Unity. Tworzenie tabel Iceberg w
hive_metastorenie jest obsługiwane. specyfikacja_tabeli
Ta klauzula opcjonalna definiuje listę kolumn, ich typów, właściwości, opisów i ograniczeń kolumn.
Jeśli nie zdefiniujesz kolumn w schemacie tabeli, musisz określić albo
AS query, alboLOCATION.-
Unikatowa nazwa kolumny.
Identyfikatory kolumn tabel delty bez właściwości mapowania kolumn (
'delta.columnMapping.mode' = 'name') nie mogą zawierać spacji ani następujących znaków:, ; { } ( ) \n \t =.Identyfikatory kolumn
AVROtabel muszą zaczynać się od podkreślenia (_) lub litery Unicode (w tym liter niebędących ASCII) i być kontynuowane przez kombinację liter Unicode, cyfr i podkreślników.Identyfikatory kolumn w tabelach
ICEBERGmuszą być unikatowe, niewrażliwe na wielkość liter i zgodne ze standardowymi regułami identyfikatorów SQL. Unikaj używania spacji lub znaków specjalnych, ponieważ mogą nie być obsługiwane przez wszystkie aparaty zapytań. -
Określa typ danych kolumny. Nie wszystkie typy danych obsługiwane przez usługę Azure Databricks są obsługiwane przez wszystkie źródła danych.
NOT NULL
Jeśli zostanie określona, kolumna nie akceptuje
NULLwartości. Ta klauzula jest obsługiwana tylko w przypadku tabel Delta i Iceberg.SORTOWANIE collation_name
Dotyczy:
Databricks SQL
Databricks Runtime 16.1 i nowszeOpcjonalnie, dla
STRINGcolumn_type, określ nazwę sortowania, które ma być używane do operacji porównania i sortowania w tej kolumnie. Sortowanie domyślne to tabeladefault_collation_name.WYGENEROWANE ZAWSZE JAKO ( wyrażenie )
Gdy określisz tę klauzulę, wartość tej kolumny jest ustalana przez określony
expr.DEFAULT COLLATIONtabeli musi byćUTF8_BINARY.exprMoże składać się z literałów, identyfikatorów kolumn w tabeli oraz deterministycznych, wbudowanych funkcji LUB operatorów SQL, z wyjątkiem:- Funkcje agregujące
- Funkcje okna analitycznego
- Funkcje okna klasyfikacji
- Funkcje generatora wartości tabeli
- Kolumny z sortowaniem innym niż
UTF8_BINARY
Ponadto
exprnie może zawierać żadnego podzapytania.GENERATED { ALWAYS | DOMYŚLNIE } JAKO IDENTITY [ ( [ ROZPOCZNIJ OD start ] [ ZWIĘKSZ O krok ] ) ]
Dotyczy:
Databricks SQL
Databricks Runtime 10.4 LTS i nowszeDefiniuje kolumnę tożsamości. Kiedy zapisujesz dane w tabeli, a gdy nie podajesz wartości dla kolumny tożsamości, zostanie jej automatycznie przypisana unikatowa wartość wzrastająca (lub malejąca, jeśli
stepjest ujemne). Ta klauzula jest obsługiwana tylko w przypadku tabel Delta. Tej klauzuli można używać tylko w przypadku kolumn z typem danych BIGINT.Automatycznie przypisane wartości zaczynają się od
starti zwiększają ostep. Przypisane wartości są unikatowe, ale nie mają gwarancji, że są ciągłe. Oba parametry są opcjonalne, a wartość domyślna to 1.stepnie może być0.Jeśli wartości przypisane automatycznie wykraczają poza zakres typu kolumny tożsamości, zapytanie zakończy się niepowodzeniem.
Kiedy
ALWAYSjest używany, nie można podać własnych wartości dla kolumny tożsamości.Następujące operacje nie są obsługiwane:
-
PARTITIONED BYkolumna tożsamości -
UPDATEkolumna tożsamości
Uwaga
Deklarowanie kolumny tożsamości w tabeli powoduje wyłączenie współbieżnych transakcji. Używaj kolumn tożsamości tylko w przypadkach użycia, w których współbieżne zapisy do tabeli docelowej nie są wymagane.
-
DOMYŚLNE default_expression
Dotyczy:
Databricks SQL
Databricks Runtime 11.3 LTS i nowszeDEFAULTDefiniuje wartość kolumny, która jest używana wINSERTkolumnie ,UPDATEiMERGE ... INSERTgdy kolumna nie jest określona.Jeśli nie określono wartości domyślnej,
DEFAULT NULLzostanie zastosowany dla kolumn dopuszczających wartości null.default_expressionmoż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
Ponadto
default_expressionnie może zawierać żadnego podzapytania.DEFAULTjest obsługiwany dla źródełCSV,JSON,PARQUETiORC.KOMENTARZ KOLUMNY
Ciąg znaków opisujący kolumnę.
-
Dodaje ograniczenie klucza podstawowego lub klucza obcego do kolumny w tabeli.
Ograniczenia nie są obsługiwane w przypadku tabel w wykazie
hive_metastore.Aby dodać ograniczenie sprawdzania do tabeli, użyj polecenia ALTER TABLE.
-
Dotyczy:
Databricks SQL
Databricks Runtime 12.2 LTS i nowsze
tylko Unity CataloguDodaje funkcję maski kolumn do anonimowości poufnych danych. Wszystkie kolejne zapytania z tej kolumny otrzymują wynik oceny tej funkcji w kolumnie zamiast oryginalnej wartości kolumny. Może to być przydatne w celach szczegółowej kontroli dostępu, w których funkcja może sprawdzić tożsamość lub członkostwo w grupach użytkownika wywołującego, aby zdecydować, czy zredagować wartość.
Jeśli zastępujesz tabelę, a nowa tabela zawiera takie same nazwy kolumn jak oryginalna, wszystkie istniejące maski kolumn są zachowywane, nawet jeśli nie są jawnie definiowane. Zapobiega to przypadkowej utracie zasad dostępu do danych.
-
Dodaje do tabeli ograniczenia informacyjnego klucza głównego lub informacyjnego klucza obcego.
Ograniczenia klucza nie są obsługiwane w przypadku tabel w wykazie
hive_metastore.Aby dodać ograniczenie sprawdzania do tabeli, użyj polecenia ALTER TABLE.
-
UŻYWANIE data_source
data_sourcemoże być źródłem danych JDBC w formacie pliku lub federacyjnym.Format pliku musi być jednym z następujących elementów:
AVROBINARYFILECSVDELTAICEBERGJSONORCPARQUETTEXT
W przypadku dowolnego formatu pliku innego niż
DELTAlubICEBERG, należy również określić wartośćLOCATION, chyba że wykaz tabel ma wartośćhive_metastore.Obsługiwane są następujące federacyjne źródła JDBC:
POSTGRESQLSQLSERVERMYSQLBIGQUERYNETSUITEORACLEREDSHIFTSNOWFLAKESQLDWSYNAPSESALESFORCESALESFORCE_DATA_CLOUDTERADATAWORKDAY_RAASMONGODB
Podczas określania federacyjnego źródła JDBC należy również określić klauzulę
OPTIONSz niezbędnymi informacjami o połączeniu. Aby uzyskać więcej informacji na temat wykonywania zapytań dotyczących źródeł danych federacyjnych, zobacz Tworzenie zapytań dotyczących baz danych przy użyciu JDBC .Następujące dodatkowe formaty plików do użycia w tabeli są obsługiwane w środowisku Databricks Runtime:
JDBCLIBSVM- w pełni kwalifikowaną nazwę klasy niestandardowej implementacji
org.apache.spark.sql.sources.DataSourceRegister.
Jeśli
USINGzostanie pominięty, wartość domyślna toDELTA.Dotyczy to następujących elementów: Databricks Runtime
HIVEjest obsługiwane do tworzenia tabeli Hive SerDe w środowisku Databricks Runtime. Można określić specyficzne dlafile_formatprogramu Hive irow_formatużyćOPTIONSklauzuli , która jest mapą ciągów bez uwzględniania wielkości liter. Otooption_keys:FILEFORMATINPUTFORMATOUTPUTFORMATSERDEFIELDDELIMESCAPEDELIMMAPKEYDELIMLINEDELIM
table_clauses
Opcjonalnie określ lokalizację, partycjonowanie, klastrowanie, opcje, komentarze i właściwości zdefiniowane przez użytkownika dla nowej tabeli. Każda klauzula podrzędna może być określona tylko raz.
-
Klauzula opcjonalna do partycjonowania tabeli według podzestawu kolumn.
Uwaga
W przypadku zarządzanych tabel Iceberg Azure Databricks nie obsługuje
PARTITIONED BY. Użyj płynnego klastrowania (CLUSTER BY), aby zamiast tego zoptymalizować układ danych. Jeśli w przypadku tabel Delta pominiesz definicję tabeli, usługa Azure Databricks umieszcza kolumny partycjonowania na końcu tabeli, nawet jeśli zostaną wymienione wcześniej w specyfikacji kolumny. -
Dotyczy:
Databricks SQL
Databricks Runtime 13.3 lub nowszeKlauzula opcjonalna do klastrowania tabeli delty lub góry lodowej według podzbioru kolumn. Zobacz Używaj płynnego grupowania dla tabel. Aby klasterować inne tabele, użyj polecenia
clustered_by_clause.W przypadku tabel Iceberg należy jawnie wyłączyć wektory usuwania i identyfikatory wierszy, kiedy korzystasz z
CLUSTER BY.Użyj automatycznego klastrowania Liquid z
CLUSTER BY AUTO, a Databricks inteligentnie wybierze klucze klastrowania, aby zoptymalizować wydajność zapytań.Nie można łączyć klasteryzacji cieczy z
PARTITIONED BY. klauzula_grupowania
Opcjonalnie należy klasterować tabelę lub każdą partycję do stałej liczby zasobników skrótów przy użyciu podzestawu kolumn.
Ta klauzula nie jest obsługiwana w przypadku tabel Delta ani Iceberg. Użyj
CLUSTER BYzamiast tego.KLASTROWANE PRZEZ
Określa zestaw kolumn, według których należy klasterować każdą partycję lub tabelę, jeśli nie określono partycjonowania.
-
Identyfikator, który odnosi się do
column_identifierw tabeli. Jeśli określisz więcej niż jedną kolumnę, nie może istnieć duplikaty. Ponieważ klaster działa na poziomie partycji, nie można nazwać kolumny partycji również jako kolumny klastra.
-
SORTOWANE WEDŁUG
Opcjonalnie utrzymuje kolejność sortowania wierszy w zasobniku.
sort_column
Kolumna do sortowania zasobnika według. Kolumna nie może być kolumną partycji. Sortowanie kolumn musi być unikatowe.
ASC lub DESC
Opcjonalnie określa, czy
sort_columnjest sortowana w kolejności rosnącej (ASC) lub malejącej (DESC). Wartości domyślne toASC.
DO ZASOBNIKÓW NUM_BUCKETS
Literał INTEGER określający liczbę zasobników, do których jest podzielona każda partycja (lub tabela, jeśli nie określono partycjonowania).
LOKALIZACJA ścieżki [ WITH ( CREDENTIAL credential_name ) ]
Opcjonalna ścieżka do katalogu, w którym są przechowywane dane tabeli, która może być ścieżką do magazynu rozproszonego.
pathmusi być literałem typu STRING. Jeśli nie określisz lokalizacji, tabela zostanie uznana zamanaged table, a usługa Azure Databricks utworzy domyślną lokalizację tabeli.Określenie lokalizacji powoduje, że tabela jest tabelą zewnętrzną.
W przypadku tabel, które nie znajdują się w katalogu
, tabela musi być chroniona przez zewnętrzną lokalizację , chyba że określono prawidłowe poświadczenie magazynu.Nie można tworzyć tabel zewnętrznych w lokalizacjach nakładających się na lokalizację zarządzanych tabel.
W przypadku tabel delty tabela dziedziczy konfigurację z
LOCATION, jeśli dane już istnieją w tej ścieżce. W związku z tym wszystkie określoneTBLPROPERTIES,table_specificationlubPARTITIONED BYklauzule muszą dokładnie odpowiadać istniejącym danym w lokalizacji Delta.W przypadku tabel Iceberg klauzula
LOCATIONnie jest obsługiwana. Obce tabele Iceberg są rejestrowane automatycznie, gdy tworzysz zagraniczny katalog. Należy utworzyć zarządzane tabele Iceberg bez określania lokalizacji.-
Ustawia lub resetuje co najmniej jedną opcję tabeli zdefiniowanej przez użytkownika.
Komentarz do tabeli
Literał ciągowy opisujący tabelę.
-
Opcjonalnie ustawia co najmniej jedną właściwość zdefiniowaną przez użytkownika.
DOMYŚLNE SORTOWANIE default_collation_name
Dotyczy:
Databricks SQL
Databricks Runtime 16.3 lub nowszegoDefiniuje sortowanie domyślne do użycia w następujących celach:
-
STRINGkolumny i pola tabeli - wyrażenie
DEFAULT - Część główna
CREATE TABLE AS query
CHECKograniczenia i wygenerowane wyrażenia kolumn wymagają domyślnego sortowaniaUTF8_BINARY.Jeśli nie zostanie określony, sortowanie domyślne pochodzi ze schematu, w którym jest tworzona tabela.
-
Z klauzulą ROW FILTER
Dotyczy:
Databricks SQL
Databricks Runtime 12.2 LTS i nowsze
tylko Unity CataloguDodaje do tabeli funkcję filtru wierszy. Wszystkie kolejne zapytania z tej tabeli otrzymają podzbiór wierszy, w których funkcja oblicza wartość logiczną TRUE. Może to być przydatne w celach szczegółowej kontroli dostępu, w których funkcja może sprawdzić tożsamość lub członkostwo w grupach użytkownika wywołującego, aby zdecydować, czy filtrować niektóre wiersze.
Jeśli zastępujesz tabelę, wszystkie istniejące filtry wierszy są zachowywane, nawet jeśli nie są jawnie definiowane. Zapobiega to przypadkowej utracie zasad dostępu do danych.
-
-
Ta klauzula opcjonalna wypełnia tabelę przy użyciu danych z
query. Jeśli określiszquery, nie możesz również określićtable_specification. Schemat tabeli pochodzi z zapytania.Pamiętaj, że usługa Azure Databricks zastępuje bazowe źródło danych danymi zapytania wejściowego, aby upewnić się, że utworzona tabela zawiera dokładnie te same dane co zapytanie wejściowe.
Przykłady
-- Creates a Delta table
> CREATE TABLE student (id INT, name STRING, age INT);
-- Creates a managed Iceberg table
> CREATE TABLE edu.enrollment.student (id INT, name STRING, age INT) USING ICEBERG;
-- Use data from another table
> CREATE TABLE student_copy AS SELECT * FROM student;
-- Creates a CSV table from an external directory
> CREATE TABLE student USING CSV LOCATION '/path/to/csv_files';
-- Specify table comment and properties
> CREATE TABLE student (id INT, name STRING, age INT)
COMMENT 'this is a comment'
TBLPROPERTIES ('foo'='bar');
-- Specify table comment and properties with different clauses order
> CREATE TABLE student (id INT, name STRING, age INT)
TBLPROPERTIES ('foo'='bar')
COMMENT 'this is a comment';
-- Create partitioned table
> CREATE TABLE student (id INT, name STRING, age INT)
PARTITIONED BY (age);
-- Create a table with a generated column
> CREATE TABLE rectangles(a INT, b INT,
area INT GENERATED ALWAYS AS (a * b));
-- Create a table with a string column with a case-insensitive collation.
> CREATE TABLE names(name STRING COLLATE UNICODE_CI);
-- Create a table with a default collation and override for a specific column.
> CREATE TABLE names(name STRING, first_name STRING, id STRING COLLATE UTF8_BINARY) DEFAULT COLLATION UNICODE_CI;
-- Create an external table connected to Oracle
> CREATE TABLE IF NOT EXISTS ora_tab
USING ORACLE
OPTIONS (
url '<jdbc-url>',
dbtable '<table-name>',
user '<username>',
password '<password>'
);
> SELECT * FROM ora_tab;
> CREATE TEMP TABLE temp_1 (a INT);
> INSERT INTO temp_1 VALUES (1);
> SELECT * FROM temp_1;
1