SAP HANA CREATE TABLE 速查手册(开发 / 运维直用)

一、表类型选型(优先级 + 场景)

表格

表类型 关键字 适用场景 关键特性
列存储表(推荐) COLUMN TABLE 大数据、报表、聚合、分析查询 默认自动合并、支持分区 / 压缩,HANA 主流
行存储表 ROW TABLE 小配置表、码表、单条全字段查询 默认类型,不适合海量数据
历史表(时间旅行) HISTORY COLUMN TABLE 需查询历史数据、数据回溯 必须建主键;仅支持查询,会话需开启历史模式
全局临时表 GLOBAL TEMPORARY 跨会话共用表结构、会话隔离数据 元数据持久,会话结束数据清空;支持增删改查
本地临时表 LOCAL TEMPORARY 仅当前会话使用 结构 + 数据会话隔离,会话结束自动清理

口诀:分析用列存,小表用行存,回溯用历史表,临时业务用全局临时表

二、基础语法模板

1. 常规建表(列定义)

sql

复制代码
-- 列存储(通用业务表)
CREATE COLUMN TABLE 模式名.表名 (
  列名 数据类型 [约束] [DEFAULT 默认值],
  列名 数据类型 [GENERATED ALWAYS AS 表达式], -- 计算列
  [表级约束]
)
[LOGGING | NO LOGGING]       -- 日志开关
[AUTO MERGE | NO AUTO MERGE] -- 增量合并开关
[PARTITION BY 分区规则]      -- 分区
[AT LOCATION '主机:端口'];    -- 分布式指定节点

2. 复制表结构 / 数据

sql

复制代码
-- 仅复制结构(默认 WITH NO DATA)
CREATE TABLE 新表 LIKE 源表;
-- 结构+数据全复制
CREATE TABLE 新表 LIKE 源表 WITH DATA;

-- 基于查询结果建表(仅继承 NOT NULL 约束)
CREATE TABLE 新表 AS (SELECT 列 FROM 源表) [WITH NO DATA | WITH DATA];

三、列与约束规范

1. 常用数据类型

  • 整型:TINYINT/SMALLINT/INTEGER/BIGINT
  • 浮点 / 精度数值:DECIMAL/REAL/DOUBLE
  • 字符:VARCHAR(单字节) / NVARCHAR(多语言 / 推荐)
  • 时间:DATE/TIME/SECONDDATE/TIMESTAMP
  • 大对象:BLOB(二进制)、CLOB/NCLOB(大文本)

