CREATE TABLE LIKE
适用于: Databricks SQL 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
IF NOT EXISTS
如果已指定,则忽略语句(如果已存在
table_name
)。-
要创建的表的名称。 名称不得包含 时态规范或选项规范。 如果未限定该名称,则会在当前架构中创建该表。 不能已经存在 table_name。
-
复制其定义的表的名称。
source_table_name
和table_name
必须均位于 Hive 元存储中,或者均位于 Unity Catalog 中。 table_clauses
(可选)指定新表的数据源格式、位置和用户定义的属性。 每个子子句只能指定一次。
LOCATION path
用于存储表数据的目录路径,可以是分布式存储上的一个路径。 如果指定了位置,则新表将变为外部表。 如果未指定位置,则表为托管表。
不能在与托管表的位置重叠的位置创建外部表。
-
可以选择设置一个或多个用户定义的属性。
USING 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 表。 你可以使用OPTIONS
子句指定 Hive 特定的file_format
和row_format
,这是不区分大小写的字符串映射。option_keys
为:FILEFORMAT
INPUTFORMAT
OUTPUTFORMAT
SERDE
FIELDDELIM
ESCAPEDELIM
MAPKEYDELIM
LINEDELIM
ROW FORMAT row_format
适用于: Databricks Runtime
若要指定自定义 SerDe,请将其设置为
SERDE
并指定自定义 SerDe 和可选 SerDe 属性的完全限定类名。 若要使用本机 SerDe,请将其设置为DELIMITED
并指定分隔符、转义字符和空字符等。SERDEPROPERTIES
用于标记 SerDe 定义的键值对列表。
FIELDS TERMINATED BY
定义列分隔符。
ESCAPED BY
定义转义机制。
COLLECTION ITEMS TERMINATED BY
定义收集项分隔符。
MAP KEYS TERMINATED BY
定义映射键分隔符。
LINES TERMINATED BY
定义行分隔符。
NULL DEFINED AS
定义
NULL
的特定值。STORED AS
此表的文件格式。 可用格式包括
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 |
---|---|---|
COMMENT | 是 | 是 |
列 | 是 | 是 |
分区列 | 是 | 是 |
配置 | 否 | 是 |
表约束 | 不适用 | 是 |
Delta 协议 | 不适用 | 是 |
CREATE TABLE LIKE
(当 source 不为 Delta Lake Table 时):
功能/属性 | 目标为非 Delta Table | 目标为 Delta Table |
---|---|---|
COMMENT | 是 | 是 |
列 | 是 | 是 |
分区列 | 是 | 是 |
配置 | 是 | 是 |
表约束 | 否 | 是 |
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';