Поделиться через


CREATE TABLE [USING]

Область применения: флажок Databricks SQL флажок Databricks Runtime

Определяет управляемую или внешнюю таблицу, при необходимости используя источник данных.

Синтаксис

{ { [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 }

Параметры

  • REPLACE

    Если задано, заменит таблицу и его содержимое, если она уже существует. Это предложение поддерживается только для таблиц Delta Lake.

    REPLACEсохраняет журнал таблиц.

    Примечание.

    Azure Databricks настоятельно рекомендует использовать REPLACE вместо удаления и повторного создания таблиц Delta Lake.

  • EXTERNAL

    При указании создает внешнюю таблицу. При создании внешней таблицы необходимо также указать LOCATION предложение. При удалении внешней таблицы файлы не LOCATION будут удалены.

  • IF NOT EXISTS

    Если этот параметр указан и таблица с таким именем уже существует, инструкция игнорируется.

    IF NOT EXISTS не может сосуществовать с REPLACE, что означает CREATE OR REPLACE TABLE IF NOT EXISTS недопустимое использование.

  • table_name

    Имя создаваемой таблицы. Имя не должно включать темпоральную спецификацию или спецификацию параметров. Если имя не указано полностью, таблица создается в текущей схеме.

    Таблицы, созданные в hive_metastore ней, могут содержать только буквенно-цифровые символы ASCII и символы подчеркивания (INVALID_SCHEMA_OR_RELATION_NAME).

  • table_specification

    Это необязательное предложение определяет список столбцов, их типы, свойства, описания и ограничения.

    Если не определить столбцы, схема таблицы должна указывать AS query или LOCATION.

    • column_identifier

      Уникальное имя столбца.

      Идентификаторы столбцов таблиц Delta Lake без свойства сопоставления столбцов ('delta.columnMapping.mode' = 'name') не должны содержать пробелы или следующие символы: , ; { } ( ) \n \t =

      Идентификаторы столбцов AVRO таблицы должны начинаться с символа подчеркивания (_) или буквы Юникода (включая буквы, отличные от ASCII) и следовать сочетанию букв Юникода, цифр и подчеркивания.

    • column_type

      Задает тип данных столбца. Не все типы данных, поддерживаемые Azure Databricks, поддерживаются всеми источниками данных.

    • NOT NULL

      Если указан этот параметр, столбец не будет допускать значения NULL. Это предложение поддерживается только для таблиц Delta Lake.

    • GENERATED ALWAYS AS ( expr )

      При указании этого предложения значение этого столбца определяется указанным значением expr.

      expr может состоять из литералов, идентификаторов столбцов в таблице и детерминированных встроенных функций или операторов SQL, кроме:

      Кроме того, expr не должен содержать какой-либо вложенный запрос.

    • GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( [ START WITH start ] [ INCREMENT BY step ] ) ]

      Область применения: флажок Databricks SQL флажок Databricks Runtime 10.4 LTS и выше

      Определяет столбец идентификаторов. При записи в таблицу и отсутствии значений для столбца идентификаторов ему автоматически присваивается уникальное и статистически увеличивающееся (или уменьшающееся при отрицательном значении step) значение. Это предложение поддерживается только для таблиц Delta Lake. Это предложение может использоваться только для столбцов с типом данных BIGINT.

      Автоматически назначаемые значения начинаются с start и увеличиваются на step. Назначаемые значения являются уникальными, но не обязательно должны быть последовательными. Оба параметра являются необязательными, а значение по умолчанию — 1. step не может иметь значение 0.

      Если автоматически назначенные значения выходят за пределы диапазона типа столбца идентификаторов, запрос завершится ошибкой.

      Если используется ALWAYS, нельзя предоставить собственные значения для столбца идентификаторов.

      Следующие операции не поддерживаются:

      • PARTITIONED BY столбец удостоверений
      • UPDATE столбец удостоверений

      Примечание.

      Объявление столбца удостоверений в таблице Delta отключает одновременные транзакции. Используйте только столбцы удостоверений в случаях использования, когда одновременные записи в целевую таблицу не требуются.

    • DEFAULT_EXPRESSION ПО УМОЛЧАНИЮ

      Область применения: флажок Databricks SQL флажок Databricks Runtime 11.3 LTS и выше

      Определяет значение DEFAULT для столбца, который используется в INSERT, UPDATE и MERGE ... INSERT, когда столбец не указан.

      Если значение по умолчанию не указано, для столбцов, допускающих значение NULL, применяется DEFAULT NULL.

      default_expression может состоять из литералов и встроенных функций SQL или операторов за исключением следующих:

      Кроме того, default_expression не должен содержать какой-либо вложенный запрос.

      DEFAULT поддерживается для источников CSV, JSON, PARQUET и ORC.

    • COMMENT column_comment

      Строковый литерал для описания столбца.

    • column_constraint

      Добавляет ограничение первичного ключа или внешнего ключа в столбец таблицы Delta Lake.

      Ограничения не поддерживаются для таблиц в каталоге hive_metastore.

      Чтобы добавить ограничение проверки в таблицу Delta Lake, используйте инструкцию ALTER TABLE.

    • Предложение MASK

      Применимо к:флажок Databricks SQL флажок Databricks Runtime 12.2 LTS и более поздних флажок версий каталога Unity

      Внимание

      Эта функция предоставляется в режиме общедоступной предварительной версии.

      Добавляет функцию маски столбца для анонимизации конфиденциальных данных. Все последующие запросы из этого столбца получают результат оценки этой функции по столбцу вместо исходного значения столбца. Это может быть полезно для точного контроля доступа, где функция может проверить удостоверение или членство в группах вызывающего пользователя, чтобы решить, следует ли изменить значение.

    • table_constraint

      Добавляет в таблицу Delta Lake информационный первичный ключ или информационные ограничения внешнего ключа.

      Ограничения ключей не поддерживаются для таблиц в каталоге hive_metastore .

      Чтобы добавить ограничение проверки в таблицу Delta Lake, используйте инструкцию ALTER TABLE.

  • USING data_source

    data_source может быть файл-формат или федеративный источник данных JDBC.

    Формат файла должен быть одним из следующих:

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

    Для любого формата файла, отличного от того, что DELTA необходимо также указать LOCATION , если каталог таблиц не имеет значения hive_metastore.

    Поддерживаются следующие федеративные источники JDBC:

    • POSTGRESQL
    • SQLSERVER
    • MYSQL
    • BIGQUERY
    • NETSUITE
    • ORACLE
    • REDSHIFT
    • SNOWFLAKE
    • SQLDW
    • SYNAPSE
    • SALESFORCE
    • SALESFORCE_DATA_CLOUD
    • TERADATA
    • WORKDAY_RAAS
    • MONGODB

    При указании федеративного источника JDBC необходимо также указать OPTIONS предложение с необходимыми сведениями о подключении. Дополнительные сведения о запросе федеративных источников данных см. в базах данных запросов с помощью JDBC .

    В Databricks Runtime поддерживаются следующие дополнительные форматы файлов для таблицы:

    • JDBC
    • LIBSVM
    • Полное имя класса пользовательской реализации org.apache.spark.sql.sources.DataSourceRegister.

    Если USING не указывается, по умолчанию используется DELTA.

    Ниже приведено следующее: Databricks Runtime

    HIVE поддерживается для создания таблицы Hive SerDe в Databricks Runtime. Можно указать параметры file_format и row_format для Hive, используя для этого предложение OPTIONS. Оно представляет собой сопоставление в виде строки без учета регистра. option_keys являются:

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • table_clauses

    При необходимости укажите расположение, секционирование, кластеризацию, параметры, комментарии и определяемые пользователем свойства для новой таблицы. Каждое вложенное предложение может быть указано только один раз.

    • PARTITIONED BY

      Необязательное предложение для секционирования таблицы по подмножеству столбцов.

      Примечание.

      Если таблица Delta не определена, столбцы секционирования помещаются в конец таблицы, даже если они определены ранее в спецификации столбцов. Рекомендуется использовать CLUSTER BY вместо PARTITIONED BY таблиц Delta.

    • CLUSTER BY

      Область применения: флажок Databricks SQL флажок Databricks Runtime 13.3 и более поздних версий

      Необязательное предложение для кластеризации таблицы Delta с помощью подмножества столбцов. Для кластеризации других таблиц используется clustered_by_clause.

      Кластеризация жидкости Delta Lake не может быть объединена с PARTITIONED BY.

    • clustered_by_clause

      При необходимости можно кластеризовать таблицу или каждую секцию по фиксированному количеству хэш-контейнеров, используя подмножество столбцов.

      Кластеризация не поддерживается для таблиц Delta Lake.

      • CLUSTERED BY

        Указывает набор столбцов для кластеризации каждой секции или таблицы, если секционирование не указано.

        • cluster_column

          Идентификатор, ссылающийся на объект column_identifier в таблице. При указании более чем одного столбца не должно быть дубликатов. Так как кластеризация проводится на уровне секций, не следует именовать столбец секционирования так же как столбец кластера.

      • SORTED BY

        При необходимости поддерживает порядок сортировки записей в контейнере.

        • sort_column

          Столбец, по которому сортируется контейнер. Столбец не должен быть столбцом секционирования. Столбцы сортировки должны быть уникальными.

        • ASC или DESC

          При необходимости указывает, каким образом сортируется sort_column: в порядке возрастания (ASC) или убывания (DESC). Значение по умолчанию — ASC.

      • INTO num_buckets BUCKETS

        Литерал INTEGER, указывающий количество сегментов, в которые делится каждая секция (или таблица, если секционирование не указано).

    • LOCATION path [ WITH ( CREDENTIAL credential_name ) ]

      Необязательный путь к каталогу, в котором хранятся данные таблиц, что может быть путем к распределенному хранилищу. path должен быть СТРОКОВЫМ литералом. Если не указать расположение, таблица считается managed table, а Azure Databricks создает расположение таблицы по умолчанию.

      Указание расположения делает таблицу внешней таблицей.

      Для таблиц, которые не находятся в hive_metastore каталоге, таблица path должна быть защищена внешним расположением , если не указана допустимая учетная запись хранения.

      Нельзя создавать внешние таблицы в расположениях, перекрывающихся расположением управляемых таблиц.

      Для таблицы Delta Lake конфигурация таблицы наследуется от LOCATION, если данные представлены. Поэтому при указании предложения TBLPROPERTIES, table_specification или PARTITIONED BY для таблиц Delta Lake они должны точно совпадать с данными расположения Delta Lake.

    • OPTIONS

      Задает или сбрасывает один или несколько параметров таблицы, определяемых пользователем.

    • COMMENT table_comment

      Строковый литерал для описания таблицы.

    • TBLPROPERTIES

      При необходимости задает одно или несколько свойств, определяемых пользователем.

    • Предложение WITH ROW FILTER

      Применимо к:флажок Databricks SQL флажок Databricks Runtime 12.2 LTS и более поздних флажок версий каталога Unity

      Добавляет функцию фильтра строк в таблицу. Все последующие запросы из этой таблицы получат подмножество строк, где функция оценивает логическое значение TRUE. Это может быть полезно для точного контроля доступа, где функция может проверить удостоверение или членство в группах вызывающего пользователя, чтобы решить, следует ли фильтровать определенные строки.

  • AS query

    Это необязательное предложение заполняет таблицу с помощью данных из query. При указании query не следует также указывать table_specification. Схема таблицы является производным от запроса.

    Обратите внимание, что Azure Databricks перезаписывает базовый источник данных данными входного запроса, чтобы убедиться, что таблица создана, содержит те же данные, что и входной запрос.

Примеры

-- 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;