CREATE TABLE [USING]
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] 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 |
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 |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Parametry
ZASTĄPIĆ
Jeśli zostanie określona, zastępuje tabelę i jej zawartość, jeśli już istnieje. Ta klauzula jest obsługiwana tylko w przypadku tabel usługi Delta Lake.
REPLACE
zachowuje historię tabeli.Uwaga
Usługa Azure Databricks zdecydowanie zaleca użycie
REPLACE
zamiast upuszczania i ponownego tworzenia tabel usługi Delta Lake.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 porzucona, pliki w obiekcieLOCATION
nie zostaną usunięte.JEŚLI NIE ISTNIEJE
Jeśli określono i tabela o tej samej nazwie już istnieje, instrukcja jest ignorowana.
IF NOT EXISTS
program nie może współistnieć z parametremREPLACE
, co oznaczaCREATE OR REPLACE TABLE IF NOT EXISTS
, że nie jest dozwolone.-
Nazwa tabeli do utworzenia. Nazwa nie może zawierać specyfikacji czasowej ani specyfikacji opcji. Jeśli nazwa nie jest kwalifikowana, tabela zostanie utworzona w bieżącym schemacie.
Tabele utworzone w programie
hive_metastore
mogą zawierać tylko znaki alfanumeryczne ASCII i podkreślenia (INVALID_SCHEMA_OR_RELATION_NAME). table_specification
Ta klauzula opcjonalna definiuje listę kolumn, ich typów, właściwości, opisów i ograniczeń kolumn.
Jeśli nie zdefiniujesz kolumn schematu tabeli, musisz określić
AS query
wartość lubLOCATION
.-
Unikatowa nazwa kolumny.
Identyfikatory kolumn tabel usługi Delta Lake bez właściwości mapowania kolumn (
'delta.columnMapping.mode' = 'name'
) nie mogą zawierać spacji ani następujących znaków:, ; { } ( ) \n \t =
.Identyfikatory
AVRO
kolumn tabeli muszą zaczynać się od podkreślenia () lub litery Unicode (_
w tym liter innych niż ASCII), a następnie kombinacji liter Unicode, cyfr i podkreśleń. -
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 zaakceptuje
NULL
wartości. Ta klauzula jest obsługiwana tylko w przypadku tabel usługi Delta Lake.WYGENEROWANE ZAWSZE JAKO ( wyrażenie )
Po określeniu tej klauzuli wartość tej kolumny jest określana przez określony
expr
element .expr
Może składać się z literałów, identyfikatorów kolumn w tabeli oraz deterministycznych, wbudowanych funkcji LUB operatorów SQL, z wyjątkiem:- Agregujących
- Funkcje okna analitycznego
- Funkcje okna klasyfikacji
- Funkcje generatora wartości tabeli
Ponadto
expr
nie może zawierać żadnego podzapytania.GENERATED { ALWAYS | DOMYŚLNIE } JAKO TOŻSAMOŚĆ [ [ ROZPOCZNIJ OD POCZĄTKU ] [ INCREMENT BY STEP ] ] ]
Dotyczy: Databricks SQL Databricks Runtime 10.4 LTS i nowsze
Definiuje kolumnę tożsamości. Podczas zapisywania w tabeli i nie podajesz wartości dla kolumny tożsamości, zostanie ona automatycznie przypisana unikatowa i statystycznie rosnąca (lub malejąca, jeśli
step
jest ujemna). Ta klauzula jest obsługiwana tylko w przypadku tabel usługi Delta Lake. Tej klauzuli można używać tylko w przypadku kolumn z typem danych BIGINT.Automatycznie przypisane wartości zaczynają się od
start
i zwiększają się ostep
wartość . Przypisane wartości są unikatowe, ale nie mają gwarancji, że są ciągłe. Oba parametry są opcjonalne, a wartość domyślna to 1.step
nie może być0
.Jeśli wartości przypisane automatycznie wykraczają poza zakres typu kolumny tożsamości, zapytanie zakończy się niepowodzeniem.
W
ALWAYS
przypadku użycia nie można podać własnych wartości dla kolumny tożsamości.Następujące operacje nie są obsługiwane:
PARTITIONED BY
kolumna tożsamościUPDATE
kolumna tożsamości
Uwaga
Deklarowanie kolumny tożsamości w tabeli delty 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.
DEFAULT_EXPRESSION DOMYŚLNE
Dotyczy: Databricks SQL Databricks Runtime 11.3 LTS i nowsze
DEFAULT
Definiuje wartość kolumny, która jest używana wINSERT
kolumnie ,UPDATE
iMERGE ... INSERT
gdy kolumna nie jest określona.Jeśli nie określono
DEFAULT NULL
wartości domyślnej, zostanie zastosowana 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:- Agregujących
- Funkcje okna analitycznego
- Funkcje okna klasyfikacji
- Funkcje generatora wartości tabeli
Ponadto
default_expression
nie może zawierać żadnego podzapytania.DEFAULT
program jest obsługiwany w przypadkuCSV
źródeł ,JSON
,PARQUET
iORC
.COLUMN_COMMENT KOMENTARZ
Literał ciągu opisujący kolumnę.
-
Dodaje ograniczenie klucza podstawowego lub klucza obcego do kolumny w tabeli usługi Delta Lake.
Ograniczenia nie są obsługiwane w przypadku tabel w wykazie
hive_metastore
.Aby dodać ograniczenie sprawdzania do tabeli usługi Delta Lake, użyj polecenia ALTER TABLE.
-
Dotyczy: Databricks SQL Databricks Runtime 12.2 LTS i nowszy tylko wykaz aparatu Unity
Ważne
Ta funkcja jest dostępna w publicznej wersji zapoznawczej.
Dodaje 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ść.
-
Dodaje informacyjny klucz podstawowy lub informacyjne ograniczenia klucza obcego do tabeli usługi Delta Lake.
Ograniczenia klucza nie są obsługiwane w przypadku tabel w wykazie
hive_metastore
.Aby dodać ograniczenie sprawdzania do tabeli usługi Delta Lake, użyj polecenia ALTER TABLE.
-
UŻYWANIE data_source
data_source
może być źródłem danych JDBC w formacie pliku lub federacyjnym.Format pliku musi być jednym z następujących elementów:
AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
W przypadku dowolnego formatu pliku innego niż
DELTA
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:
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
Podczas określania federacyjnego źródła JDBC należy również określić klauzulę
OPTIONS
z 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:
JDBC
LIBSVM
- w pełni kwalifikowana nazwa klasy niestandardowej implementacji
org.apache.spark.sql.sources.DataSourceRegister
.
Jeśli
USING
zostanie pominięty, wartość domyślna toDELTA
.Dotyczy to następujących elementów: Databricks Runtime
HIVE
Program jest obsługiwany do tworzenia tabeli Usługi Hive SerDe w środowisku Databricks Runtime. Można określić specyficzne dlafile_format
programu Hive irow_format
użyćOPTIONS
klauzuli , która jest mapą ciągów bez uwzględniania wielkości liter. Otooption_keys
:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
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
Jeśli nie zdefiniujesz tabeli delty, kolumny partycjonowania są umieszczane na końcu tabeli, nawet jeśli są zdefiniowane wcześniej w specyfikacji kolumny. Rozważ użycie
CLUSTER BY
zamiastPARTITIONED BY
dla tabel delty. -
Dotyczy: Databricks SQL Databricks Runtime 13.3 i nowsze
Klauzula opcjonalna do klastrowania tabeli delty według podzestawu kolumn. Aby klasterować inne tabele, użyj polecenia
clustered_by_clause
.Klastrowanie cieczy usługi Delta Lake nie może być łączone z
PARTITIONED BY
. clustered_by_clause
Opcjonalnie należy klasterować tabelę lub każdą partycję do stałej liczby zasobników skrótów przy użyciu podzestawu kolumn.
Klastrowanie nie jest obsługiwane w przypadku tabel usługi Delta Lake.
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 odwołujący
column_identifier
się do elementu w 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.
Usługa ASC lub DESC
Opcjonalnie określa, czy
sort_column
jest 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).
ŚCIEŻKA LOKALIZACJI [ 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.
path
musi być literałem STRING. Jeśli nie określisz lokalizacji, tabela zostanie uznana za lokalizację, amanaged table
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 wykazie
hive_metastore
, tabelapath
musi być chroniona przez lokalizację zewnętrzną, chyba że określono prawidłowe poświadczenia magazynu.Nie można tworzyć tabel zewnętrznych w lokalizacjach nakładających się na lokalizację zarządzanych tabel.
W przypadku tabeli usługi Delta Lake konfiguracja tabeli jest dziedziczona z tabeli
LOCATION
, jeśli dane są obecne. W związku z tym, jeśli jakiekolwiekTBLPROPERTIES
klauzule ,table_specification
lubPARTITIONED BY
są określone dla tabel usługi Delta Lake, muszą dokładnie odpowiadać danym lokalizacji usługi Delta Lake.-
Ustawia lub resetuje co najmniej jedną opcję tabeli zdefiniowanej przez użytkownika.
TABLE_COMMENT KOMENTARZ
Literał ciągu opisujący tabelę.
-
Opcjonalnie ustawia co najmniej jedną właściwość zdefiniowaną przez użytkownika.
WITH ROW FILTER, klauzula
Dotyczy: Databricks SQL Databricks Runtime 12.2 LTS i nowszy tylko wykaz aparatu Unity
Dodaje 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.
-
-
Ta klauzula opcjonalna wypełnia tabelę przy użyciu danych z
query
. Po określeniu parametruquery
nie można 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);
-- 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 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;