创建表

本文介绍了概念管理而且外部并描述了如何在Unity Catalog中创建表。

请注意

当你创建一个表时,一定要引用一个由Unity catalog管理的目录。目录hive_metastore出现在数据资源管理器,但不认为由统一目录治理。它由Databricks工作区的Hive metastore管理。列出的所有其他目录都由Unity Catalog管理。

您可以使用Unity Catalog表升级接口将Hive metastore中注册的现有表升级到Unity Catalog。看到将表和视图升级到Unity Catalog

管理表

托管表是在Unity Catalog中创建表的默认方式。他们使用δ表的格式。

默认情况下,托管表存储在创建metastore时配置的根存储位置中。但是,您可以在编目或模式级别指定不同的存储位置。托管表数据存储在已为其指定位置的层次结构中的最底层。例如,如果指定了模式位置,就会使用它。如果没有指定模式位置,则使用编目位置,如果没有编目位置,则使用默认的metastore根位置。

外部表

外部表是其数据存储在根存储位置之外的表。只有在需要使用其他工具直接访问数据时,才使用外部表。

当你奔跑下降表格在外部表上,Unity Catalog不会删除底层数据。您可以管理外部表上的特权,并按照与托管表相同的方式在查询中使用它们。要使用SQL创建外部表,请指定位置路径创建表格声明。外部表可以使用以下文件格式:

  • δ

  • CSV

  • JSON

  • AVRO

  • 拼花

  • 兽人

  • 文本

要管理外部表对底层云存储的访问,必须设置存储凭证和外部位置

要了解BOB低频彩更多信息,请参见创建外部表

需求

你必须有创建表格属性的模式上的权限使用模式模式和使用目录父目录上的特权。

如果正在创建外部表,请参见创建外部表有关其他要求。

创建一个托管表

要创建一个托管表,运行以下SQL命令。你也可以使用例如笔记本电脑创建一个表。括号中的项目是可选的。替换占位符值:

  • < catalog_name >:目录的名称。这不可能是hive_metastore自动为与Databricks工作区相关联的Hive metastore创建的目录。

  • < schema_name >:模式名。

  • < table_name >:表的名称。

  • < column_specification >:每个列的名称和数据类型。

创建表格<catalog_name><schema_name><table_name><column_specification>);
火花sql"CREATE TABLE .. "< table_name >””(““< column_specification >”“)”
图书馆SparkRsql粘贴"CREATE TABLE .. "< table_name >””(““< column_specification >”“)”9月""))
火花sql"CREATE TABLE .. "< table_name >”+”(“+“< column_specification >”+“)”

方法创建托管表Databricks Terraform提供商而且databricks_table.可以通过使用检索表全名的列表databricks_tables

例如,创建表main.default.department然后插入5行:

创建表格主要默认的部门deptcodeINTdeptname字符串位置字符串);插入主要默认的部门10“金融”“爱丁堡”),20.“软件”帕丁顿的),30.“销售”梅德斯通的),40“市场营销”达灵顿的),50“管理”“伯明翰”);
火花sql创建表main.default.department”(“" deptcode INT,"" deptname STRING,"" location STRING"“)”“INSERT INTO main.default.department VALUES”" (10, ' finance ', ' edinburgh '),""(20, '软件','帕丁顿'),"" (30, ' sales ', ' maiden stone ') "“(40,‘marketing’,‘darlington’),”" (50, ' admin ', ' birmingham ')"
图书馆SparkRsql粘贴创建表main.default.department”(“" deptcode INT,"" deptname STRING,"" location STRING"“)”“INSERT INTO main.default.department VALUES”" (10, ' finance ', ' edinburgh '),""(20, '软件','帕丁顿'),"" (30, ' sales ', ' maiden stone ') "“(40,‘marketing’,‘darlington’),”" (50, ' admin ', ' birmingham ')"9月""))
火花sql创建表main.default.department+”(“+" deptcode INT,"+" deptname STRING,"+" location STRING"+“)”+“INSERT INTO main.default.department VALUES”+" (10, ' finance ', ' edinburgh '),"+"(20, '软件','帕丁顿'),"+" (30, ' sales ', ' maiden stone ') "+“(40,‘marketing’,‘darlington’),”+" (50, ' admin ', ' birmingham ')"

创建托管表的示例笔记本

可以使用以下示例笔记本创建目录、模式和托管表,并管理对它们的权限。

使用SQL在Unity Catalog中创建和管理一个表

在新标签页打开笔记本

用Python在Unity Catalog中创建和管理一个表

在新标签页打开笔记本

删除托管表

使用实例删除一个托管表。

下降表格如果存在catalog_nameschema_nametable_name

删除托管表时,其底层数据将在30天内从云租户中删除。

创建外部表

