更新时间:2024-07-24 GMT+08:00

CREATE TABLE LIKE

语法

CREATE TABLE [ IF NOT EXISTS] table_name ( { coulumn_name data_type [ COMMENT comment] [ WITH (property_name = expression [,…] ) ] | LIKE existing_table_name [ {INCLUDING| EXCLUDING} PROPERTIES] } ) [,…] [ COMMENT table_comment] [WITH (property_name = expression [,… ] ) ]

描述

使用LIKE子句可以在一个新表中包含一个已存在的表所有的列定义。可以使用多个LIKE来复制多个表的列。

如果使用了INCLUDING PROPERTIES,表的所有属性也会被复制到新表,该选项最多只能对一个表生效。

对于从表中复制过来的属性,可以使用WITH子句指定属性名进行修改。

默认使用EXCLUDING PROPERTIES属性。

对于带分区的表,如果用括号包裹like子句,复制的列定义不会包含分区键的信息。

示例

  • 创建基础表order01和order02
    CREATE TABLE order01(id int,name string,tel string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'STORED AS TEXTFILE;
    CREATE TABLE order02(sku int, sku_name string, sku_describe string);
  • 创建表orders_like01,它将包含表order01定义的列及表属性
    CREATE TABLE orders_like01 like order01 INCLUDING PROPERTIES;
  • 创建表orders_like02,它将包含表order02定义的列,并将表的存储格式设置为‘TEXTFILE’
    CREATE TABLE orders_like02 like order02 STORED AS TEXTFILE;
  • 创建表orders_like03,它将包含表order01定义的列及表属性,order02定义的列,以及额外的列c1和c2
    CREATE TABLE orders_like03 (c1 int,c2 float,LIKE order01 INCLUDING PROPERTIES,LIKE order02);
  • 创建表orders_like04和orders_like05,它们都会包含同一个表order_partition的定义,但orders_like04不会包含分区键信息,而orders_like05会包含分区键的信息
    CREATE TABLE order_partition(id int,name string,tel string) PARTITIONED BY (sku int);
    CREATE TABLE orders_like04 (like order_partition);
    CREATE TABLE orders_like05 like order_partition;
    DESC orders_like04;
     Column |  Type   | Extra | Comment 
    --------|---------|-------|---------
     id     | integer |       |         
     name   | varchar |       |         
     tel    | varchar |       |         
     sku    | integer |       |         
    (4 rows)
    
    DESC orders_like05;
    
     Column |  Type   |     Extra     | Comment 
    --------|---------|---------------|---------
     id     | integer |               |         
     name   | varchar |               |         
     tel    | varchar |               |         
     sku    | integer | partition key |         
    (4 rows)