Перейти к основному содержимому

CREATE TABLE LIKE

CREATE TABLE LIKE создает идентичную пустую таблицу на основе определения другой таблицы. Определение включает определение столбцов, разделы и свойства таблицы. Вы можете скопировать внешнюю таблицу, например MySQL.

v3.2 позволяет указать для новой таблицы метод разделения, метод группировки и свойства, отличные от исходной таблицы.

подсказка

Эта операция требует привилегию CREATE TABLE в базе данных, в которой вы хотите создать таблицу, и привилегию SELECT на исходную таблицу, на основе которой создается таблица.

Синтаксис

  • Синтаксис, поддерживаемый в версиях до v3.2.
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]<table_name>
LIKE [database.]<source_table_name>
  • v3.2 поддерживает указание свойств для новой таблицы.
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [database.]<table_name>
[partition_desc]
[distribution_desc]
[PROPERTIES ("key" = "value",...)]
LIKE [database.]<source_table_name>

Параметры

  • TEMPORARY: Создает временную таблицу. Начиная с v3.3.1, Selena поддерживает создание временных таблиц в Default Catalog. Для получения дополнительной информации см. Временная таблица.
  • database: база данных.
  • table_name: имя таблицы, которую вы хотите создать. Для соглашений об именовании см. Системные ограничения.
  • source_table_name: имя исходной таблицы, которую вы хотите скопировать.
    • partition_desc: метод разделения. Для получения дополнительной информации см. CREATE TABLE.
  • distribution_desc: метод группировки. Для получения дополнительной информации см. CREATE TABLE.
  • PROPERTIES: свойства таблицы. Поддерживаются все свойства таблицы. Для получения дополнительной информации см. ALTER TABLE.

Примеры

Предположим, что в базе данных test1 есть таблица orders.

create table orders (
dt date NOT NULL,
order_id bigint NOT NULL,
user_id int NOT NULL,
merchant_id int NOT NULL,
good_id int NOT NULL,
good_name string NOT NULL,
price int NOT NULL,
cnt int NOT NULL,
revenue int NOT NULL,
state tinyint NOT NULL
) PRIMARY KEY (dt, order_id)
PARTITION BY RANGE(`dt`) (
PARTITION p20210820 VALUES [('2021-08-20'), ('2021-08-21')),
PARTITION p20210821 VALUES [('2021-08-21'), ('2021-08-22')),
PARTITION p20210929 VALUES [('2021-09-29'), ('2021-09-30')),
PARTITION p20210930 VALUES [('2021-09-30'), ('2021-10-01'))
) DISTRIBUTED BY HASH(order_id)
PROPERTIES (
"replication_num" = "3",
"enable_persistent_index" = "true"
);

Пример 1: В базе данных test1 создайте пустую таблицу order_1, которая имеет такую же структуру таблицы, как orders.

CREATE TABLE test1.order_1 LIKE test1.orders;
show create table order_1\G
*************************** 1. row ***************************
Table: order_1
Create Table: CREATE TABLE `order_1` (
`dt` date NOT NULL COMMENT "",
`order_id` bigint(20) NOT NULL COMMENT "",
`user_id` int(11) NOT NULL COMMENT "",
`merchant_id` int(11) NOT NULL COMMENT "",
`good_id` int(11) NOT NULL COMMENT "",
`good_name` varchar(65533) NOT NULL COMMENT "",
`price` int(11) NOT NULL COMMENT "",
`cnt` int(11) NOT NULL COMMENT "",
`revenue` int(11) NOT NULL COMMENT "",
`state` tinyint(4) NOT NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`dt`, `order_id`)
PARTITION BY RANGE(`dt`)
(PARTITION p20210820 VALUES [("2021-08-20"), ("2021-08-21")),
PARTITION p20210821 VALUES [("2021-08-21"), ("2021-08-22")),
PARTITION p20210929 VALUES [("2021-09-29"), ("2021-09-30")),
PARTITION p20210930 VALUES [("2021-09-30"), ("2021-10-01")))
DISTRIBUTED BY HASH(`order_id`)
PROPERTIES (
"replication_num" = "3",
"in_memory" = "false",
"enable_persistent_index" = "true",
"replicated_storage" = "true",
"compression" = "LZ4"
);

Пример 2: Создайте пустую таблицу order_2 на основе orders и укажите свойства для order_2.

CREATE TABLE order_2
PARTITION BY date_trunc('day',dt)
DISTRIBUTED BY hash(dt)
PROPERTIES ("replication_num" = "1")
LIKE orders;
show create table order_2\G
*************************** 1. row ***************************
Table: order_2
Create Table: CREATE TABLE `order_2` (
`dt` date NOT NULL COMMENT "",
`order_id` bigint(20) NOT NULL COMMENT "",
`user_id` int(11) NOT NULL COMMENT "",
`merchant_id` int(11) NOT NULL COMMENT "",
`good_id` int(11) NOT NULL COMMENT "",
`good_name` varchar(65533) NOT NULL COMMENT "",
`price` int(11) NOT NULL COMMENT "",
`cnt` int(11) NOT NULL COMMENT "",
`revenue` int(11) NOT NULL COMMENT "",
`state` tinyint(4) NOT NULL COMMENT ""
) ENGINE=OLAP
PRIMARY KEY(`dt`, `order_id`)
PARTITION BY RANGE(date_trunc('day', dt))
()
DISTRIBUTED BY HASH(`dt`)
PROPERTIES (
"replication_num" = "1",
"in_memory" = "false",
"enable_persistent_index" = "true",
"replicated_storage" = "true",
"compression" = "LZ4"
);

Пример 3: Создайте пустую таблицу table2, которая имеет такую же структуру таблицы, как внешняя таблица MySQL table1.

CREATE TABLE test1.table2 LIKE test1.table1