2. 约束(索引类型)

  • NULL/NOT NULL:是否允许空,默认 NULL
  • UNIQUE:唯一约束
  • PRIMARY KEY:主键(非空 + 唯一,历史表强制要有
  • 索引后缀:BTREE(普通 B + 树)、CPBTREE(压缩前缀 B + 树,长字符 / 复合键优先)

3. 特殊列

  • 默认值:列名 类型 DEFAULT '值'
  • 计算列:列名 类型 GENERATED ALWAYS AS (表达式)

四、核心开关配置

  1. 日志模式
    • LOGGING(默认):记录事务日志,支持故障恢复;正式业务表必选
    • NO LOGGING:无日志、写入更快,异常数据丢失风险高;仅临时 / 中间表使用
  2. 增量合并
    • AUTO MERGE(默认):列存表自动合并 Delta 区,常规场景保留
    • NO AUTO MERGE:关闭自动合并,大批量导入数据时临时使用

五、分区语法(海量数据必备)

1. 分区类型 & 用法

  • RANGE 范围分区 :时间、有序数值(最常用)

    sql

    复制代码
    PARTITION BY RANGE(分区列) (
      PARTITION '2024-01-01' <= VALUES < '2025-01-01',
      PARTITION VALUE = '2025-02-01',
      PARTITION OTHERS -- 兜底分区
    )
  • HASH 哈希分区 :数据均匀打散,无顺序要求

    sql

    复制代码
    PARTITION BY HASH(列1,列2) PARTITIONS 分区数
  • ROUNDROBIN 轮询分区 :纯均衡分发,不依赖字段

    sql

    复制代码
    PARTITION BY ROUNDROBIN PARTITIONS 分区数

2. 多级分区:支持 HASH+RANGE 组合

六、临时表操作限制

  1. GLOBAL TEMPORARY 支持:建表、重命名、增删改查、索引、视图、同义词、TRUNCATE/DROP 限制:无数据时才能删表;数据会话隔离
  2. LOCAL TEMPORARY 支持:建表、增删改查、TRUNCATE/DROP 限制:结构 & 数据仅当前会话可见,功能少于全局临时表

七、历史表「时间旅行」用法

  1. 前提:表为 HISTORY COLUMN TABLE + 建有主键

  2. 会话级回溯(整会话查询历史数据) sql

    复制代码
    SET HISTORY SESSION TO UTCTIMESTAMP 'UTC时间戳';
    -- 或基于提交ID
    SET HISTORY SESSION TO COMMIT ID 数值;
    -- 退出历史会话:执行 COMMIT / ROLLBACK
  3. 语句级回溯(单条查询指定时间点) sql

    复制代码
    SELECT * FROM 历史表 AS OF UTCTIMESTAMP 'UTC时间戳';
  4. 补充规则

    • 历史会话必须关闭自动提交
    • 非历史表始终查询当前数据
    • 仅允许 SELECT,不可 DML/DDL

八、生产最佳实践(落地规范)

  1. 常规业务表:统一使用 COLUMN TABLE,必建主键,保留 LOGGING + AUTO MERGE
  2. 小字典 / 配置表:使用 ROW TABLE
  3. 需数据回溯审计:选用 HISTORY COLUMN TABLE,提前规划主键
  4. 会话级临时计算数据:优先 GLOBAL TEMPORARY
  5. 千万级以上大表:强制分区,时间维度优先 RANGE 分区
  6. 大批量导入场景:临时开启 NO AUTO MERGE + NO LOGGING,导入完成改回默认
  7. 字符字段:多语言环境统一用 NVARCHAR

九、高频示例(直接复制运行)

sql

复制代码
-- 1. 标准列存业务表
CREATE COLUMN TABLE TEST_USER (
    USER_ID INT PRIMARY KEY,
    USER_NAME NVARCHAR(50) NOT NULL,
    CREATE_TIME TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) LOGGING AUTO MERGE;

-- 2. 时间范围分区表
CREATE COLUMN TABLE SALE_DATA (
    ID INT,
    SALE_DATE DATE,
    AMOUNT DECIMAL(18,2),
    PRIMARY KEY(ID, SALE_DATE)
) PARTITION BY RANGE(SALE_DATE) (
    PARTITION '2025-01-01' <= VALUES < '2025-07-01',
    PARTITION OTHERS
);

-- 3. 全局临时表
CREATE GLOBAL TEMPORARY TABLE TMP_DATA (
    COL1 INT,
    COL2 NVARCHAR(100)
);

-- 4. 历史回溯表
CREATE HISTORY COLUMN TABLE HIS_LOG (
    LOG_ID INT PRIMARY KEY,
    CONTENT NCLOB
);
相关推荐
小二·6 分钟前
Redis 内存溢出(OOM)排查与恢复实战
数据库·redis·bootstrap
pqk6V6Vep7 分钟前
Redis 分布式锁进阶第一篇讲解
数据库·redis·分布式
天天进步201522 分钟前
Tunnelto 源码解析 #9:控制服务器设计:Warp、WebSocket、Ping/Pong 与连接保活
运维·服务器·websocket
giaz14n9X24 分钟前
Redis 分布式锁进阶第六十一篇
数据库·redis·分布式
是一个Bug29 分钟前
MongoDB:像搭积木一样存数据
数据库·mongodb
ULIi096kr1 小时前
MySQL解决Too many connections报错:连接数爆满排查、优化与永久解决方案
数据库·mysql·adb
极客先躯1 小时前
高级java每日一道面试题-2026年02月01日-实战篇[Docker]-Docker Volume 的生命周期管理是怎样的?
java·运维·docker·容器·持久化·架构图·容器卷
Java面试题总结1 小时前
Linux-Ubantu-贴士-apt的地盘
linux·运维·服务器
SL-staff1 小时前
(一)数据源配置 —— JVS-Rules规则引擎 V2.5 操作说明介绍
数据库·jar·规则引擎·数据源·jvs-rules·api 接口·jvs低代码
志栋智能1 小时前
超自动化巡检:提升MTTR,缩短业务影响时间
运维·自动化