INSERT¶
通过在表中插入一行或多行来更新表。插入到表中每个列中的值可以是显式指定的,也可以是查询的结果。
- 另请参阅:
语法¶
必填参数¶
target_table指定要在其中插入行的目标表。
VALUES ( value | DEFAULT | NULL [ , ... ] ) [ , ( ... ) ]指定要插入到目标表的相应列中的一个或多个值。
在
VALUES子句中,可以指定以下值:value:选择使用 时默认使用的角色和仓库。插入显式指定的值。该值可以是字面量或计算结果为单个值的表达式。DEFAULT:插入目标表中相应列的默认值。NULL:插入NULL值。
该子句中的每个值都必须用逗号分隔。
query指定一个 查询 语句,该语句返回要插入到相应列中的值。这允许您将行从一个或多个源表插入到目标表中。
可选参数¶
OVERWRITE指定在将值插入到表中之前应截断目标表。请注意,指定此选项不会影响对表的访问控制权限。
带
OVERWRITE的 INSERT 语句可以在当前事务的作用域内进行处理,从而避免提交事务的 DDL 语句,例如:默认值:无值(在执行插入之前 不会 截断目标表)。
( target_col_name [ , ... ] )指定目标表中的一列或多列,在其中插入对应的值。指定的目标列数必须与
VALUES子句中指定的值数或列数(如果这些值是查询的结果)匹配。默认值:无值(目标表中的 所有 列都会更新)。
使用说明¶
使用单个 INSERT 命令,您可以通过在 VALUES 子句中指定以逗号分隔的其他值集,将多行插入到表中。
例如,以下子句将在包含 3 列的表中插入 3 行,前两行中插入值
1、2和3,第三行中插入值2、3和4:要使用 INSERT 上的 OVERWRITE 选项,您必须使用对表具有 DELETE 权限的角色,因为 OVERWRITE 将删除表中的现有记录。
某些类型的表达式不能在 VALUES 子句中指定,其中包括以下表达式:
作为 VALUES 子句的替代方案,可在
query子句中指定表达式。例如,您可以替换以下表达式:使用此表达式:
VALUES 子句限制为 200,000 行。此限制适用于单个 INSERT INTO ...VALUES 语句和单个 INSERT INTO ...SELECT ...FROM VALUES 语句。考虑使用 COPY INTO <table> 命令执行批量数据加载。有关在 VALUES 语句中使用 SELECT 子句的更多信息,请参阅 VALUES。
有关在混合表中插入数据的信息,请参阅 加载数据。
示例¶
以下示例使用 INSERT 命令。
使用查询进行单行插入¶
将三个字符串值转换为日期或时间戳,并将它们插入到 mytable 表中的单行中:
与前面的示例类似,但指定仅更新表中的第一列和第三列:
使用显式指定的值进行多行插入¶
创建 employees 表,然后通过在 VALUES 子句中以逗号分隔的列表中提供值组,将四行数据插入到该表中:
在多行插入中,请确保插入值的数据类型在各行之间保持一致,因为第一行的数据类型将用作指南。创建表并插入两行:
第一次插入按预期工作:
第二次插入失败,因为第二行 ('d') 中值的数据类型是字符串,不同于第一行 (3) 中值的数字数据类型。即使可以将两组值 强制转换 为VARCHAR(这是表中列的数据类型),插入也会失败。即使值 'd' 的数据类型与列 v 的数据类型相同,插入也会失败:
当各行的数据类型一致时,插入成功,并且两个数值都被强制转换为 VARCHAR 数据类型:
使用查询进行多行插入¶
将 contractors 表中的多行数据插入到 employees 表中:
仅选择
worknum列中包含区号650的行。在
city列中插入 NULL 值。
使用公共表表达式将 contractors 表中的多行数据插入到 employees 表中:
使用源表中 id 列的 INNER JOIN 将两个表(emp_addr、emp_ph)中的列插入到第三个表 (emp) 中:
JSON 数据的多行插入¶
将两个 JSON 对象插入到表的 VARIANT 列中:
使用 OVERWRITE 插入¶
此示例使用带有 OVERWRITE 的 INSERT,在将新记录添加到 employees 表后,从 employees 重新构建 sf_employees 表。
下面是两个表的初始数据:
此语句使用 OVERWRITE 子句将行插入 sf_employees 表中:
因为 INSERT 使用了 OVERWRITE 子句,所以 sf_employees 中原来的行消失不见了:
写入 v3 Apache Iceberg™ 表¶
以下示例将一行插入 Apache Iceberg™ 表中,该表符合 Apache Iceberg™ 表规范 v3: