CREATE TABLE [POUŽITÍ]
Platí pro: Databricks SQL
Databricks Runtime
Definuje spravovanou nebo externí tabulkuvolitelně pomocí zdroje dat.
Syntaxe
{ { [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 |
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 |
WITH { ROW FILTER clause } } [...]
clustered_by_clause
{ CLUSTERED BY ( cluster_column [, ...] )
[ SORTED BY ( { sort_column [ ASC | DESC ] } [, ...] ) ]
INTO num_buckets BUCKETS }
Před Databricks Runtime 16.1 musí START WITH
předcházet INCREMENT BY
.
Parametry
NAHRADIT
Pokud je tato hodnota zadaná, nahradí tabulku a její obsah, pokud již existuje. Tato klauzule je podporovaná pouze pro tabulky Delta Lake.
REPLACE
zachovává historii tabulek i udělená oprávnění.Poznámka:
Azure Databricks důrazně doporučuje místo vyřazování a opětovného vytváření tabulek Delta Lake používat
REPLACE
.EXTERNÍ
Pokud je zadáno, vytvoří externí tabulku. Při vytváření externí tabulky musíte také zadat klauzuli
LOCATION
. Když dojde k vyřazení externí tabulky, soubory vLOCATION
se nezahodí.POKUD NEEXISTUJE
Pokud je zadána a tabulka se stejným názvem již existuje, příkaz je ignorován.
IF NOT EXISTS
nemůže existovat společně sREPLACE
, což znamená, žeCREATE OR REPLACE TABLE IF NOT EXISTS
není povoleno.-
Název tabulky, kterou chcete vytvořit. Název nesmí obsahovat dočasnou specifikaci ani specifikaci možností. Pokud název není kvalifikovaný, vytvoří se tabulka v aktuálním schématu.
Tabulky vytvořené v
hive_metastore
můžou obsahovat pouze alfanumerické znaky a podtržítka (INVALID_SCHEMA_OR_RELATION_NAME). table_specification
Tato volitelná klauzule definuje seznam sloupců, jejich typů, vlastností, popisů a omezení sloupců.
Pokud nedefinujete sloupce schématu tabulky, je nutné zadat
AS query
neboLOCATION
.-
Jedinečný název sloupce
Identifikátory sloupců tabulek Delta Lake bez vlastnosti mapování sloupců (
'delta.columnMapping.mode' = 'name'
) nesmí obsahovat mezery ani následující znaky:, ; { } ( ) \n \t =
.Identifikátory sloupců tabulky
AVRO
musí začínat podtržítkem (_
) nebo písmenem Unicode (včetně písmen jiného typu než ASCII) a za ním musí následovat kombinace písmen Unicode, číslic a podtržítka. -
Určuje datový typ sloupce. Ne všechny datové typy podporované službou Azure Databricks jsou podporovány všemi zdroji dat.
NOT NULL
Pokud je specifikováno, sloupec nepřijme
NULL
hodnoty. Tato klauzule je podporovaná pouze pro tabulky Delta Lake.collate collation_name
platí pro:
Databricks SQL
Databricks Runtime 16.1 a vyšší
Pro
STRING
column_type
volitelně pojmenovává kolaci, která se má použít pro operace porovnání a řazení v tomto sloupci. Výchozí kolace jeUTF8_BINARY
.VYGENEROVÁNO VŽDY JAKO ( výraz )
Při zadání této klauzule je hodnota tohoto sloupce určena zadaným
expr
.expr
se můžou skládat z literálů, identifikátorů sloupců v tabulce a deterministických integrovaných funkcí nebo operátorů SQL s výjimkou:- Agregační funkce
- Analytické okenní funkce
- funkce okna Řazení
- Funkce generátoru hodnotných tabulek
VYGENEROVÁNO { ALWAYS | VE VÝCHOZÍM NASTAVENÍ } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]
Platí pro:
Databricks SQL
Databricks Runtime 10.4 LTS a vyšší
Definuje sloupec identity. Při zápisu do tabulky, pokud nezadáte hodnoty pro sloupec identity, bude automaticky přiřazena jedinečná hodnota, která se statisticky zvyšuje (nebo snižuje, pokud je
step
záporné). Tato klauzule je podporovaná pouze pro tabulky Delta Lake. Tuto klauzuli lze použít pouze pro sloupce s datovým typem BIGINT.Automaticky přiřazené hodnoty začínají
start
a zvyšují se ostep
. Přiřazené hodnoty jsou jedinečné, ale nejsou zaručené, že budou souvislé. Oba parametry jsou volitelné a výchozí hodnota je 1.step
nemůže být0
.Pokud jsou automaticky přiřazené hodnoty nad rámec rozsahu typu sloupce identity, dotaz selže.
Při použití
ALWAYS
nemůžete pro sloupec identity zadat vlastní hodnoty.Následující operace nejsou podporovány:
-
PARTITIONED BY
identifikační sloupec -
UPDATE
identifikační sloupec
Poznámka:
Deklarace sloupce identity v tabulce Delta zakáže souběžné transakce. Sloupce identity používejte jenom v případech, kdy nejsou vyžadovány souběžné zápisy do cílové tabulky.
-
VÝCHOZÍ default_expression
Platí pro:
Databricks SQL
Databricks Runtime 11.3 LTS a vyšší
Definuje hodnotu
DEFAULT
pro sloupec, který se používá proINSERT
,UPDATE
aMERGE ... INSERT
, pokud sloupec není zadaný.Pokud není zadán žádný výchozí
DEFAULT NULL
se použije pro sloupce s možnou hodnotou null.default_expression
mohou se skládat z literálů a integrovaných funkcí nebo operátorů SQL s výjimkou:- Agregační funkce
- Analytické okenní funkce
- funkce okna Řazení
- Funkce generátoru hodnotných tabulek
Nesmí obsahovat ani
default_expression
poddotaz.DEFAULT
podporuje se proCSV
,JSON
PARQUET
, aORC
zdroje.COLUMN_COMMENT KOMENTÁŘE
Řetězcový literál popis sloupce.
-
Přidá omezení primárního klíče nebo cizího klíče do sloupce v tabulce Delta Lake.
Omezení nejsou podporována pro tabulky v katalogu
hive_metastore
.Chcete-li přidat omezení kontroly do tabulky Delta Lake, použijte ALTER TABLE.
-
platí pro:
Databricks SQL
Databricks Runtime 12.2 LTS a vyšší,
Unity Catalog.
Důležité
Tato funkce je ve verzi Public Preview.
Přidá funkci masky sloupce pro anonymizaci citlivých dat. Všechny následné dotazy z tohoto sloupce obdrží výsledek vyhodnocení této funkce místo původní hodnoty sloupce. To může být užitečné pro účely podrobného řízení přístupu, kde může funkce zkontrolovat identitu nebo členství ve skupině vyvolávajícího uživatele a rozhodnout se, zda by měla být hodnota redigována.
-
Přidá omezení primárního informačního klíče nebo cizího informačního klíče do tabulky Delta Lake.
U tabulek v katalogu
hive_metastore
nejsou podporována klíčová omezení.Chcete-li přidat omezení kontroly do tabulky Delta Lake, použijte ALTER TABLE.
-
USING data_source
data_source
může být buď formát souboru, nebo federovaný zdroj dat JDBC.Formát souboru musí být jeden z následujících:
AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
Pro jakýkoli jiný formát než
DELTA
je nutné zadat takéLOCATION
, pokud katalog tabulek neníhive_metastore
.Podporují se následující federované zdroje JDBC:
POSTGRESQL
SQLSERVER
MYSQL
BIGQUERY
NETSUITE
ORACLE
REDSHIFT
SNOWFLAKE
SQLDW
SYNAPSE
SALESFORCE
SALESFORCE_DATA_CLOUD
TERADATA
WORKDAY_RAAS
MONGODB
Při zadávání federovaného zdroje JDBC musíte také zadat
OPTIONS
klauzuli s potřebnými informacemi o připojení. Další informace o dotazování federovaných zdrojů dat najdete v tématu Dotazování databází pomocí JDBC .Databricks Runtime podporují následující další formáty souborů, které se mají použít pro tabulku:
JDBC
LIBSVM
- plně kvalifikovaný název třídy vlastní implementace
org.apache.spark.sql.sources.DataSourceRegister
.
Pokud
USING
je vynechán, výchozí hodnota jeDELTA
.Toto se vztahuje na: Databricks Runtime
Podporuje se vytvoření tabulky Hive SerDe pomocí
HIVE
v Databricks Runtime. Můžete zadat Hive specifickéfile_format
arow_format
použítOPTIONS
klauzuli, což je mapa řetězců bez rozlišování malých a velkých písmen. Jedná se ooption_keys
:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
table_clauses
Volitelně můžete zadat umístění, dělení, clustering, možnosti, komentáře a vlastnosti definované uživatelem pro novou tabulku. Každou dílčí klauzuli lze zadat pouze jednou.
-
Volitelná klauzule pro rozdělení tabulky podle podmnožiny sloupců.
Poznámka:
Pokud tabulku Delta nedefinujete, umístí se sloupce dělení na konec tabulky, i když jsou definované dříve ve specifikaci sloupce. Zvažte použití
CLUSTER BY
místoPARTITIONED BY
pro tabulky Delta. -
Platí pro:
Databricks SQL
Databricks Runtime 13.3 a novější
Volitelná klauzule pro seskupení Delta tabulky podle podmnožiny sloupců. Pokud chcete seskupit jiné tabulky, použijte
clustered_by_clause
.Seskupování kapalin Delta Lake nelze kombinovat s
PARTITIONED BY
. clustered_by_clause
Volitelně seskupte tabulku nebo každou část do pevného počtu hashovacích košů pomocí podmnožiny sloupců.
Clustering není podporován pro tabulky Delta Lake.
CLUSTERED BY
Určuje sadu sloupců, podle kterých se mají jednotlivé oddíly seskupit, nebo tabulku, pokud není zadáno žádné dělení.
-
Identifikátor odkazující na
column_identifier
v tabulce. Pokud zadáte více než jeden sloupec, nesmí existovat žádné duplicity. Vzhledem k tomu, že clustering funguje na úrovni oddílu, nesmíte sloupec oddílu pojmenovat také jako sloupec clusteru.
-
SEŘAZENO PODLE
Volitelně udržuje pořadí řazení pro řádky v kontejneru.
sort_column
Sloupec, podle kterého chcete kontejner seřadit. Sloupec nesmí být sloupec oddílu. Sloupce řazení musí být jedinečné.
ASC nebo DESC
Volitelně určuje, jestli
sort_column
je seřazený vzestupně (ASC
) nebo sestupně (DESC
). Výchozí hodnoty jsouASC
.
INTO num_buckets BUCKETS
Literál INTEGER určující počet kbelíků, do kterých se rozdělí každý oddíl (nebo tabulka, pokud není zadáno žádné dělení).
CESTA UMÍSTĚNÍ [ WITH ( CREDENTIAL credential_name ) ]
Volitelná cesta k adresáři, kde jsou uložena data tabulky, což může být cesta v distribuovaném úložišti.
path
musí být literál STRING. Pokud nezadáte žádné umístění, považuje se tabulka zamanaged table
a Azure Databricks vytvoří výchozí umístění tabulky.Uvedení umístění tím vytvoří z tabulky externí tabulku.
Pro tabulky, které se nenachází v katalogu
hive_metastore
, musí být tabulkypath
chráněny externím umístěním, pokud nejsou zadány platné přihlašovací údaje úložiště.Nelze vytvořit externí tabulky v umístěních, která se překrývají s umístěním spravovaných tabulek.
Pro tabulku Delta Lake se konfigurace tabulky dědí z
LOCATION
, pokud existují data. Proto pokud jsou pro tabulky Delta Lake zadány klauzuleTBLPROPERTIES
,table_specification
neboPARTITIONED BY
, musí přesně odpovídat datům o umístění Delta Lake.-
Nastaví nebo obnoví jednu nebo více uživatelsky definovaných možností tabulky.
TABLE_COMMENT KOMENTÁŘE
Řetězcový literál popisující tabulku.
-
Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.
-
platí pro:
Databricks SQL
Databricks Runtime 12.2 LTS a vyšší,
Unity Catalog.
Přidá do tabulky funkci filtru řádků. Všechny následné dotazy k této tabulce obdrží podmnožinu řádků, ve kterých se funkce vyhodnotí jako PRAVDA. To může být užitečné pro jemné řízení přístupu, kdy funkce může zkontrolovat identitu nebo členství ve skupině vyvolávajícího uživatele a rozhodnout se, jestli se mají určitě řádky filtrovat.
-
-
Tato volitelná klauzule naplní tabulku pomocí dat z
query
. Pokud zadáte,query
nesmíte také zadattable_specification
hodnotu . Schéma tabulky je odvozeno z dotazu.Všimněte si, že Azure Databricks přepíše podkladový zdroj dat dat vstupním dotazem, aby se zajistilo, že tabulka bude obsahovat přesně stejná data jako vstupní dotaz.
Příklady
-- 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 a table with a string column with a case-insensitive collation.
> CREATE TABLE names(name STRING COLLATE 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;