插入
适用于:砖的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),(“杰克逊彼得森”,“纽敦教堂大街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
替代的地方
>创建表格销售(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