Lakehouse 批量插入数据指南

概述

向表中插入数据是数据仓库建设的基础操作。云器 Lakehouse 支持多种数据插入方式,包括单行插入、多行插入、查询结果插入和覆盖插入。本指南按业务场景分类,帮助你快速掌握高效的数据插入方法。

涉及的 SQL 命令

命令用途适用场景
INSERT INTO ... VALUES
INSERT INTO ... VALUES
插入字面量数据测试数据、配置表、少量记录
INSERT INTO ... SELECT
INSERT INTO ... SELECT
插入查询结果ETL 数据流转、批量导入
INSERT OVERWRITE
INSERT OVERWRITE
覆盖写入刷新分区数据、重建表数据

前置准备

以下示例使用模拟的产品表

products
products

-- 创建测试表 CREATE TABLE IF NOT EXISTS products ( product_id INT, product_name STRING, category STRING, price DOUBLE, stock INT );


单行与多行插入

使用

VALUES
VALUES
子句插入一行或多行数据。适合测试数据或小批量配置数据。

-- 插入单行数据 INSERT INTO products VALUES (1, 'iPhone 15', 'Phone', 8000, 100); -- 插入多行数据 INSERT INTO products VALUES (2, 'MacBook Pro', 'Laptop', 15000, 50), (3, 'AirPods', 'Audio', 1200, 200);

结果验证

SELECT * FROM products ORDER BY product_id;

product_idproduct_namecategorypricestock
1iPhone 15Phone8000100
2MacBook ProLaptop1500050
3AirPodsAudio1200200

查询结果插入

使用

INSERT INTO ... SELECT
INSERT INTO ... SELECT
将查询结果批量插入目标表,是 ETL 流程中最常用的数据写入方式。

-- 创建目标表 CREATE TABLE IF NOT EXISTS phone_products ( product_id INT, product_name STRING, price DOUBLE ); -- 从源表筛选并插入 INSERT INTO phone_products SELECT product_id, product_name, price FROM products WHERE category = 'Phone';

结果验证

SELECT * FROM phone_products;

product_idproduct_nameprice
1iPhone 158000

覆盖插入

使用

INSERT OVERWRITE
INSERT OVERWRITE
覆盖目标表(或分区)的现有数据。常用于每日数据刷新或重建某一分区。

-- 覆盖全表数据 INSERT OVERWRITE TABLE products SELECT * FROM products WHERE stock > 0;


指定列插入

当只需要插入部分列时,显式指定列名,未指定的列将使用默认值或

NULL
NULL

-- 仅插入部分列 INSERT INTO products (product_id, product_name, category) VALUES (4, 'iPad Air', 'Tablet');

结果验证

SELECT product_id, product_name, category, price, stock FROM products WHERE product_id = 4;

product_idproduct_namecategorypricestock
4iPad AirTabletNULLNULL

清理测试数据

完成插入验证后,建议清理测试表:

-- 删除测试表 DROP TABLE IF EXISTS products; DROP TABLE IF EXISTS phone_products;


注意事项

  1. 大批量导入:超过万行的数据导入,推荐使用
    COPY INTO
    COPY INTO
    从 Volume 导入,或使用数据同步任务。
  2. 类型匹配
    VALUES
    VALUES
    中的数据类型必须与表定义匹配。日期、时间、JSON 等类型需使用字面量语法(如
    DATE '2024-06-01'
    DATE '2024-06-01'
    )。
  3. 动态表限制:Dynamic Table 不支持直接
    INSERT INTO
    INSERT INTO
    ,数据由上游表变更触发自动刷新。
  4. 事务性:单次
    INSERT
    INSERT
    操作是原子的,要么全部成功,要么全部失败。

相关文档

联系我们
预约咨询
微信咨询
电话咨询