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
не разрешён.-
Имя создаваемой таблицы. Имя не должно включать темпоральную спецификацию или спецификацию опций. Если имя не задано, таблица создается в текущей схеме.
Таблицы, созданные в
hive_metastore
, могут содержать только буквенно-цифровые символы ASCII и символы подчеркивания (INVALID_SCHEMA_OR_RELATION_NAME). спецификация таблицы
Это необязательное предложение определяет список столбцов, их типов, свойств, описаний и ограничений столбцов.
Если столбцы не определяются схемой таблицы, необходимо указать либо
AS query
, либоLOCATION
.-
Уникальное имя столбца.
Идентификаторы столбцов таблиц 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 и выше.
Для
STRING
column_type
при необходимости присваивает имена параметров сортировки для применения для операций сравнения и сортировки в этом столбце. Сортировка по умолчанию — это таблицаdefault_collation_name
.ГЕНЕРИРУЕТСЯ ВСЕГДА КАК ( expr )
При указании этого условия значение этого столбца определяется задаваемым
expr
.DEFAULT COLLATION
таблицы должен бытьUTF8_BINARY
.expr
могут состоять из литералов, идентификаторов столбцов в таблице и детерминированных встроенных функций ИЛИ операторов SQL, кроме следующих:- Агрегатные функции
- аналитические оконные функции
- Функции окна ранжирования
- Генераторные функции, возвращающие табличные значения
- Столбцы с кодировкой, отличной от
UTF8_BINARY
Кроме того,
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
Строковый литерал для описания столбца.
-
Добавляет ограничение первичного ключа или внешнего ключа в столбец в таблице Delta Lake.
Ограничения не поддерживаются для таблиц в каталоге
hive_metastore
.Чтобы добавить ограничение проверки в таблицу Delta Lake, используйте ALTER TABLE.
-
применяется:
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. -
Область применения:
Databricks SQL
Databricks Runtime 13.3 и выше
Необязательное предложение для кластеризации таблицы Delta с помощью подмножества столбцов. Для кластеризации других таблиц используется
clustered_by_clause
.Кластеризация жидкости Delta Lake не может быть объединена с
PARTITIONED BY
. клаузула кластеризации
При необходимости кластеризует таблицу или каждую секцию в фиксированное число хэш-контейнеров с помощью подмножества столбцов.
Кластеризация не поддерживается для таблиц Delta Lake.
СГРУППИРОВАНО ПО
Задает набор столбцов, по которым выполняется кластеризация каждой секции, или таблицы, если секционирование не указано.
-
Идентификатор, ссылающийся на
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.-
Задает или сбрасывает один или несколько пользовательских параметров таблицы.
КОММЕНТАРИЙ table_comment
Строковый литерал для описания таблицы.
-
При необходимости задает одно или несколько свойств, определяемых пользователем.
СОРТИРОВКА ПО УМОЛЧАНИЮ default_collation_name
применяется:
Databricks Runtime 16.3 и выше
Определяет параметры сортировки по умолчанию, которые следует использовать для:
-
STRING
столбцы и поля таблицы - выражение
DEFAULT
- Тело
CREATE TABLE AS query
Для ограничений
CHECK
и выражений, созданных в столбцах, требуется сортировка по умолчаниюUTF8_BINARY
.Если не указано, сортировка по умолчанию –
UTF8_BINARY
.-
-
применяется:
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;