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
недопустимое использование.-
Имя создаваемой таблицы. Имя не должно содержать временную спецификацию. Если имя не указано полностью, таблица создается в текущей схеме.
Таблицы, созданные в
hive_metastore
ней, могут содержать только буквенно-цифровые символы ASCII и символы подчеркивания (INVALID_SCHEMA_OR_RELATION_NAME). table_specification
Это необязательное предложение определяет список столбцов, их типы, свойства, описания и ограничения.
Если не определить столбцы, схема таблицы должна указывать
AS query
илиLOCATION
.-
Уникальное имя столбца.
Идентификаторы столбцов таблиц Delta Lake без свойства сопоставления столбцов (
'delta.columnMapping.mode' = 'name'
) не должны содержать пробелы или следующие символы:, ; { } ( ) \n \t =
Идентификаторы столбцов
AVRO
таблицы должны начинаться с символа подчеркивания (_
) или буквы Юникода (включая буквы, отличные от ASCII) и следовать сочетанию букв Юникода, цифр и подчеркивания. -
Задает тип данных столбца. Не все типы данных, поддерживаемые 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
Строковый литерал для описания столбца.
-
Добавляет ограничение первичного ключа или внешнего ключа в столбец таблицы Delta Lake.
Ограничения не поддерживаются для таблиц в каталоге
hive_metastore
.Чтобы добавить ограничение проверки в таблицу Delta Lake, используйте инструкцию ALTER TABLE.
-
Применимо к: Databricks SQL Databricks Runtime 12.2 LTS и более поздних версий каталога Unity
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
Добавляет функцию маски столбца для анонимизации конфиденциальных данных. Все последующие запросы из этого столбца получают результат оценки этой функции по столбцу вместо исходного значения столбца. Это может быть полезно для точного контроля доступа, где функция может проверить удостоверение или членство в группах вызывающего пользователя, чтобы решить, следует ли изменить значение.
-
Добавляет в таблицу Delta Lake информационный первичный ключ или информационные ограничения внешнего ключа.
Ограничения ключей не поддерживаются для таблиц в каталоге
hive_metastore
.Чтобы добавить ограничение проверки в таблицу Delta Lake, используйте инструкцию ALTER TABLE.
-
USING data_source
Формат файла, используемый для таблицы.
data_source
должно иметь одно из следующих значений:AVRO
BINARYFILE
CSV
DELTA
JSON
ORC
PARQUET
TEXT
В Databricks Runtime поддерживаются следующие дополнительные форматы файлов для таблицы:
JDBC
LIBSVM
- Полное имя класса пользовательской реализации
org.apache.spark.sql.sources.DataSourceRegister
.
Если
USING
не указывается, по умолчанию используетсяDELTA
.Для любого значения
data_source
, отличного отDELTA
, необходимо также указать значениеLOCATION
, если каталог таблиц не имеет значениеhive_metastore
.Ниже приведено следующее: 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
При необходимости укажите расположение, секционирование, кластеризацию, параметры, комментарии и определяемые пользователем свойства для новой таблицы. Каждое вложенное предложение может быть указано только один раз.
-
Необязательное предложение для секционирования таблицы по подмножеству столбцов.
Примечание.
Если таблица Delta не определена, столбцы секционирования помещаются в конец таблицы, даже если они определены ранее в спецификации столбцов. Рекомендуется использовать
CLUSTER BY
вместоPARTITIONED BY
таблиц Delta. -
Область применения: Databricks SQL Databricks Runtime 13.3 и более поздних версий
Необязательное предложение для кластеризации таблицы Delta с помощью подмножества столбцов. Для кластеризации других таблиц используется
clustered_by_clause
.Кластеризация жидкости Delta Lake не может быть объединена с
PARTITIONED BY
. clustered_by_clause
При необходимости можно кластеризовать таблицу или каждую секцию по фиксированному количеству хэш-контейнеров, используя подмножество столбцов.
Кластеризация не поддерживается для таблиц Delta Lake.
CLUSTERED BY
Указывает набор столбцов для кластеризации каждой секции или таблицы, если секционирование не указано.
-
Идентификатор, ссылающийся на объект
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.-
Задает или сбрасывает один или несколько параметров таблицы, определяемых пользователем.
COMMENT table_comment
Строковый литерал для описания таблицы.
-
При необходимости задает одно или несколько свойств, определяемых пользователем.
Предложение 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));