插入
向表中插入新行,並可選擇截斷表或分區。可以通過值表達式或查詢結果指定插入的行。
語法
插入{覆蓋|成}[表格]table_name[分區條款][(column_name[,...])]查詢
請注意
當你插入成
支持Delta表模式實施和演化。如果列的數據類型不能安全地轉換為Delta表的數據類型,則會拋出運行時異常。如果模式演化啟用時,新列可以作為模式(或嵌套列)的最後一列存在,以便模式發展。
參數
成
或覆蓋
如果您指定
覆蓋
以下應用:沒有一個
partition_spec
在插入第一行之前,該表會被截斷。屬性匹配的所有分區
partition_spec
在插入第一行之前截斷。
如果您指定
成
所有插入的行都是現有行的加法。標識要插入的表。名稱中不能包含時間規範.
為插入指定目標分區的可選參數。您也可以隻部分指定分區。
當指定靜態分區時
列=價值
此列不能在插入列列表中重複。(column_name[…])
表中列的可選列表。插入命令最多隻能指定表中的任何特定列一次。
自:磚11.2運行時:
如果這個命令忽略了一個列,Databricks Runtime會分配相應的默認值。
如果目標表模式沒有為插入的列定義任何默認值,Databricks Runtime會賦值
零
如果列是可空的。否則,Databricks運行時會拋出錯誤。
控件中賦值的列除外,不提供列列表等同於指定所有列
分區
子句,按照表中定義的順序。產生要插入的行的查詢。
您必須將查詢返回的列數與指定或隱含的插入列列表相匹配。
如果數據類型不能安全地轉換為匹配的列數據類型,則拋出運行時異常。
自:磚11.2運行時:
如果模式演化啟用時,新列可以作為模式(或嵌套列)的最後一列存在,以便模式發展。
動態分區插入
在分區條款,分區列值為可選。當分區規範part_spec
是否完全提供,這樣的插入被調用動態分區插入或多分區插入.當未指定值時,這些列稱為動態分區列;否則,它們就是靜態分區列。例如,分區規範(p1=3.p2,p3)
具有靜態分區列(p1
)和兩個動態分區列(p2
而且p3
).
在分區條款,靜態分區鍵必須出現在動態分區鍵之前。這意味著所有具有恒定值的分區列必須出現在沒有指定恒定值的其他分區列之前。
動態分區列的分區值是在執行期間確定的。動態分區列必須在兩者的最後指定part_spec
和輸入結果集(行值列表或選擇查詢的)。它們是根據位置而不是名稱來解析的。因此,順序必須完全匹配。
DataFrameWriter api沒有指定分區值的接口。因此,insertInto ()
API總是使用動態分區模式。
例子
在本節中:
插入
插入使用值
>創建表格學生(的名字VARCHAR(64),地址VARCHAR(64)默認的“未知”,student_idINT)分區通過(student_id);——單行插入使用' VALUES '子句指定所有列。>插入成學生值(艾米·史密斯的,聖何塞公園大街123號,111111);——使用隱式默認地址的單行插入>插入成學生(的名字,student_id)值(格雷森·米勒的,222222));——單行插入使用顯式DEFAULT關鍵字的地址>插入成學生值(“Youna金”,默認的,333333));——使用' VALUES '子句進行多行插入>插入成學生值(“鮑勃·布朗”,“庫比蒂諾泰勒街456號”,444444),(“凱茜約翰遜”,帕洛阿爾托Race Ave 789號,555555);——多行插入使用混合的默認值和字麵量>插入成學生值(“趙格溫妮斯”,羅克波特主街120號,666666),(“傑克遜彼得森”,“紐敦教堂大街3425號”,777777);>選擇*從學生;的名字地址student_id---------------- ------------------------ ----------艾米史密斯123公園大街,聖穆111111格雷森米勒未知的222222Youna金未知的333333鮑勃棕色(的)456泰勒聖,庫比蒂諾444444凱西約翰遜789比賽大街,加州中音555555格溫妮斯趙120主要聖,Rockport666666傑克遜彼得森未知的777777
使用子查詢進行插入
——假設已經創建並填充了persons表。>選擇*從人;的名字地址ssn------------- ------------------------- ---------朵拉威廉姆斯134森林大街,梅洛公園123456789埃迪戴維斯245市場聖,苗必達345678901>插入成學生分區(student_id=444444)選擇的名字,地址從人在哪裏的名字=“朵拉·威廉姆斯”;>選擇*從學生;的名字地址student_id------------- ------------------------- ----------艾米史密斯123公園大街,聖穆111111鮑勃棕色(的)456泰勒聖,庫比蒂諾222222凱西約翰遜789比賽大街,加州中音333333朵拉威廉姆斯134森林大街,梅洛公園444444
插入使用表格
條款
——假設已經創建並填充了visiting_students表。>選擇*從visiting_students;的名字地址student_id------------- --------------------- ----------弗勒勞倫特345銅聖,倫敦777777戈登馬丁779湖大街,牛津大學888888>插入成學生表格visiting_students;>選擇*從學生;的名字地址student_id------------- ------------------------- ----------艾米史密斯123公園大街,聖穆111111鮑勃棕色(的)456泰勒聖,庫比蒂諾222222凱西約翰遜789比賽大街,加州中音333333朵拉威廉姆斯134森林大街,梅洛公園444444弗勒勞倫特345銅聖,倫敦777777戈登馬丁779湖大街,牛津大學888888
使用列列表進行插入
>插入成學生(地址,的名字,student_id)值(“杭州”,“肯特麼”,11215016);>選擇*從學生在哪裏的名字=“肯特麼”;的名字地址student_id--------- ---------------------- ----------肯特姚杭州,中國11215016
使用分區規範和列列表進行插入
>插入成學生分區(student_id=11215017)(地址,的名字)值(“杭州”,“肯特麼。”);>選擇*從學生在哪裏student_id=11215017;的名字地址student_id------------ ---------------------- ----------肯特姚小.杭州,中國11215017
插入覆蓋
插入使用值
條款
——假設已經創建並填充了students表。>選擇*從學生;的名字地址student_id------------- ------------------------- ----------艾米史密斯123公園大街,聖穆111111鮑勃棕色(的)456泰勒聖,庫比蒂諾222222凱西約翰遜789比賽大街,加州中音333333朵拉威廉姆斯134森林大街,梅洛公園444444弗勒勞倫特345銅聖,倫敦777777戈登馬丁779湖大街,牛津大學888888海倫戴維斯469任務聖,聖迭戈999999傑森王908鳥聖,薩拉托加121212>插入覆蓋學生值(“Ashua山”,“庫比蒂諾埃麗卡街456號”,111111),(“布萊恩·裏德”,帕洛阿爾托克恩大街723號,222222);>選擇*從學生;的名字地址student_id---------- ----------------------- ----------Ashua山456艾麗卡Ct,庫比蒂諾111111布萊恩裏德723克恩大街,加州中音222222
使用子查詢進行插入
——假設已經創建並填充了persons表。>選擇*從人;的名字地址ssn------------- ------------------------- ---------朵拉威廉姆斯134森林大街,梅洛公園123456789埃迪戴維斯245市場聖,苗必達345678901>插入覆蓋學生分區(student_id=222222)選擇的名字,地址從人在哪裏的名字=“朵拉·威廉姆斯”;>選擇*從學生;的名字地址student_id------------- ------------------------- ----------Ashua山456艾麗卡Ct,庫比蒂諾111111朵拉威廉姆斯134森林大街,梅洛公園222222
插入使用表格
條款
——假設已經創建並填充了visiting_students表。>選擇*從visiting_students;的名字地址student_id------------- --------------------- ----------弗勒勞倫特345銅聖,倫敦777777戈登馬丁779湖大街,牛津大學888888>插入覆蓋學生表格visiting_students;>選擇*從學生;的名字地址student_id------------- --------------------- ----------弗勒勞倫特345銅聖,倫敦777777戈登馬丁779湖大街,牛津大學888888