外部表中的数据存储在云租户的路径中。为了使用外部表,Unity Catalog引入了两个新对象来访问和使用外部云存储:

  • 一个存储凭证包含用于访问云存储位置的身份验证方法。存储凭据不包含到其授予访问权限的路径的映射。存储凭据是访问控制的,以确定哪些用户可以使用凭据。若要直接使用外部存储凭据,请添加< credential_name >您的SQL命令。

  • 一个外部位置将存储凭据映射为云存储路径,并授予其访问权限。外部位置仅授予对该云存储路径及其内容的访问权。外部位置是访问控制的,以确定哪些用户可以使用它们。类型时,将自动使用外部位置位置条款和不< credential_name >条款。

需求

  • 要创建一个外部表,你必须:

    • 创建外部表格对象的访问权限位置由外部表访问。

    • 使用模式表的父模式的权限。

    • 使用目录表父目录上的权限。

    • 创建表格表的父模式的权限。

外部位置和存储凭证存储在亚矿的顶层,而不是在目录中。要创建存储凭据或外部位置,您必须是metastore管理员或帐户级管理员。看到管理外部位置和存储凭证

要创建外部表,请执行以下高级步骤。你也可以使用an例如笔记本电脑创建存储凭据、外部位置和外部表,并管理它们的权限。

创建外部表

可以使用外部位置(推荐)或直接使用存储凭据创建外部表。在以下示例中,替换占位符值:

  • <目录>:将包含该表的目录的名称。

  • <模式>:包含该表的模式的名称。

  • < table_name >:表的名称。

  • < column_specification >:每个列的名称和数据类型。

  • < bucket_path >:云租户上将要创建表的路径。

  • < table_directory >:创建表的目录。为每个表使用唯一的目录。

重要的

一旦在路径中创建了表,用户就不能再直接访问该路径中的文件,即使他们已经在外部位置或存储凭据上获得了这样做的特权。这是为了确保用户不能通过直接从云租户读取文件来绕过应用于表的访问控制。

使用外部位置创建外部表

使用外部位置创建一个空的外部表:

创建表格<目录><模式><table_name><column_specification>位置s3: / / < bucket_path > / < table_directory >”
火花sql"CREATE TABLE .. "< table_name >””(““< column_specification >”“)”“位置s3: / / < bucket_path > / < table_directory >“”
图书馆SparkRsql粘贴"CREATE TABLE .. "< table_name >””(““< column_specification >”“)”“位置s3: / / < bucket_path > / < table_directory >“”9月""))
火花sql"CREATE TABLE .. "< table_name >”+”(“+“< column_specification >”+“)”+“位置s3: / / < bucket_path > / < table_directory >“”

Unity Catalog检查您是否拥有以下权限:

  • 创建外部表格在引用指定的云存储路径的外部位置上。

  • 创建表格在父模式上。

  • 使用模式在父模式上。

  • 使用目录在父目录上。

如果是,则创建外部表。否则,将发生错误,并且不会创建外部表。

请注意

您可以将Hive metastore中的现有外部表迁移到Unity Catalog中,而无需复制其数据。看到将一个外部表升级到Unity Catalog

属性也可以创建外部表Databricks Terraform提供商而且databricks_table.可以通过使用检索表全名的列表databricks_tables

创建外部表的示例笔记本

在Unity Catalog中创建和管理一个外部表

在新标签页打开笔记本

从存储在云租户中的文件创建一个表

可以使用存储在云租户中的文件中的记录填充托管表或外部表。Unity Catalog读取该位置的文件,并将其内容插入到表中。在Unity Catalog中,这被称为path-based-access

请注意

创建外部表的存储路径也不能用于读取或写入数据文件。

查看文件的内容

若要在从外部位置的数据创建表之前查看存储在该位置的数据,可以使用数据资源管理器或以下命令。

权限要求你必须有文件与云存储路径关联的外部位置上的权限,以返回该位置中的数据文件列表。

  1. 列出云存储路径下的文件:

    列表s3: / / < path_to_files >”
  2. 查询指定路径下文件中的数据:

    选择<格式>(s3: / / < path_to_files >”
  1. 列出云存储路径下的文件:

    显示火花sql“列表s3: / / < path_to_files >“”))
  2. 查询指定路径下文件中的数据:

    显示火花负载“s3: / / < path_to_files >”))
  1. 列出云存储路径下的文件:

    图书馆SparkR显示sql“列表s3: / / < path_to_files >“”))
  2. 查询指定路径下文件中的数据:

    图书馆SparkR显示loadDF“s3: / / < path_to_files >”))
  1. 列出云存储路径下的文件:

    显示火花sql“列表s3: / / < path_to_files >“”))
  2. 查询指定路径下文件中的数据:

    显示火花负载“s3: / / < path_to_files >”))

从这些文件创建一个表

