插入

适用于:勾选“是”砖的SQL勾选“是”砖运行时

将新行插入到表中,并可选地截断表或分区。可以通过值表达式或查询结果指定插入的行。

Databricks SQL仅对Delta Lake表支持此语句。

语法

插入覆盖|(表格table_name(分区条款(column_name(,...查询插入(表格table_name取代在哪里谓词查询

请注意

当你插入支持Delta表、模式强制和演化。如果列的数据类型不能安全地转换为Delta表的数据类型,则抛出运行时异常。如果模式演化启用时,新列可以作为模式(或嵌套列)的最后一列存在,以便模式演进。

参数

  • 覆盖

    如果你指定覆盖以下情况适用:

    • 没有一个partition_spec在插入第一行之前,该表会被截断。

    • 否则,匹配的所有分区partition_spec在插入第一行之前被截断。

    如果你指定插入的所有行都是现有行的相加。

  • table_name

    标识要插入的表。名称中不能包含时间规范.如果找不到表,数据库会抛出一个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可以是任何计算为结果类型的表达式吗布尔

    看到使用replaceWhere任意选择覆盖

  • 查询

    生成要插入的行的查询。

    必须将查询返回的列数与指定的或隐含的插入列列表匹配。

    如果数据类型不能安全地转换为匹配的列数据类型,则抛出运行时异常。

    适用于:勾选“是”砖的SQLSQL仓库版本2022.35或更高版本勾选“是”Databricks运行时11.2及以上

    • 如果查询条款的表达式可以默认的

    • 如果查询选择条款的named_expression可以默认的

    • 默认的将插入显式定义的默认的中的对应列的表达式table_name,或如果没有定义。

    如果模式演化启用时,新列可以作为模式(或嵌套列)的最后一列存在,以便模式演进。

例子

插入

使用值插入

>创建表格学生的名字VARCHAR64),地址VARCHAR64默认的“未知”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_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

替代的地方

>创建表格销售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_datetx_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---------- ----------------------- ----------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