CREATE TABLE
Создает новую таблицу в Selena.
Для выполнения этой операции требуется привилегия CREATE TABLE на целевой базе данных.
Синтаксис
CREATE [EXTERNAL] [TEMPORARY] TABLE [IF NOT EXISTS] [database.]table_name
(column_definition1[, column_definition2, ...]
[, index_definition1[, index_definition12,]])
[ENGINE = [olap|mysql|elasticsearch|hive|hudi|iceberg|jdbc]]
[key_desc]
[COMMENT "table comment"]
[partition_desc]
[distribution_desc]
[rollup_index]
[ORDER BY (column_name1,...)]
[PROPERTIES ("key"="value", ...)]
- Имя таблицы, имя partition, имя столбца и имя индекса, которые вы создаете, должны соответствовать соглашениям об именовании в Системных ограничениях.
- При указании имени базы данных, имени таблицы, имени столбца или имени partition обратите внимание, что некоторые литералы используются как зарезервированные ключевые слова в Selena. Не используйте эти ключевые слова напрямую в SQL-выражениях. Если вы хотите использовать такое ключевое слово в SQL-выражении, заключите его в пару обратных кавычек (`). См. Ключевые слова для этих зарезервированных ключевых слов.
Ключевые слова
EXTERNAL
Ключевое слово EXTERNAL устарело.
Мы рекомендуем использовать внешние каталоги для запроса данных из источников данных Hive, Iceberg, Hudi и JDBC вместо использования ключевого слова EXTERNAL для создания внешних таблиц.
Рекомендация
Начиная с v1.5.2, Selena поддерживает создание таблиц в формате Parquet в каталогах Iceberg и поддерживает загрузку данных в эти таблицы Iceberg в формате Parquet с помощью INSERT INTO.
Начиная с v1.5.2, Selena поддерживает создание таблиц в формате Parquet в каталогах Hive и поддерживает загрузку данных в эти таблицы Hive в формате Parquet с помощью INSERT INTO. Начиная с v1.5.2, Selena поддерживает создание таблиц в форматах ORC и Textfile в каталогах Hive и поддерживает загрузку данных в эти таблицы Hive в форматах ORC и Textfile с помощью INSERT INTO.
Если вы хотите использовать устаревшее ключевое слово EXTERNAL, разверните Детали ключевого слова EXTERNAL
Детали ключевого слова EXTERNAL
Чтобы создать внешнюю таблицу для запроса внешних источников данных, укажите CREATE EXTERNAL TABLE и установите ENGINE в одно из следующих значений. Для получения дополнительной информации вы можете обратиться к Внешним таблицам.
-
Для внешних таблиц MySQL укажите следующие свойства:
PROPERTIES (
"host" = "mysql_server_host",
"port" = "mysql_server_port",
"user" = "your_user_name",
"password" = "your_password",
"database" = "database_name",
"table" = "table_name"
)Примечание:
"table_name" в MySQL должно указывать на реальное имя таблицы. В отличие от этого, "table_name" в выражении CREATE TABLE указывает имя этой таблицы MySQL в Selena. Они могут быть как разными, так и одинаковыми.
Цель создания таблиц MySQL в Selena — получить доступ к базе данных MySQL. Selena сама не поддерживает и не хранит никаких данных MySQL.
-
Для внешних таблиц Elasticsearch укажите следующие свойства:
PROPERTIES (
"hosts" = "http://192.168.xx.xx:8200,http://192.168.xx0.xx:8200",
"user" = "root",
"password" = "root",
"index" = "tindex",
"type" = "doc"
)hosts: URL-адрес, который используется для подключения к вашему кластеру Elasticsearch. Вы можете указать один или несколько URL-адресов.user: учетная запись root пользователя, которая используется для входа в ваш кластер Elasticsearch с включенной базовой аутентификацией.password: пароль предыдущей учетной записи root.index: индекс таблицы Selena в вашем кластере Elasticsearch. Имя индекса совпадает с именем таблицы Selena. Вы можете установить этот параметр на псевдоним таблицы Selena.type: тип индекса. Значение по умолчанию —doc.
-
Для внешних таблиц Hive укажите следующие свойства:
PROPERTIES (
"database" = "hive_db_name",
"table" = "hive_table_name",
"hive.metastore.uris" = "thrift://xx.xx.xx.xx:9083"
)Здесь database — это имя соответствующей базы данных в таблице Hive. Table — это имя таблицы Hive.
hive.metastore.uris— это адрес сервера. -
Для внешних таблиц JDBC укажите следующие свойства:
PROPERTIES (
"resource"="jdbc0",
"table"="dest_tbl"
)resource— это имя ресурса JDBC, аtable— это целевая таблица. -
Для внешних таблиц Iceberg укажите следующие свойства:
PROPERTIES (
"resource" = "iceberg0",
"database" = "iceberg",
"table" = "iceberg_table"
)resource— это имя ресурса Iceberg.database— это база данных Iceberg.table— это таблица Iceberg. -
Для внешних таблиц Hudi укажите следующие свойства:
PROPERTIES (
"resource" = "hudi0",
"database" = "hudi",
"table" = "hudi_table"
)
TEMPORARY
Создает временную таблицу. Начиная с v1.5.2, Selena поддерживает создание временных таблиц в Default Catalog. Для получения дополнительной информации см. Временная таблица.
При создании временной таблицы необходимо установить ENGINE в olap.
Определение столбцов
col_name col_type [agg_type] [NULL | NOT NULL] [DEFAULT "default_value"] [AUTO_INCREMENT] [AS generation_expr]
col_name
Обратите внимание, что обычно вы не можете создать столбец, имя которого начинается с __op или __row, потому что эти форматы имен зарезервированы для специальных целей в Selena, и создание таких столбцов может привести к неопределенному поведению. Если вам действительно нужно создать такой столбец, установите динамический параметр FE allow_system_reserved_names в TRUE.
col_type
Конкретная информация о столбце, такая как типы и диапазоны:
-
TINYINT (1 байт): Диапазон от -2^7 + 1 до 2^7 - 1.
-
SMALLINT (2 байта): Диапазон от -2^15 + 1 до 2^15 - 1.
-
INT (4 байта): Диапазон от -2^31 + 1 до 2^31 - 1.
-
BIGINT (8 байт): Диапазон от -2^63 + 1 до 2^63 - 1.
-
LARGEINT (16 байт): Диапазон от -2^127 + 1 до 2^127 - 1.
-
FLOAT (4 байта): Поддерживает научную нотацию.
-
DOUBLE (8 байт): Поддерживает научную нотацию.
-
DECIMAL[(precision, scale)] (16 байт)
-
Значение по умолчанию: DECIMAL(10, 0)
-
precision: 1 ~ 38
-
scale: 0 ~ precision
-
Целая часть: precision - scale
Научная нотация не поддерживается.
-
-
DATE (3 байта): Диапазон от 0000-01-01 до 9999-12-31.
-
DATETIME (8 байт): Диапазон от 0000-01-01 00:00:00 до 9999-12-31 23:59:59.
-
CHAR[(length)]: Строка фиксированной длины. Диапазон: 1 ~ 255. Значение по умолчанию: 1.
-
VARCHAR[(length)]: Строка переменной длины. Значение по умолчанию — 1. Единица измерения: байты. В версиях до Selena 2.1 диапазон значений
lengthсоставляет 1–65533. [Предварительная версия] В Selena 2.1 и более поздних версиях диапазон значенийlengthсоставляет 1–1048576. -
HLL (1~16385 байт): Для типа HLL нет необходимости указывать длину или значение по умолчанию. Длина будет контролироваться внутри системы в соответствии с агрегацией данных. Столбец HLL может быть запрошен или использован только с помощью hll_union_agg, Hll_cardinality и hll_hash.
-
BITMAP: Тип Bitmap не требует указания длины или значения по умолчанию. Он представляет собой набор беззнаковых чисел bigint. Самый большой элемент может достигать 2^64 - 1.
agg_type
Тип агрегации. Если не указан, этот столбец является ключевым столбцом. Если указан, это столбец значений. Поддерживаются следующие типы агрегации:
SUM,MAX,MIN,REPLACEHLL_UNION(только для типаHLL)BITMAP_UNION(только дляBITMAP)REPLACE_IF_NOT_NULL: Это означает, что импортированные данные будут заменены только в том случае, если они имеют ненулевое значение. Если это нулевое значение, Selena сохранит исходное значение.
- Когда столбец типа агрегации BITMAP_UNION импортируется, его исходные типы данных должны быть TINYINT, SMALLINT, INT и BIGINT.
- Если NOT NULL указан для столбца REPLACE_IF_NOT_NULL при создании таблицы, Selena все равно преобразует данные в NULL, не отправляя сообщение об ошибке пользователю. Это позволяет пользователю импортировать выбранные столбцы.
Этот тип агрегации применяется ТОЛЬКО к таблице Aggregate, у которой тип key_desc — AGGREGATE KEY. Начиная с v1.5.2, REPLACE_IF_NOT_NULL поддерживает столбцы типа BITMAP.
NULL | NOT NULL: Разрешено ли столбцу быть NULL. По умолчанию NULL указывается для всех столбцов в таблице, использующей ключ Duplicate Key, Aggregate или Unique Key. В таблице, использующей ключ Primary Key, по умолчанию столбцы значений указываются с NULL, тогда как ключевые столбцы указываются с NOT NULL. Если в исходных данных содержатся значения NULL, представьте их с помощью \N. Selena обрабатывает \N как NULL во вре мя загрузки данных.
DEFAULT "default_value": значение по умолчанию для столбца. Когда вы загружаете данные в Selena, если исходное поле, сопоставленное со столбцом, пустое, Selena автоматически заполняет значение по умолчанию в столбце. Вы можете указать значение по умолчанию одним из следующих способов:
- DEFAULT current_timestamp: Используйте текущее время в качестве значения по умолчанию. Для получения дополнительной информации см. current_timestamp().
- DEFAULT
<default_value>: Используйте заданное значение типа данных столбца в качестве значения по умолчанию. Например, если тип данных столбца — VARCHAR, вы можете указать строку VARCHAR, например beijing, в качестве значения по умолчанию, как показано вDEFAULT "beijing". Обратите внимание, что значения по умолчанию не могут быть любого из следующих типов: ARRAY, BITMAP, JSON, HLL и BOOLEAN. - DEFAULT (<expr>): Используйте результат, возвращаемый заданной функцией, в качестве значения по умолчанию. Поддерживаются только выражения uuid() и uuid_numeric().
AUTO_INCREMENT: указывает столбец AUTO_INCREMENT. Типы данных столбцов AUTO_INCREMENT должны быть BIGINT. Автоинкрементные идентификаторы начинаются с 1 и увеличиваются с шагом 1. Для получения дополнительной информации о столбцах AUTO_INCREMENT см. AUTO_INCREMENT. Начиная с v1.5.2, Selena поддерживает столбцы AUTO_INCREMENT.
AS generation_expr: указывает вычисляемый столбец и его выражение. Вычисляемый столбец может использоваться для предварительного вычисления и хранения результатов выражений, что значительно ускоряет запросы с одинаковыми сложными выражениями. Начиная с v1.5.2, Selena поддерживает вычисляемые столбцы.
Определение индекса
INDEX index_name (col_name[, col_name, ...]) [USING BITMAP] COMMENT 'xxxxxx'
Для получения дополнительной информации об описаниях параметров и примечаниях по использованию см. Bitmap индексирование.
ENGINE
Значение по умолчанию: olap. Если этот параметр не указан, по умолчанию создается таблица OLAP (собственная таблица Selena).
Опциональные значения: mysql, elasticsearch, hive, jdbc, iceberg и hudi.
Ключ
Синтаксис:
key_type(k1[,k2 ...])
Данные упорядочиваются в указанных ключевых столбцах и имеют разные атрибуты для разных типов ключей:
-
AGGREGATE KEY: Идентичное содержимое в ключевых столбцах будет агрегировано в столбцы значений в соответствии с указанным типом агрегации. Обычно применяется в бизнес-сценариях, таких как финансовые отчеты и многомерный анализ.
-
UNIQUE KEY/PRIMARY KEY: Идентичное содержимое в ключевых столбцах будет заменено в столбцах значений в соответствии с последовательностью импорта. Может применяться для добавления, удаления, изменения и запроса по ключевым столбцам.
-
DUPLICATE KEY: Идентичное содержимое в ключевых столбцах, которое также существует в Selena одновременно. Может использоваться для хранения детальных данных или данных без атрибутов агрегации.
примечаниеDUPLICATE KEY — это тип по умолчанию. Данные будут упорядочены в соответствии с ключевыми столбцами.
Столбцы значений не нужно указывать типы агрегации, когда другой key_type используется для создания таблиц, за исключением AGGREGATE KEY.
COMMENT
Вы можете добавить комментарий к таблице при её создании, опционально. Обратите внимание, что COMMENT должен быть размещён после key_desc. В противном случае таблица не может быть создана.
Начиная с v1.5.2, вы можете изменить комментарий к таблице с помощью ALTER TABLE <table_name> COMMENT = "new table comment".
Partition
Partition могут управляться следующими сп особами:
Динамическое создание partition
Динамическое разбиение на partition предоставляет управление временем жизни (TTL) для partition. Selena автоматически создает новые partition заранее и удаляет устаревшие partition для обеспечения свежести данных. Чтобы включить эту функцию, вы можете настроить свойства, связанные с динамическим разбиением на partition, при создании таблицы.