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


CREATE TABLE [ИСПОЛЬЗОВАНИЕ]

Применяется к:да отмечен флажком 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 |
    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 }

До Databricks Runtime 16.1 START WITH должен предшествовать INCREMENT BY.

Параметры

  • ЗАМЕНЯТЬ

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

    REPLACE сохраняет журнал таблиц , а также предоставленные привилегии.

    Примечание.

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

  • ВНЕШНИЙ

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

  • ЕСЛИ НЕ СУЩЕСТВУЕТ

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

    IF NOT EXISTS не может сосуществовать с REPLACE, что означает CREATE OR REPLACE TABLE IF NOT EXISTS не разрешён.

  • table_name

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

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

  • спецификация таблицы

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

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

    • column_identifier

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

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

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

    • тип_столбца

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

    • НЕ NULL

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

    • Коллация collation_name

      Применяется к:отмечено галочкой да Databricks SQL отмечено галочкой да Databricks Runtime 16.1 и более поздним версиям

      Для STRINGcolumn_type при необходимости присваивает имена параметров сортировки для применения для операций сравнения и сортировки в этом столбце. Сортировка по умолчанию — это таблица default_collation_name.

    • ГЕНЕРИРУЕТСЯ ВСЕГДА КАК ( expr )

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

      DEFAULT COLLATION таблицы должен быть UTF8_BINARY.

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

      Также expr не должно содержать вложенного запроса.

    • ГЕНЕРИРУЕТСЯ { ВСЕГДА | ПО УМОЛЧАНИЮ } КАК ИДЕНТИФИКАТОР [ ( [ НАЧИНАЯ С start ] [ УВЕЛИЧИВАЯ НА step ] ) ]

      Применяется к:отмечено да Databricks SQL отмечено да Databricks Runtime 10.4 LTS и выше

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

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

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

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

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

      • PARTITIONED BY идентификационный столбец
      • UPDATE идентификационный столбец

      Примечание.

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

    • DEFAULT выражение_по_умолчанию

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

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

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

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

      Также default_expression не должно содержать вложенного запроса.

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

    • КОММЕНТАРИЙ column_comment

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

    • column_constraint

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

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

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

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

      Применяется к:отмечено галочкой 'да' Databricks SQL отмечено галочкой 'да' Databricks Runtime 12.2 LTS и выше отмечено галочкой 'да' только каталог Unity.

      Внимание

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

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

    • ограничение_таблицы

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

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

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

  • ИСПОЛЬЗОВАНИЕ 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. Можно указать специфичные для Hive параметры file_format и row_format, используя предложение OPTIONS, которое представляет собой не учитывающую регистр строковую карту. option_keys следующие:

    • FILEFORMAT
    • INPUTFORMAT
    • OUTPUTFORMAT
    • SERDE
    • FIELDDELIM
    • ESCAPEDELIM
    • MAPKEYDELIM
    • LINEDELIM
  • таблица_условий

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

    • СЕКЦИОНИРОВАНО ПО

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

      Примечание.

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

    • CLUSTER BY

      Область применения: отметка да Databricks SQL отметка да Databricks Runtime 13.3 и выше

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

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

    • клаузула кластеризации

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

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

      • КЛАСТЕРИЗОВАНО ПО

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

        • cluster_column

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

      • СОРТИРОВКА ПО

        Опционально поддерживает порядок сортировки строк в бакете.

        • sort_column

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

        • ASC или DESC

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

      • В num_buckets КОРЗИНЫ

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

    • Путь LOCATION [ WITH ( CREDENTIAL credential_name ) ]

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

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

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

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

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

    • ПАРАМЕТРЫ

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

    • КОММЕНТАРИЙ table_comment

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

    • TBLPROPERTIES

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

    • ПАРАМЕТРЫ СОРТИРОВКИ ПО УМОЛЧАНИЮ default_collation_name

      Применяется к:отмечено галочкой Databricks SQL отмечено галочкой Databricks Runtime 16.3 и более поздних версий

      Определяет параметры сортировки по умолчанию, которые следует использовать для:

      • STRING столбцы и поля таблицы
      • выражение DEFAULT
      • Тело CREATE TABLE AS query

      Для ограничений CHECK и выражений, созданных в столбцах, требуется сортировка по умолчанию UTF8_BINARY.

      Если не указано, сортировка по умолчанию – UTF8_BINARY.

    • С предложением ROW FILTER WITH

      Применяется к:отмечено галочкой 'да' Databricks SQL отмечено галочкой 'да' Databricks Runtime 12.2 LTS и выше отмечено галочкой 'да' только каталог Unity.

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

  • AS ЗАПРОС

    Это необязательное предложение заполняет таблицу с помощью данных из 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 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;