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


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.

Параметры

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

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

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

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

    • column_identifier

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

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

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

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

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

    • NOT NULL

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

    • COLLATE 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 default_expression

      Область применения:флажок 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 в таблице. Если указать несколько столбцов, не должно быть дубликатов. Так как кластеризация работает на уровне секции, не следует называть столбец секции также в качестве столбца кластера.

      • 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, если данные присутствуют. Таким образом, если для таблиц Delta Lake указаны предложения TBLPROPERTIES, table_specificationили PARTITIONED BY, они должны точно соответствовать данным о расположении Delta Lake.

    • OPTIONS

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

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

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

    • TBLPROPERTIES

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

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

      применяется:отмечен галочкой 'Да' Databricks Runtime 16.3 и выше

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

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

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

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

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