SQL表一共有几种写入方式

SQL表一共有几种写入方式

    • [**1. `INSERT OVERWRITE TABLE`(覆盖写入)**](#1. INSERT OVERWRITE TABLE(覆盖写入))
    • [**2. `INSERT INTO TABLE`(追加写入)**](#2. INSERT INTO TABLE(追加写入))
    • [**3. `INSERT OVERWRITE DIRECTORY`(导出数据到文件)**](#3. INSERT OVERWRITE DIRECTORY(导出数据到文件))
    • [**4. `CREATE TABLE AS SELECT`(CTAS,建表并写入)**](#4. CREATE TABLE AS SELECT(CTAS,建表并写入))
    • **总结对比**
    • **如何选择?**

Hive SQL (以及 Spark SQL)中,数据写入表的方式主要有 4 种,具体如下:


1. INSERT OVERWRITE TABLE(覆盖写入)

特点

  • 先删除目标表的全部数据(或指定分区的数据),再写入新数据
  • 适用于全量数据刷新(如每日全量更新)。
  • 如果表是分区表,可以指定分区覆盖

语法

sql 复制代码
-- 覆盖全表
INSERT OVERWRITE TABLE table_name
SELECT ... FROM ...;

-- 覆盖指定分区(动态分区)
INSERT OVERWRITE TABLE table_name PARTITION(dt='20250905')
SELECT ... FROM ...;

适用场景

  • 每日全量数据更新(如用户画像表)。
  • 临时表数据刷新(如 adhoctemp 表)。

2. INSERT INTO TABLE(追加写入)

特点

  • 不删除旧数据,新数据直接追加到表末尾
  • 适用于增量数据写入(如日志表、流水表)。
  • 可以指定分区追加数据

语法

sql 复制代码
-- 追加数据到全表
INSERT INTO TABLE table_name
SELECT ... FROM ...;

-- 追加数据到指定分区
INSERT INTO TABLE table_name PARTITION(dt='20250905')
SELECT ... FROM ...;

适用场景

  • 日志表(如用户行为日志)。
  • 增量数据存储(如订单流水表)。

3. INSERT OVERWRITE DIRECTORY(导出数据到文件)

特点

  • 将查询结果写入 HDFS 或云存储(如 S3、OSS)的指定目录
  • 不会影响表数据,仅用于数据导出
  • 支持多种文件格式(如 CSV、Parquet、ORC)

语法

sql 复制代码
-- 导出数据到 HDFS 目录(默认格式为 TEXT)
INSERT OVERWRITE DIRECTORY '/path/to/output'
SELECT ... FROM ...;

-- 导出为 Parquet 格式
INSERT OVERWRITE DIRECTORY '/path/to/output'
STORED AS PARQUET
SELECT ... FROM ...;

适用场景

  • 数据导出到外部系统(如数据分析、机器学习)。
  • 备份数据到文件系统。

4. CREATE TABLE AS SELECT(CTAS,建表并写入)

特点

  • 直接创建新表并写入数据(无需提前建表)。
  • 适用于临时分析表或数据转换
  • 可以指定存储格式(如 Parquet、ORC)

语法

sql 复制代码
-- 创建新表并写入数据
CREATE TABLE new_table
STORED AS PARQUET
AS
SELECT ... FROM ...;

适用场景

  • 临时分析表(如 adhoctemp 表)。
  • 数据转换(如 ETL 中间表)。

总结对比

写入方式 特点 适用场景
INSERT OVERWRITE TABLE 覆盖旧数据 全量数据更新(如每日快照)
INSERT INTO TABLE 追加新数据 增量数据(如日志、流水)
INSERT OVERWRITE DIRECTORY 导出到文件 数据备份、外部使用
CREATE TABLE AS SELECT (CTAS) 建表并写入 临时表、ETL 中间表

如何选择?

  • 需要全量替换数据?INSERT OVERWRITE TABLE
  • 需要增量追加数据?INSERT INTO TABLE
  • 需要导出数据到文件?INSERT OVERWRITE DIRECTORY
  • 需要快速创建临时表?CREATE TABLE AS SELECT

在你的例子中,如果 tmp_z00943176_20250905_nbcb_ana_sample_did 是临时分析表,通常更适合用 INSERT OVERWRITE TABLE(全量刷新)CREATE TABLE AS SELECT(直接建表)

相关推荐
半夏陌离4 小时前
SQL 入门指南:排序与分页查询(ORDER BY 多字段排序、LIMIT 分页实战)
java·前端·数据库
isyoungboy4 小时前
SQL高效处理海量GPS轨迹数据:人员gps轨迹数据抽稀实战指南
数据库·sql
敬业小码哥4 小时前
记一次:mysql的json及json数组使用组合使用
数据库·mysql·json
练小杰5 小时前
【Mysql-installer-community-8.0.26.0】Mysql 社区版(8.0.26.0) 在Window 系统的默认安装配置
数据库·sql·mysql·adb·配置文件·mysql安装·关系型数据库
Lris-KK5 小时前
【Leetcode】高频SQL基础题--1164.指定日期的产品价格
sql·leetcode
陈陈爱java6 小时前
Spring八股文
开发语言·javascript·数据库
拾忆,想起6 小时前
Redis复制延迟全解析:从毫秒到秒级的优化实战指南
java·开发语言·数据库·redis·后端·缓存·性能优化
爬山算法7 小时前
Redis(47)如何配置Redis哨兵?
数据库·redis·bootstrap
送秋三十五9 小时前
MySQL DBA需要掌握的 7 个问题
数据库·mysql·dba