插入
適用於:磚的SQL磚運行時
將新行插入到表中,並可選地截斷表或分區。可以通過值表達式或查詢結果指定插入的行。
Databricks SQL僅對Delta Lake表支持此語句。
語法
插入{覆蓋|成}[表格]table_name[分區條款][(column_name(,...])]查詢插入成[表格]table_name取代在哪裏謂詞查詢
請注意
當你插入成
支持Delta表、模式強製和演化。如果列的數據類型不能安全地轉換為Delta表的數據類型,則拋出運行時異常。如果模式演化啟用時,新列可以作為模式(或嵌套列)的最後一列存在,以便模式演進。
參數
成
或覆蓋
如果你指定
覆蓋
以下情況適用:沒有一個
partition_spec
在插入第一行之前,該表會被截斷。否則,匹配的所有分區
partition_spec
在插入第一行之前被截斷。
如果你指定
成
插入的所有行都是現有行的相加。標識要插入的表。名稱中不能包含時間規範.如果找不到表,數據庫會拋出一個TABLE_OR_VIEW_NOT_FOUND錯誤。
為插入指定目標分區的可選參數。您也可以隻指定部分分區。
當指定靜態分區時
列=價值
此列在插入列列表中不能重複。(column_name[,…])
表中列的可選列表。insert命令最多隻能從表中指定任何特定列一次。
適用於:磚的SQLSQL倉庫版本2022.35或更高版本Databricks運行時11.2及以上
如果這個命令省略了一個列,Databricks SQL會分配相應的默認值。
如果目標表模式沒有為插入的列定義任何默認值,Databricks SQL將分配
零
如果列為空。否則,Databricks SQL將引發一個錯誤。
類中已賦值的列除外,不提供列列表等同於指定所有列
分區
子句中定義的順序。替代的地方boolean_expression
適用於:Databricks運行時12.0及以上
如果
table_name
是Delta Lake表,刪除行匹配嗎boolean_expression
在插入任何匹配的行之前布爾表達式
中指定的查詢
.行查詢
不匹配boolean_expression
將被忽略。boolean_expression
可以是任何計算為結果類型的表達式嗎布爾
.生成要插入的行的查詢。
必須將查詢返回的列數與指定的或隱含的插入列列表匹配。
如果數據類型不能安全地轉換為匹配的列數據類型,則拋出運行時異常。
適用於:磚的SQLSQL倉庫版本2022.35或更高版本Databricks運行時11.2及以上
如果模式演化啟用時,新列可以作為模式(或嵌套列)的最後一列存在,以便模式演進。
例子
插入
使用值插入
>創建表格學生(的名字VARCHAR(64),地址VARCHAR(64)默認的“未知”,student_idINT)分區通過(student_id);—單行插入使用' VALUES '子句指定所有列。>插入成學生值(艾米·史密斯的,聖何塞公園大道123號,111111);——單行插入使用隱式默認地址>插入成學生(的名字,student_id)值(格雷森·米勒的,222222);——單行插入使用顯式的DEFAULT關鍵字的地址>插入成學生值(“Youna金”,默認的,333333);—使用' VALUES '子句進行多行插入>插入成學生值(“鮑勃·布朗”,庫比蒂諾泰勒街456號,444444),(“凱茜約翰遜”,帕洛奧圖Race大街789號,555555);—使用DEFAULT和字麵量混合的多行插入>插入成學生值(“趙格溫妮斯”,“羅克波特主街120號”,666666),(“傑克遜彼得森”,默認的,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
替代的地方
>創建表格銷售(tx_date日期,量整數);>插入成銷售值(日期“2022-10-01”,1234),(日期“2022-10-02”,2345),(日期“2022-10-03”,3456),(日期“2022-11-01”,3214);—將所有行替換為2022年10月的交易日期。>插入成銷售取代在哪裏tx_date之間的“2022-10-01”和“2022-10-31”值(日期“2022-10-01”,1237),(日期“2022-10-02”,2378),(日期“2022-10-04”,2456),(日期“2022-10-05”,6328);>選擇*從銷售訂單通過tx_date;tx_date量---------- ------2022-10-0112372022-10-0223782022-10-0424562022-10-0563282022-11-013214
插入覆蓋
使用值
條款
——假設已經創建並填充了學生表。>選擇*從學生;的名字地址student_id------------- ------------------------- ----------艾米史密斯123公園大街,聖穆111111鮑勃棕色(的)456泰勒聖,庫比蒂諾222222凱西約翰遜789比賽大街,加州中音333333朵拉威廉姆斯134森林大街,梅洛公園444444弗勒勞倫特345銅聖,倫敦777777戈登馬丁779湖大街,牛津大學888888海倫戴維斯469任務聖,聖迭戈999999傑森王908鳥聖,薩拉托加121212>插入覆蓋學生值(“Ashua山”,456 Erica Ct,庫比蒂諾,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