創建表
本文介紹了的概念管理而且外部並描述了如何在Unity Catalog中創建表。
管理表
托管表是在Unity Catalog中創建表的默認方式。這些表存儲在創建每個metastore時配置的根存儲位置中。他們使用的δ表的格式。
要使用SQL創建托管表,請運行
創建表格
命令沒有位置
條款。要使用SQL刪除托管表,請使用
下降表格
聲明。當托管表被刪除時,它的底層數據將從雲租戶中刪除。受管表唯一支持的格式是Delta。
示例SQL語法:
創建表格<例子-表格>(id字符串,價值字符串);
外部表
外部表是數據存儲在根存儲位置之外的表。隻有在需要使用其他工具直接訪問數據時才使用外部表。
當您運行下降表格
在外部表上,Unity Catalog不會刪除底層數據。您可以管理外部表上的特權,並以與托管表相同的方式在查詢中使用它們。要使用SQL創建外部表,請指定位置
在你的路徑創建表格
聲明。外部表可以使用以下文件格式:
δ
CSV
JSON
AVRO
拚花
獸人
文本
要管理對外部表的底層雲存儲的訪問,必須設置存儲憑據和外部位置.
要了解更多,請參見創建一個外部表.
創建一個托管表
要創建一個托管表,運行以下SQL命令。你也可以使用例如筆記本電腦創建一個表。括號中的項目是可選的。替換占位符值:
< catalog_name >
:目錄名稱。< schema_name >
:模式的名稱。< table_name >
:表的名稱。< column_specification >
:每個列的名稱和數據類型。
創建表格<catalog_name>.<schema_name>.<table_name>(<column_specification>);
火花.sql(“CREATE TABLE < catalog_name >, < schema_name >。< table_name >””(““< column_specification >”“)”)
圖書館(SparkR)sql(粘貼(“CREATE TABLE < catalog_name >, < schema_name >。< table_name >”,”(“,“< column_specification >”,“)”,9月=""))
火花.sql(“CREATE TABLE < catalog_name >, < schema_name >。< table_name >”+”(“+“< column_specification >”+“)”)
方法還可以創建托管表磚起程拓殖的提供者而且databricks_table.可以使用。檢索表全名列表databricks_tables.
例如,創建表main.default.department
然後插入五行:
創建表格主要.默認的.部門(deptcodeINT,deptname字符串,位置字符串);插入成主要.默認的.部門值(10,“金融”,“愛丁堡”),(20.,“軟件”,帕丁頓的),(30.,“銷售”,梅德斯通的),(40,“市場營銷”,達靈頓的),(50,“管理”,“伯明翰”);
火花.sql(CREATE TABLE main.default.department”(““deptcode INT。”“deptname弦。”“位置字符串”“)”"INSERT INTO main.default.department VALUES "“(10,‘金融’,‘愛丁堡’),”“(20,‘軟件’,‘帕丁頓’),”“(30,‘sales’,‘maidstone’),”“(40,‘marketing’,‘darlington’),”“(50,' admin ', ' birmingham ')”)
圖書館(SparkR)sql(粘貼(CREATE TABLE main.default.department,”(“,“deptcode INT。”,“deptname弦。”,“位置字符串”,“)”,"INSERT INTO main.default.department VALUES ",“(10,‘金融’,‘愛丁堡’),”,“(20,‘軟件’,‘帕丁頓’),”,“(30,‘sales’,‘maidstone’),”,“(40,‘marketing’,‘darlington’),”,“(50,' admin ', ' birmingham ')”,9月=""))
火花.sql(CREATE TABLE main.default.department+”(“+“deptcode INT。”+“deptname弦。”+“位置字符串”+“)”+"INSERT INTO main.default.department VALUES "+“(10,‘金融’,‘愛丁堡’),”+“(20,‘軟件’,‘帕丁頓’),”+“(30,‘sales’,‘maidstone’),”+“(40,‘marketing’,‘darlington’),”+“(50,' admin ', ' birmingham ')”)
創建一個外部表
外部表中的數據存儲在雲租戶的路徑中。為了使用外部表,Unity Catalog引入了兩個新的對象來訪問和使用外部雲存儲:
一個存儲憑證包含用於訪問雲存儲位置的身份驗證方法。存儲憑據不包含到其授予訪問權的路徑的映射。存儲憑據是訪問控製的,以確定哪些用戶可以使用憑據。若要直接使用外部存儲憑據,請添加
與< credential_name >
您的SQL命令。一個外部位置將存儲憑據與授予訪問權的雲存儲路徑映射。外部位置隻授予對該雲存儲路徑及其內容的訪問權限。外部位置是訪問控製的,以確定哪些用戶可以使用它們。當您的SQL命令包含
位置
條款,沒有與< credential_name >
條款。
需求
要創建外部表,您必須具備:
的
CREATE_TABLE
類的訪問權限位置
由外部表訪問。的
使用
表的父目錄和模式的權限。的
創建
表的父模式的權限。
外部位置和存儲憑據存儲在亞轉移的頂層,而不是在目錄中。要創建存儲憑據或外部位置,您必須是metastore管理員或帳戶級管理員。看到管理外部位置和存儲憑證.
要創建外部表,請遵循以下高級步驟。你也可以用an例如筆記本電腦創建存儲憑據、外部位置和外部表,並為它們管理權限。
創建一個外部表
可以使用外部位置(推薦)或直接使用存儲憑據創建外部表。在以下示例中,替換占位符值:
<目錄>
:將包含該表的目錄的名稱。<模式>
:將包含表的模式的名稱。< table_name >
:表的名稱。< column_specification >
:每個列的名稱和數據類型。< bucket_path >
:將在雲租戶中創建表的路徑。< table_directory >
:要創建表的目錄。為每個表使用唯一的目錄。
重要的
一旦在路徑中創建了表,用戶就不能再直接訪問該路徑中的文件,即使他們在外部位置或存儲憑據上獲得了這樣做的特權。這是為了確保用戶不能通過直接從雲租戶讀取文件來繞過應用於表的訪問控製。
使用外部位置創建外部表
使用外部位置創建一個空的外部表:
創建表格<目錄>.<模式>.<table_name>(<column_specification>)位置s3: / / < bucket_path > / < table_directory >”;
火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >””(““< column_specification >”“)”“位置s3: / / < bucket_path > / < table_directory >“”)
圖書館(SparkR)sql(粘貼(“CREATE TABLE <目錄>。< schema >。< table_name >”,”(“,“< column_specification >”,“)”,“位置s3: / / < bucket_path > / < table_directory >“”,9月=""))
火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >”+”(“+“< column_specification >”+“)”+“位置s3: / / < bucket_path > / < table_directory >“”)
Unity Catalog檢查您是否具有以下權限:
創建表格
在引用您指定的雲存儲路徑的外部位置上。創建
在父模式上。使用
在父目錄上。
如果是,則創建外部表。否則,將發生錯誤,並且不會創建外部表。
請注意
你可以將Hive metastore中的一個現有的外部表遷移到Unity Catalog中,而不需要複製它的數據。看到將一個外部表升級到Unity Catalog.
方法也可以創建外部表磚起程拓殖的提供者而且databricks_table.可以使用。檢索表全名列表databricks_tables.
直接使用存儲憑據創建外部表
請注意
Databricks建議您使用外部位置,而不是直接使用存儲憑證。
若要使用存儲憑據創建外部表,請添加與(證書< credential_name >)
子句的SQL語句:
創建表格<目錄>.<模式>.<table_name>(<column_specification>)位置s3: / / < bucket_path > / < table_directory >”與(憑證<storage_credential>);
火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >””(““< column_specification >”“)”“位置s3: / / < bucket_path > / < table_directory >“””(證書< storage_credential >)”)
圖書館(SparkR)sql(粘貼(“CREATE TABLE <目錄>。< schema >。< table_name >”,”(“,“< column_specification >”,“)”,“位置s3: / / < bucket_path > / < table_directory >“”,”(證書< storage_credential >)”,9月=""))
火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >”+”(“+“< column_specification >”+“)”+“位置s3: / / < bucket_path > / < table_directory >“”+”(證書< storage_credential >)”)
Unity Catalog檢查是否有創建表格
控件中指定的存儲憑據的權限,以及該存儲憑據是否授權從指定的位置進行讀寫位置
條款。如果這兩個條件都成立,則創建外部表。否則,將發生錯誤,並且不會創建外部表。
從存儲在雲租戶中的文件創建一個表
可以用存儲在雲租戶中的文件的記錄填充托管表或外部表。Unity Catalog讀取該位置的文件,並將其內容插入到表中。在Unity Catalog中,這被稱為path-based-access.
請注意
創建外部表的存儲路徑也不能用於讀寫數據文件。
探索文件的內容
查看存儲在外部位置的數據:
列出雲存儲路徑下的文件:
列表s3: / / < path_to_files >”;
顯示(火花.sql(“列表s3: / / < path_to_files >“”))
圖書館(SparkR)顯示(sql(“列表s3: / / < path_to_files >“”))
顯示(火花.sql(“列表s3: / / < path_to_files >“”))
如果你有
讀文件
對與雲存儲路徑關聯的外部位置的權限,將返回該位置中的數據文件列表。查詢指定路徑下文件中的數據:
選擇*從<格式>.`s3://<path_to_files>”;
顯示(火花.讀.負載(“s3:: / / < path_to_files >”))
圖書館(SparkR)顯示(loadDF(“s3:: / / < path_to_files >”))
顯示(火花.讀.負載(“s3:: / / < path_to_files >”))
直接使用存儲憑據瀏覽數據:
選擇*從<格式>.`s3://<path_to_files>”;與(憑證<storage_credential);
顯示(火花.sql("SELECT * FROM
. "s3: / / < path_to_files >” “(證書< storage_credential)”))圖書館(SparkR)顯示(sql(粘貼("SELECT * FROM
. "s3: / / < path_to_files >” ,“(證書< storage_credential)”,9月="")))顯示(火花.sql("SELECT * FROM
. "s3: / / < path_to_files >” +“(證書< storage_credential)”))
從這些文件創建一個表
請注意
你可以將Hive metastore中的一個現有的外部表遷移到Unity Catalog中,而不需要複製它的數據。看到將一個外部表升級到Unity Catalog.
創建一個新表,並用雲租戶上的記錄數據文件填充它。
重要的
使用這種方法創建表時,存儲路徑隻讀取一次,以防止記錄重複。如果要重新讀取目錄的內容,必須刪除並重新創建表。對於現有的表,可以這樣做插入記錄從存儲路徑。
創建表的桶路徑也不能用於讀寫數據文件。
隻讀取確切目錄中的文件;讀取不是遞歸的。
您必須具備以下權限:
使用
在父目錄和模式上。創建
在父模式上。讀文件
在與文件所在的桶路徑相關聯的外部位置上,或者如果不使用外部位置,則直接在存儲憑據上。如果要創建外部表,則需要
創建表格
在將要創建表的桶路徑上。
創建一個托管表,並用桶路徑中的記錄填充它:
創建表格<目錄>.<模式>.<table_name>使用δ(<column_specification>)選擇*從δ.`s3://<path_to_files>”;
火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >”“使用三角洲””(““< column_specification >”“)”"SELECT * from delta. ' s3://
' " )圖書館(SparkR)sql(粘貼(“CREATE TABLE <目錄>。< schema >。< table_name >”,“使用三角洲”,”(“,“< column_specification >”,“)”,"SELECT * from delta. ' s3://
' " ,9月=""))火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >”+“使用三角洲”+”(“+“< column_specification >”+“)”+"SELECT * from delta. ' s3://
' " )若要使用存儲憑據,請添加
與(證書< storage_credential >)
的命令。若要創建外部表並使用來自桶路徑的記錄填充它,請添加
位置
條款:創建表格<目錄>.<模式>.<table_name>使用δ(<column_specification>)位置`s3://<table_location>”選擇*從<格式>.`s3://<path_to_files>”;
火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >”“使用三角洲””(““< column_specification >”“)”“位置s3: / / < table_location >“”"SELECT * from
. ' s3:// )' " 圖書館(SparkR)sql(粘貼(“CREATE TABLE <目錄>。< schema >。< table_name >”,“使用三角洲”,”(“,“< column_specification >”,“)”,“位置s3: / / < table_location >“”,"SELECT * from
. ' s3:// ,9月=""))' " 火花.sql(“CREATE TABLE <目錄>。< schema >。< table_name >”+“使用三角洲”+”(“+“< column_specification >”+“)”+“位置s3: / / < table_location >“”+"SELECT * from
. ' s3:// )' " 若要直接使用存儲憑據,請添加
與(證書< storage_credential >)
的命令。
將路徑中的記錄插入到現有表中
方法可將桶路徑中的記錄插入到現有表中複製成
命令。在以下示例中,替換占位符值:
<目錄>
:表的父目錄的名稱。<模式>
:表的父模式的名稱。< path_to_files >
:數據文件所在的桶路徑。< >格式
:文件的格式。< table_location >
:要創建表的桶路徑。< storage_credential >
:如果直接使用存儲憑據,則為授權對桶路徑進行讀寫的存儲憑據的名稱。
重要的
當您使用這種方法將記錄插入到表中時,您提供的桶路徑隻讀取一次,以防止記錄的重複。
創建表的桶路徑也不能用於讀寫數據文件。
隻讀取確切目錄中的文件;讀取不是遞歸的。
您必須具備以下權限:
使用
在父目錄和模式上。修改
在桌子上。讀文件
在與文件所在的桶路徑相關聯的外部位置上,或者如果不使用外部位置,則直接在存儲憑據上。要將記錄插入外部表,您需要
創建表格
在表所在的桶路徑上。
從桶路徑中的文件中插入記錄到托管表中,使用外部位置從桶路徑中讀取:
複製成<目錄>.<模式>.<表格>從(選擇*從s3: / / < path_to_files >”)FILEFORMAT=<格式>;
火花.sql(“複製到<目錄>。< schema >。<表> "”(““選擇*”" FROM 's3://
' " “)”“FILEFORMAT = < >格式”)圖書館(SparkR)sql(粘貼(“複製到<目錄>。< schema >。<表> ",”(“,“選擇*”," FROM 's3://
' " ,“)”,“FILEFORMAT = < >格式”,9月=""))火花.sql(“複製到<目錄>。< schema >。<表> "+”(“+“選擇*”+" FROM 's3://
' " +“)”+“FILEFORMAT = < >格式”)若要直接使用存儲憑據,請添加
與(證書< storage_credential >)
的命令。若要插入到外部表中,請添加
位置
條款:複製成<目錄>.<模式>.<表格>位置`s3://<table_location>”從(選擇*從s3: / / < path_to_files >”)FILEFORMAT=<格式>;
火花.sql(“複製到<目錄>。< schema >。<表> "“位置s3: / / < table_location >“””(““選擇*”" FROM 's3://
' " “)”“FILEFORMAT = < >格式”)圖書館(SparkR)sql(粘貼(“複製到<目錄>。< schema >。<表> ",“位置s3: / / < table_location >“”,”(“,“選擇*”," FROM 's3://
' " ,“)”,“FILEFORMAT = < >格式”,9月=""))火花.sql(“複製到<目錄>。< schema >。<表> "+“位置s3: / / < table_location >“”+”(“+“選擇*”+" FROM 's3://
' " +“)”+“FILEFORMAT = < >格式”)若要直接使用存儲憑據,請添加
與(證書< storage_credential >)
的命令。