请注意

您可以将Hive metastore中的现有外部表迁移到Unity Catalog中,而无需复制其数据。看到将一个外部表升级到Unity Catalog

  1. 创建一个新表,并用云租户上的记录数据文件填充它。

    重要的

    • 使用此方法创建表时,存储路径只被读取一次,以防止记录重复。如果要重新读取目录的内容,必须删除并重新创建表。对于现有的表,可以这样做插入记录从存储路径。

    • 创建表的桶路径不能用于数据文件的读写。

    • 只读取确切目录中的文件;读取不是递归的。

    • 您必须具有以下权限:

      • 使用目录在父目录和使用模式在模式上。

      • 创建表格在父模式上。

      • 文件在与文件所在的桶路径关联的外部位置上,或者如果不使用外部位置,则直接在存储凭据上。

      • 如果您正在创建一个外部表,您需要创建外部表格在将要创建表的桶路径上。

    • 创建一个托管表,并用桶路径中的记录填充它:

      创建表格<目录><模式><table_name>使用δ<column_specification>选择δs3//<path_to_files>”
      火花sql"CREATE TABLE .. "< table_name >”“使用delta””(“"  "“)”"SELECT * from delta. ' s3:// ' "
      图书馆SparkRsql粘贴"CREATE TABLE .. "< table_name >”“使用delta””(“"  "“)”"SELECT * from delta. ' s3:// ' "9月""))
      火花sql"CREATE TABLE .. "< table_name >”+“使用delta”+”(“+"  "+“)”+"SELECT * from delta. ' s3:// ' "
    • 若要创建外部表并使用桶路径中的记录填充它,请添加位置条款:

      创建表格<目录><模式><table_name>使用δ<column_specification>位置s3: / / < table_location >”选择<格式>s3//<path_to_files>”
      火花sql"CREATE TABLE .. "< table_name >”“使用delta””(“"  "“)”"LOCATION 's3://' ""SELECT * from . ' s3:// ' "
      图书馆SparkRsql粘贴"CREATE TABLE .. "< table_name >”“使用delta””(“"  "“)”"LOCATION 's3://' ""SELECT * from . ' s3:// ' "9月""))
      火花sql"CREATE TABLE .. "< table_name >”+“使用delta”+”(“+"  "+“)”+"LOCATION 's3://' "+"SELECT * from . ' s3:// ' "

将路径中的记录插入到现有表中

要将桶路径中的记录插入到现有表中,请使用复制命令。在以下示例中,替换占位符值:

  • <目录>:表的父目录的名称。

  • <模式>:表的父模式的名称。

  • < path_to_files >:数据文件所在的桶路径。

  • < >格式:文件的格式。

  • < table_location >:创建表的桶路径。

  • < storage_credential >:如果直接使用存储凭据,则授权读取或写入桶路径的存储凭据的名称。

重要的

  • 当您使用此方法将记录插入到表中时,您提供的桶路径仅被读取一次,以防止记录重复。

  • 创建表的桶路径不能用于数据文件的读写。

  • 只读取确切目录中的文件;读取不是递归的。

  • 您必须具有以下权限:

    • 使用目录在父目录和使用模式在模式上。

    • 修改在桌子上。

    • 文件在与文件所在的桶路径关联的外部位置上,或者如果不使用外部位置,则直接在存储凭据上。

    • 要将记录插入外部表,您需要创建外部表格在表所在的桶路径上。

  • 将桶路径中的文件中的记录插入到托管表中,使用外部位置从桶路径中读取:

    复制<目录><模式><表格>选择s3: / / < path_to_files >”FILEFORMAT<格式>
    火花sql"COPY INTO .. "<表> ""从("“选择*”" FROM 's3://' "“)”"FILEFORMAT = "
    图书馆SparkRsql粘贴"COPY INTO .. "<表> ""从("“选择*”" FROM 's3://' "“)”"FILEFORMAT = "9月""))
    火花sql"COPY INTO .. "<表> "+"从("+“选择*”+" FROM 's3://' "+“)”+"FILEFORMAT = "
  • 要插入到外部表中,请添加位置条款:

    复制<目录><模式><表格>位置s3: / / < table_location >”选择s3: / / < path_to_files >”FILEFORMAT<格式>
    火花sql"COPY INTO .. "<表> ""LOCATION 's3://' ""从("“选择*”" FROM 's3://' "“)”"FILEFORMAT = "
    图书馆SparkRsql粘贴"COPY INTO .. "<表> ""LOCATION 's3://' ""从("“选择*”" FROM 's3://' "“)”"FILEFORMAT = "9月""))
    火花sql"COPY INTO .. "<表> "+"LOCATION 's3://' "+"从("+“选择*”+" FROM 's3://' "+“)”+"FILEFORMAT = "