創建表

本文介紹了概念管理而且外部並描述了如何在Unity Catalog中創建表。

請注意

當你創建一個表時,一定要引用一個由Unity catalog管理的目錄。目錄hive_metastore出現在數據資源管理器,但不認為由統一目錄治理。它由Databricks工作區的Hive metastore管理。列出的所有其他目錄都由Unity Catalog管理。

您可以使用Unity Catalog表升級接口將Hive metastore中注冊的現有表升級到Unity Catalog。看到將表和視圖升級到Unity Catalog

管理表

托管表是在Unity Catalog中創建表的默認方式。Unity Catalog管理這些表的生命周期和文件布局。不應該使用Databricks以外的工具直接操作這些表中的文件。

默認情況下,托管表存儲在創建metastore時配置的根存儲位置中。您可以選擇在編目或模式級別指定托管表存儲位置,覆蓋根存儲位置。托管表總是使用δ表的格式。

刪除托管表時,其底層數據將在30天內從雲租戶中刪除。

外部表

外部表是指其數據存儲在為metastore、編目或模式指定的托管存儲位置之外的表。僅當需要直接訪問Databricks集群或Databricks SQL倉庫之外的數據時,才使用外部表。

當你奔跑下降表格在外部表上,Unity Catalog不會刪除底層數據。要放下一張桌子,你必須是它的主人。您可以管理外部表上的特權,並按照與托管表相同的方式在查詢中使用它們。要使用SQL創建外部表,請指定位置路徑創建表格聲明。外部表可以使用以下文件格式:

  • δ

  • CSV

  • JSON

  • AVRO

  • 拚花

  • 獸人

  • 文本

要管理外部表對底層雲存儲的訪問,必須設置存儲憑證和外部位置

要了解更多信息,請參見創建外部表

需求

你必須有創建表格屬性的模式上的權限使用模式模式和使用目錄父目錄上的特權。

如果正在創建外部表,請參見創建外部表有關其他要求。

創建一個托管表

要創建一個托管表,運行以下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引入了兩個對象來訪問和使用外部雲存儲:

  • 一個存儲憑證包含用於訪問雲存儲位置的身份驗證方法。存儲憑據不包含到其授予訪問權限的路徑的映射。存儲憑據是訪問控製的,以確定哪些用戶可以使用憑據。

  • 一個外部位置將存儲憑據映射為雲存儲路徑,並授予其訪問權限。外部位置僅授予對該雲存儲路徑及其內容的訪問權。外部位置是訪問控製的,以確定哪些用戶可以使用它們。類型時,將自動使用外部位置位置條款。

需求

要創建一個外部表,你必須:

  • 創建外部表格對象的訪問權限位置由外部表訪問。

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

  • 使用目錄表父目錄上的權限。

  • 創建表格表的父模式的權限。

外部位置和存儲憑證存儲在亞礦的頂層,而不是在目錄中。要創建存儲憑據或外部位置,您必須是metastore管理員或帳戶級管理員。看到管理外部位置和存儲憑證

創建表

在筆記本或SQL查詢編輯器中使用以下命令示例之一創建外部表。

你也可以使用an例如筆記本電腦創建存儲憑據、外部位置和外部表,並管理它們的權限。

在以下示例中,替換占位符值:

  • <目錄>:將包含該表的目錄的名稱。

  • <模式>:包含該表的模式的名稱。

  • < table_name >:表的名稱。

  • < column_specification >:每個列的名稱和數據類型。

  • < bucket_path >:雲租戶上將要創建表的路徑。

  • < table_directory >:創建表的目錄。為每個表使用唯一的目錄。

重要的

一旦在路徑中創建了表,用戶就不能再從Databricks直接訪問該路徑中的文件,即使他們已經在外部位置或存儲憑據上獲得了這樣做的特權。這是為了確保用戶不能通過直接從雲租戶讀取文件來繞過應用於表的訪問控製。

創建表格<目錄><模式><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

重要的

  • 使用此方法創建表時,存儲路徑隻被讀取一次,以防止記錄重複。如果要重新讀取目錄的內容,必須刪除並重新創建表。對於現有的表,可以這樣做插入記錄從存儲路徑。

  • 創建表的桶路徑不能用於數據文件的讀寫。

  • 隻讀取確切目錄中的文件;讀取不是遞歸的。

  • 您必須具有以下權限:

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

    • 創建表格在父模式上。

    • 文件在與文件所在的桶路徑關聯的外部位置上,或者如果不使用外部位置,則直接在存儲憑據上。

    • 如果您正在創建一個外部表,您需要創建外部表格在將要創建表的桶路徑上。

要創建一個新的托管表並用雲存儲中的數據填充它,請使用以下示例。

創建表格<目錄><模式><table_name><column_specification>選擇<格式>s3//<path_to_files>”
火花sql"CREATE TABLE .. "< table_name >””(“"  "“)”"SELECT * from . ' s3:// ' "
圖書館SparkRsql粘貼"CREATE TABLE .. "< table_name >””(“"  "“)”"SELECT * from . ' s3:// ' "9月""))
火花sql"CREATE TABLE .. "< table_name >”+”(“+"  "+“)”+"SELECT * from . ' s3:// ' "

若要創建外部表並用雲存儲中的數據填充它,請添加位置條款:

創建表格<目錄><模式><table_name><column_specification>使用<格式>位置s3: / / < table_location >”選擇<格式>s3//<path_to_files>”
火花sql"CREATE TABLE .. "< table_name >””(“"  "“)”"USING  ""LOCATION 's3://' ""SELECT * from . ' s3:// ' "
圖書館SparkRsql粘貼"CREATE TABLE .. "< table_name >””(“"  "“)”"USING  ""LOCATION 's3://' ""SELECT * from . ' s3:// ' "9月""))
火花sql"CREATE TABLE .. "< table_name >”+”(“+"  "+“)”+"USING  "+"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 = "