Sdílet prostřednictvím


CREATE TABLE [USING]

Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Definuje spravovanou nebo externí tabulku, volitelně 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 |
    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

  • NAHRADIT

    Pokud je tato hodnota zadaná, nahradí tabulku a její obsah, pokud již existuje. Tato klauzule je podporovaná pouze pro tabulky Delta Lake.

    REPLACEzachová historii tabulek.

    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 zadaná, vytvoří externí tabulku. Při vytváření externí tabulky musíte také zadat klauzuli LOCATION . Když se externí tabulka zahodí, soubory v této LOCATION tabulce se nezahodí.

  • POKUD NEEXISTUJE

    Pokud je zadána tabulka se stejným názvem již existuje, příkaz bude ignorován.

    IF NOT EXISTS nemůže existovat společně s REPLACE, což znamená, že CREATE OR REPLACE TABLE IF NOT EXISTS není povoleno.

  • table_name

    Název tabulky, kterou chcete vytvořit. Název nesmí obsahovat dočasnou specifikaci. Pokud název není kvalifikovaný, vytvoří se tabulka v aktuálním schématu.

    Tabulky vytvořené v hive_metastore sadě 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, musíte zadat buď AS query nebo LOCATION.

    • column_identifier

      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 AVRO sloupců tabulky 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.

    • column_type

      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 zadaný sloupec, nepřijme NULL hodnoty. Tato klauzule je podporovaná pouze pro tabulky Delta Lake.

    • VYGENEROVÁNO VŽDY JAKO ( výraz )

      Při zadání této klauzule je hodnota tohoto sloupce určena zadaným expr.

      expr mohou se skládat z literálů, identifikátorů sloupců v tabulce a deterministické předdefinované funkce nebo operátory SQL s výjimkou:

      Nesmí obsahovat ani expr poddotaz.

    • VYGENEROVÁNO { ALWAYS | VE VÝCHOZÍM NASTAVENÍ } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]

      Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 10.4 LTS a vyšší

      Definuje sloupec identity. Při zápisu do tabulky a nezadá hodnoty pro sloupec identity se automaticky přiřadí jedinečná a statisticky se zvýší (nebo sníží, pokud step je 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 navyšují o step. 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ýt 0.

      Pokud jsou automaticky přiřazené hodnoty nad rámec rozsahu typu sloupce identity, dotaz selže.

      Při ALWAYS použití nemůžete pro sloupec identity zadat vlastní hodnoty.

      Následující operace nejsou podporovány:

      • PARTITIONED BY sloupec identity
      • UPDATE sloupec identity

      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: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 11.3 LTS a vyšší

      DEFAULT Definuje hodnotu pro sloupec, který se používá pro INSERTUPDATE, a MERGE ... INSERT pokud sloupec není zadán.

      Pokud není zadána DEFAULT NULL žádná výchozí hodnota, použije se 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:

      Nesmí obsahovat ani default_expression poddotaz.

      DEFAULTpodporuje se pro CSV, JSONPARQUET, a ORC zdroje.

    • COLUMN_COMMENT KOMENTÁŘE

      Řetězcový literál, který popisuje sloupec.

    • column_constraint

      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 hive_metastore katalogu.

      Pokud chcete přidat omezení kontroly do tabulky Delta Lake, použijte příkaz ALTER TABLE.

    • Klauzule MASK

      Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 LTS a vyšší zaškrtnutí označeného ano pouze katalog Unity

      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 jemně odstupňované účely řízení přístupu, ve kterých může funkce zkontrolovat členství v identitě nebo skupině vyvolání uživatele a rozhodnout se, jestli se má hodnota redigovat.

    • table_constraint

      Přidá do tabulky Delta Lake omezení informačního primárního klíče nebo informačního cizího klíče.

      Pro tabulky v hive_metastore katalogu nejsou podporována klíčová omezení.

      Pokud chcete přidat omezení kontroly do tabulky Delta Lake, použijte příkaz ALTER TABLE.

  • USING data_source

    Formát souboru, který se má použít pro tabulku. data_source musí být jedna z těchto možností:

    • AVRO
    • BINARYFILE
    • CSV
    • DELTA
    • JSON
    • ORC
    • PARQUET
    • TEXT

    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 je DELTA.

    Pro jakékoli data_source jiné, než DELTA je nutné zadat LOCATION , pokud katalog tabulek není hive_metastore.

    Toto se vztahuje na: Databricks Runtime

    HIVE podporuje se vytvoření tabulky Hive SerDe v Databricks Runtime. Můžete zadat Hive specifické file_format a row_format použít OPTIONS klauzuli, což je mapa řetězců bez rozlišování malých a velkých písmen. Jedná se o option_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.

    • DĚLENÉ PODLE

      Volitelná klauzule pro rozdělení tabulky podle podmnožina 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ísto PARTITIONED BY pro tabulky Delta.

    • CLUSTER BY

      Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 13.3 a novější

      Volitelná klauzule pro seskupení tabulky Delta podle podmnožina sloupců. Chcete-li seskupit jiné tabulky, použijte clustered_by_clause.

      Seskupování kapalin Delta Lake nelze kombinovat s PARTITIONED BY.

    • clustered_by_clause

      Volitelně můžete tabulku nebo každý oddíl seskupovat do pevného počtu kontejnerů hash pomocí podmnožina 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í.

        • cluster_column

          Identifikátor odkazující na column_identifier tabulku. 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 jsou ASC.

      • 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 managed table za tabulku a Azure Databricks vytvoří výchozí umístění tabulky.

      Zadání umístění vytvoří tabulku jako externí tabulku.

      U tabulek, které se nenachází v hive_metastore katalogu, musí být tabulka path chráněna externím umístěním , pokud není zadáno platné přihlašovací údaje úložiště.

      V umístěních, která se překrývají s umístěním spravovaných tabulek, nelze vytvořit externí tabulky.

      Pro tabulku Delta Lake je konfigurace tabulky zděděna z LOCATION dat, pokud jsou k dispozici data. Proto pokud jsou pro tabulky Delta Lake zadány nějaké TBLPROPERTIEStable_specificationklauzule nebo PARTITIONED BY klauzule, musí přesně odpovídat datům o umístění Delta Lake.

    • OPTIONS

      Nastaví nebo obnoví jednu nebo více uživatelsky definovaných možností tabulky.

    • TABLE_COMMENT KOMENTÁŘE

      Řetězcový literál, který popisuje tabulku.

    • TBLPROPERTIES

      Volitelně nastaví jednu nebo více uživatelem definovaných vlastností.

    • KLAUZULE WITH ROW FILTER

      Platí pro: zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime 12.2 LTS a vyšší zaškrtnutí označeného ano pouze katalog Unity

      Přidá do tabulky funkci filtru řádků. Všechny následné dotazy z této tabulky obdrží podmnožinu řádků, ve kterých se funkce vyhodnotí jako logická hodnota PRAVDA. To může být užitečné pro jemně odstupňované účely řízení přístupu, kdy může funkce zkontrolovat členství v identitě nebo skupině vyvolání uživatele a rozhodnout se, jestli se mají určité řádky filtrovat.

  • Dotaz AS

    Tato volitelná klauzule naplní tabulku pomocí dat z query. Pokud zadáte, query nesmíte také zadat table_specificationhodnotu . 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));