CREATE TABLE LIKE

适用于:check marked yes Databricks SQL check marked yes Databricks Runtime

定义一个使用现有表或视图的定义和元数据的表。

Delta Lake 在 Databricks SQL 和 Databricks Runtime 13.0 及更高版本中确实支持 CREATE TABLE LIKE。 在 Databricks Runtime 13.0 之前使用 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

    要创建的表的名称。 名称不得包含时态规范。 如果未限定该名称,则会在当前架构中创建该表。 不能已经存在 table_name。

  • source_table_name

    复制其定义的表的名称。 source_table_nametable_name 必须均位于 Hive 元存储中,或者均位于 Unity Catalog 中。

  • table_clauses

    (可选)指定新表的数据源格式、位置和用户定义的属性。 每个子子句只能指定一次。

    • LOCATION path

      用于存储表数据的目录路径,可以是分布式存储上的一个路径。 如果指定了位置,则新表将变为外部表。 如果未指定位置,则表为托管表

      不能在与托管表的位置重叠的位置创建外部表。

    • TBLPROPERTIES

      可以选择设置一个或多个用户定义的属性。

    • 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_formatrow_format,这是不区分大小写的字符串映射。 option_keys 为:

      • FILEFORMAT
      • INPUTFORMAT
      • OUTPUTFORMAT
      • SERDE
      • FIELDDELIM
      • ESCAPEDELIM
      • MAPKEYDELIM
      • LINEDELIM
    • ROW FORMAT row_format

      适用于:check marked yes 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

        此表的文件格式。 可用格式包括 TEXTFILESEQUENCEFILERCFILEORCPARQUETAVRO。 或者,你可以通过 INPUTFORMATOUTPUTFORMAT 指定你自己的输入和输出格式。 只能将格式 TEXTFILESEQUENCEFILERCFILE 用于 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 '/mnt/data_files';

-- Create table like using a data source
> CREATE TABLE Student_Dupli LIKE Student USING CSV LOCATION '/mnt/csv_files';