适用于: Databricks SQL
 Databricks SQL  Databricks Runtime
 Databricks Runtime
定义一个使用现有表的定义和元数据的表。
Delta Lake 在 Databricks SQL 和 Databricks Runtime 13.3 LTS 及更高版本中确实支持 CREATE TABLE LIKE。
在 Databricks Runtime 12.2 LTS 及更低版本中,使用 CREATE TABLE AS。
语法
CREATE TABLE [ IF NOT EXISTS ] table_name LIKE source_table_name [table_clauses]
table_clauses
   { USING data_source |
     LOCATION path |
     TBLPROPERTIES clause |
     ROW FORMAT row_format |
     STORED AS file_format } [...]
row_format
   { SERDE serde_class [ WITH SERDEPROPERTIES (serde_key = serde_val [, ...] ) ] |
     { DELIMITED [ FIELDS TERMINATED BY fields_terminated_char [ ESCAPED BY escaped_char ] ]
       [ COLLECTION ITEMS TERMINATED BY collection_items_terminated_char ]
       [ MAP KEYS TERMINATED BY map_key_terminated_char ]
       [ LINES TERMINATED BY row_terminated_char ]
       [ NULL DEFINED AS null_char ] } }
property_key
  { identifier [. ...] | string_literal }
parameters
- 如果不存在 - 如果已指定,则忽略语句(如果已存在 - table_name)。
- 
要创建的表的名称。 名称不得包含时态规范或选项规范。 如果未限定该名称,则会在当前架构中创建该表。 不能已经存在 table_name。 
- 
复制其定义的表的名称。 source_table_name和table_name必须均位于 Hive 元存储中,或者均位于 Unity Catalog 中。
- table_clauses - (可选)指定新表的数据源格式、位置和用户定义的属性。 每个子子句只能指定一次。 - LOCATION 路径 - 用于存储表数据的目录路径,可以是分布式存储上的一个路径。 如果指定了位置,则新表将变为外部表。 如果未指定位置,则表为托管表。 - 不能在与托管表的位置重叠的位置创建外部表。 
- 
可以选择设置一个或多个用户定义的属性。 
- 使用data_source - 将要用于表的文件格式。 - data_source必须是以下各项之一:- TEXT
- CSV
- JSON
- JDBC
- PARQUET
- DELTA
 - Databricks Runtime 支持用于表的以下附加文件格式: - ORC
- HIVE
- LIBSVM
- 
              org.apache.spark.sql.sources.DataSourceRegister的自定义实现的完全限定的类名。
 - 如果未指定 - USING,则将继承源表的格式。- 以下内容适用于:Databricks Runtime - 支持 - HIVE在 Databricks Runtime 中创建 Hive SerDe 表。 你可以使用- file_format子句指定 Hive 特定的- row_format和- OPTIONS,这是不区分大小写的字符串映射。- option_keys为:- FILEFORMAT
- INPUTFORMAT
- OUTPUTFORMAT
- SERDE
- FIELDDELIM
- ESCAPEDELIM
- MAPKEYDELIM
- LINEDELIM
 
- ROW FORMAT row_format - 适用于:  Databricks Runtime Databricks Runtime- 若要指定自定义 SerDe,请将其设置为 - SERDE并指定自定义 SerDe 和可选 SerDe 属性的完全限定类名。 若要使用本机 SerDe,请将其设置为- DELIMITED并指定分隔符、转义字符和空字符等。- SERDEPROPERTIES - 用于标记 SerDe 定义的键值对列表。 
- 字段由...终止 - 定义列分隔符。 
- 由...逃脱 - 定义转义机制。 
- 集合项以 - 终止 - 定义收集项分隔符。 
- 映射密钥已终止 - 定义映射键分隔符。 
- LINES TERMINATED BY - 定义行分隔符。 
- 空值定义为 - 定义 - NULL的特定值。
- 存储为 - 此表的文件格式。 可用格式包括 - TEXTFILE、- SEQUENCEFILE、- RCFILE、- ORC、- PARQUET和- AVRO。 或者,你可以通过- INPUTFORMAT和- OUTPUTFORMAT指定你自己的输入和输出格式。 只能将格式- TEXTFILE、- SEQUENCEFILE和- RCFILE用于- ROW FORMAT SERDE,并且只能将- TEXTFILE用于- ROW FORMAT DELIMITED。
 
 
说明
并非表的所有属性都可以传输,具体取决于数据源和目标。
              CREATE TABLE LIKE(当 source 为 Delta Lake Table 时):
| 功能/属性 | 目标为非 Delta Table | 目标为 Delta Table | 
|---|---|---|
| 评论 | 是 | 是 | 
| 列 | 是 | 是 | 
| 分区列 | 是 | 是 | 
| 配置 | 否 | 是 | 
| 表约束 | 不适用 | 是 | 
| Delta 协议 | 不适用 | 是 | 
              CREATE TABLE LIKE(当 source 不为 Delta Lake Table 时):
| 功能/属性 | 目标为非 Delta Table | 目标为 Delta Table | 
|---|---|---|
| 评论 | 是 | 是 | 
| 列 | 是 | 是 | 
| 分区列 | 是 | 是 | 
| 配置 | 是 | 是 | 
| 表约束 | 否 | 是 | 
| Delta 协议 | 否(该会话的当前默认协议) | 是 | 
示例
-- Create table using a new location
> CREATE TABLE Student_Dupli LIKE Student LOCATION '/path/to/data_files';
-- Create table like using a data source
> CREATE TABLE Student_Dupli LIKE Student USING CSV LOCATION '/path/to/csv_files';