插入

向表中插入新行,並可選擇截斷表或分區。可以通過值表達式或查詢結果指定插入的行。

語法

插入覆蓋|表格table_name分區條款column_name[,...查詢

請注意

當你插入支持Delta表模式實施和演化。如果列的數據類型不能安全地轉換為Delta表的數據類型,則會拋出運行時異常。如果模式演化啟用時,新列可以作為模式(或嵌套列)的最後一列存在,以便模式發展。

參數

  • 覆蓋

    如果您指定覆蓋以下應用:

    • 沒有一個partition_spec在插入第一行之前,該表會被截斷。

    • 屬性匹配的所有分區partition_spec在插入第一行之前截斷。

    如果您指定所有插入的行都是現有行的加法。

  • table_name

    標識要插入的表。名稱中不能包含時間規範

  • 分區條款

    為插入指定目標分區的可選參數。您也可以隻部分指定分區。

    當指定靜態分區時價值此列不能在插入列列表中重複。

  • column_name[…])

    表中列的可選列表。插入命令最多隻能指定表中的任何特定列一次。

    自:磚11.2運行時

    • 如果這個命令忽略了一個列,Databricks Runtime會分配相應的默認值。

    • 如果目標表模式沒有為插入的列定義任何默認值,Databricks Runtime會賦值如果列是可空的。否則,Databricks運行時會拋出錯誤。

    控件中賦值的列除外,不提供列列表等同於指定所有列分區子句,按照表中定義的順序。

  • 查詢

    產生要插入的行的查詢。

    您必須將查詢返回的列數與指定或隱含的插入列列表相匹配。

    如果數據類型不能安全地轉換為匹配的列數據類型,則拋出運行時異常。

    自:磚11.2運行時

    • 如果查詢由一個條款的表達式可以默認的

    • 如果查詢由一個選擇條款的named_expression可以默認的

    • 默認的將插入顯式定義的默認的中對應列的表達式table_name,或如果沒有定義。

    如果模式演化啟用時,新列可以作為模式(或嵌套列)的最後一列存在,以便模式發展。

動態分區插入

分區條款,分區列值為可選。當分區規範part_spec是否完全提供,這樣的插入被調用動態分區插入多分區插入.當未指定值時,這些列稱為動態分區列;否則,它們就是靜態分區列。例如,分區規範(p13.p2,p3)具有靜態分區列(p1)和兩個動態分區列(p2而且p3).

分區條款,靜態分區鍵必須出現在動態分區鍵之前。這意味著所有具有恒定值的分區列必須出現在沒有指定恒定值的其他分區列之前。

動態分區列的分區值是在執行期間確定的。動態分區列必須在兩者的最後指定part_spec和輸入結果集(行值列表或選擇查詢的)。它們是根據位置而不是名稱來解析的。因此,順序必須完全匹配。

DataFrameWriter api沒有指定分區值的接口。因此,insertInto ()API總是使用動態分區模式。

例子

插入

插入使用值

>創建表格學生的名字VARCHAR64),地址VARCHAR64默認的“未知”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_id444444選擇的名字地址在哪裏的名字“朵拉·威廉姆斯”>選擇學生的名字地址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

插入到目錄

>創建表格學生的名字VARCHAR64),地址VARCHAR64),student_idINT分區通過student_id位置“/ mnt / user1 /學生”>插入δ' /mnt/user1/學生艾米·史密斯的聖何塞公園大街123號111111);>選擇學生的名字地址student_id------------- ------------------------- ----------艾米史密斯123公園大街111111

使用列列表進行插入

>插入學生地址的名字student_id“杭州”“肯特麼”11215016);>選擇學生在哪裏的名字“肯特麼”的名字地址student_id--------- ---------------------- ----------肯特杭州中國11215016

使用分區規範和列列表進行插入

>插入學生分區student_id11215017地址的名字“杭州”“肯特麼。”);>選擇學生在哪裏student_id11215017的名字地址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---------- ----------------------- ----------Ashua456艾麗卡Ct庫比蒂諾111111布萊恩裏德723克恩大街加州中音222222

使用子查詢進行插入

——假設已經創建並填充了persons表。>選擇的名字地址ssn------------- ------------------------- ---------朵拉威廉姆斯134森林大街梅洛公園123456789埃迪戴維斯245市場苗必達345678901>插入覆蓋學生分區student_id222222選擇的名字地址在哪裏的名字“朵拉·威廉姆斯”>選擇學生的名字地址student_id------------- ------------------------- ----------Ashua456艾麗卡Ct庫比蒂諾111111朵拉威廉姆斯134森林大街梅洛公園222222

插入使用表格條款

——假設已經創建並填充了visiting_students表。>選擇visiting_students的名字地址student_id------------- --------------------- ----------弗勒勞倫特345倫敦777777戈登馬丁779大街牛津大學888888>插入覆蓋學生表格visiting_students>選擇學生的名字地址student_id------------- --------------------- ----------弗勒勞倫特345倫敦777777戈登馬丁779大街牛津大學888888

插入覆蓋目錄

>創建表格學生的名字VARCHAR64),地址VARCHAR64),student_idINT分區通過student_id位置“/ mnt / user1 /學生”>插入覆蓋δ' /mnt/user1/學生艾米·史密斯的聖何塞公園大街123號111111);>選擇學生的名字地址student_id------------- ------------------------- ----------艾米史密斯123公園大街111111