Udostępnij za pośrednictwem


CREATE TABLE [UŻYWANIE]

Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak 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 |
    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.

    REPLACE zachowuje zarówno historię tabeli , jak i przyznane uprawnienia.

    Uwaga

    Usługa Azure Databricks zdecydowanie zaleca używanie REPLACE zamiast 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 lokalizacji LOCATION 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 nie może współistnieć z REPLACE, co oznacza, że CREATE OR REPLACE TABLE IF NOT EXISTS nie jest dozwolone.

  • table_name

    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).

    Tabele Iceberg należy utworzyć w katalogu Unity. Tworzenie tabel Iceberg w hive_metastore nie 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, albo LOCATION.

    • column_identifier

      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 AVRO tabel 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 ICEBERG muszą 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ń.

    • typ_kolumny

      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 NULL wartości. Ta klauzula jest obsługiwana tylko w przypadku tabel Delta i Iceberg.

    • SORTOWANIE collation_name

      Dotyczy:zaznaczone jako tak Databricks SQL zaznaczone jako tak Databricks Runtime 16.1 i nowsze

      Opcjonalnie, 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 tabela default_collation_name.

    • WYGENEROWANE ZAWSZE JAKO ( wyrażenie )

      Gdy określisz tę klauzulę, wartość tej kolumny jest ustalana przez określony expr.

      DEFAULT COLLATION tabeli musi być UTF8_BINARY.

      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:

      Ponadto expr nie może zawierać żadnego podzapytania.

    • GENERATED { ALWAYS | DOMYŚLNIE } JAKO IDENTITY [ ( [ ROZPOCZNIJ OD start ] [ ZWIĘKSZ O krok ] ) ]

      Dotyczy:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 10.4 LTS i nowsze

      Definiuje 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 step jest 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 start i zwiększają o step. 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.

      Kiedy ALWAYS jest używany, 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ści
      • UPDATE kolumna 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:zaznacz pole wyboru oznaczone jako tak Databricks SQL zaznacz pole wyboru oznaczone jako tak Databricks Runtime 11.3 LTS i nowsze

      DEFAULT Definiuje wartość kolumny, która jest używana w INSERTkolumnie , UPDATEi MERGE ... INSERT gdy kolumna nie jest określona.

      Jeśli nie określono wartości domyślnej, DEFAULT NULL zostanie zastosowany dla kolumn dopuszczających wartości null.

      default_expression może składać się z literałów i wbudowanych funkcji LUB operatorów SQL, z wyjątkiem:

      Ponadto default_expression nie może zawierać żadnego podzapytania.

      DEFAULT jest obsługiwany dla źródeł CSV, JSON, PARQUET i ORC.

    • KOMENTARZ KOLUMNY

      Ciąg znaków opisujący kolumnę.

    • column_constraint

      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.

    • Klauzula "MASK"

      Dotyczy:oznaczony jako tak Databricks SQL oznaczony jako tak Databricks Runtime 12.2 LTS i nowsze oznaczony jako tak tylko Unity Catalogu

      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ść.

    • ograniczenie tabeli

      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_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
    • ICEBERG
    • JSON
    • ORC
    • PARQUET
    • TEXT

    W przypadku dowolnego formatu pliku innego niż DELTA lub ICEBERG, 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 kwalifikowaną nazwę klasy niestandardowej implementacji org.apache.spark.sql.sources.DataSourceRegister.

    Jeśli USING zostanie pominięty, wartość domyślna to DELTA.

    Dotyczy to następujących elementów: Databricks Runtime

    HIVE jest obsługiwane do tworzenia tabeli Hive SerDe w środowisku Databricks Runtime. Można określić specyficzne dla file_format programu Hive i row_format użyć OPTIONS klauzuli , która jest mapą ciągów bez uwzględniania wielkości liter. Oto option_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.

    • PODZIELONE PRZEZ

      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.

    • CLUSTER BY

      Dotyczy: oznaczone jako tak Databricks SQL oznaczone jako tak Databricks Runtime 13.3 lub nowsze

      Klauzula 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.

    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 BY zamiast 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.

        • cluster_column

          Identyfikator, który odnosi się do column_identifier 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.

        • 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 to ASC.

      • 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. path musi być literałem typu STRING. Jeśli nie określisz lokalizacji, tabela zostanie uznana za managed 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ślone TBLPROPERTIES, table_specification lub PARTITIONED BY klauzule muszą dokładnie odpowiadać istniejącym danym w lokalizacji Delta.

      W przypadku tabel Iceberg klauzula LOCATION nie jest obsługiwana. Obce tabele Iceberg są rejestrowane automatycznie, gdy tworzysz zagraniczny katalog. Należy utworzyć zarządzane tabele Iceberg bez określania lokalizacji.

    • OPCJE

      Ustawia lub resetuje co najmniej jedną opcję tabeli zdefiniowanej przez użytkownika.

    • Komentarz do tabeli

      Literał ciągowy opisujący tabelę.

    • TBLPROPERTIES

      Opcjonalnie ustawia co najmniej jedną właściwość zdefiniowaną przez użytkownika.

    • DOMYŚLNE SORTOWANIE default_collation_name

      Dotyczy:oznaczono tak Databricks SQL oznaczono tak Databricks Runtime 16.3 lub nowszego

      Definiuje sortowanie domyślne do użycia w następujących celach:

      • STRING kolumny i pola tabeli
      • wyrażenie DEFAULT
      • Część główna CREATE TABLE AS query

      CHECK ograniczenia i wygenerowane wyrażenia kolumn wymagają domyślnego sortowania UTF8_BINARY.

      Jeśli nie zostanie określony, sortowanie domyślne to UTF8_BINARY.

    • Z klauzulą ROW FILTER

      Dotyczy:oznaczony jako tak Databricks SQL oznaczony jako tak Databricks Runtime 12.2 LTS i nowsze oznaczony jako tak tylko Unity Catalogu

      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.

  • Zapytanie AS

    Ta klauzula opcjonalna wypełnia tabelę przy użyciu danych z query. Jeśli określisz query, 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;