自增列

数据仓库 PALO

  • 功能发布记录
  • 操作手册1
    • LDAP认证
    • 时区
    • 使用S3-SDK访问对象存储
    • 权限管理
    • 物化视图
    • 变量
    • 资源管理
    • 数据更新与删除
      • 标记删除
      • Sequence-Column
      • 数据更新
      • 数据删除
    • 备份与恢复
      • 备份与恢复
    • 数据导出1
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 数据导出概述
      • Export
    • 数据导出
      • 全量数据导出
      • 导出查询结果集
      • 导出总览
      • 导出数据到外部表
    • 查询加速1
      • 查询缓存
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
    • 数据导入
      • JSON格式数据导入说明
      • 导入本地数据
      • 导入BOS中的数据
      • 导入事务和原子性
      • 通过外部表同步数据
      • 使用JDBC同步数据
      • 列的映射、转换与过滤
      • 订阅Kafka日志
      • 严格模式
      • 导入总览
    • 数据更新与删除1
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 数据导入1
      • 高并发导入优化(Group Commit)
      • 导入概览
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 数据源
        • Kafka
        • S3 兼容存储
        • 从其他 TP 系统迁移数据
        • HDFS
        • 从其他 AP 系统迁移数据
        • Flink
        • 本地文件
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
  • 开发指南
    • 迁移ClickHouse数据
    • Doris集群间数据迁移
    • 数据更新与删除
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 查询加速
      • 查询缓存
      • Colocation Join
      • 高并发点查
      • Hint
        • Hint 概述
        • Leading Hint
        • Distribute Hint
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
      • 高效去重
        • BITMAP 精准去重
        • HLL 近似去重
      • 优化技术原理
        • TOPN 查询优化
        • 统计信息
        • Pipeline 执行引擎
        • 查询优化器介绍
        • Runtime Filter
      • 查询调优概述
        • 调优概述
        • 诊断工具
        • 分析工具
        • 调优流程
      • 查询优化实践
        • 常见调优参数
        • 计划调优
          • 使用 Hint 控制代价改写
          • 使用异步物化视图透明改写
          • 使用 Leading Hint 控制 Join 顺序
          • 优化表 Schema 设计
          • 使用分区裁剪优化扫表
          • 优化索引设计和使用
          • 使用 Hint 调整 Join Shuffle 方式
          • DML 计划调优
          • 使用 Colocate Group 优化 Join
          • 使用同步物化视图透明改写
          • 使用 SQL Cache 加速查询
        • 执行调优
          • 数据倾斜处理
          • RuntimeFilter 的等待时间调整
          • 并行度调优
    • 数据查询
      • 连接(JOIN)
      • 子查询
      • 复杂类型查询
      • 列转行 (Lateral View)
      • MySQL 兼容性
      • 聚合多维分析
      • 分析函数(窗口函数)
      • 公用表表达式(CTE)
      • 自定义函数
        • 别名函数
        • Java UDF, UDAF, UDTF
    • 数据导出
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 最佳实践
      • 数据导出概述
      • Export
    • 数据导入
      • 高并发导入优化(Group Commit)
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 导入最佳实践
      • 数据源
        • Kafka
        • Snowflake
        • S3 兼容存储
        • Google Cloud Storage
        • 从其他 TP 系统迁移数据
        • Azure Storage
        • 腾讯云 COS
        • MinIO
        • HDFS
        • 阿里云 OSS
        • 华为云 OBS
        • 从其他 AP 系统迁移数据
        • Flink
        • Redshift
        • Amazon S3
        • 本地文件
        • BigQuery
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
    • BI工具接入
      • Sugar
      • Navicat
      • Tableau
      • DBeaver
      • 永洪BI
      • FineBI(帆软)
    • 数据库连接
      • 通过 MySQL 协议连接
      • 基于 Arrow Flight SQL 的高速数据传输链路
    • 湖仓一体
      • 分析 S3或HDFS 上的文件
      • 湖仓一体概述
      • SQL 方言兼容
      • 弹性计算节点
      • 云服务认证接入
      • 元数据缓存
      • 外表统计信息
      • 数据缓存
      • 数据库分析
        • MySQL
        • JDBC Catalog
        • Oracle
        • OceanBase
        • SAP HANA
        • 阿里云 MaxCompute
        • ClickHouse
        • PostgreSQL
        • IBM Db2
        • SQL Server
        • Elasticsearch
      • 湖仓一体最佳实践
        • 使用 PALO 和 Paimon
        • 使用 PALO 和 Iceberg
        • 使用 PALO 和 Hudi
        • 使用 PALO 和 LakeSoul
      • 数据湖构建
        • Iceberg
        • Hive
      • 数据湖分析
        • Hudi Catalog
        • 阿里云 DLF
        • Iceberg Catalog
        • Paimon Catalog
        • Hive Catalog
    • 数据表设计
      • 行业混存
      • 数据压缩
      • Schema 变更
      • 数据类型
      • 自增列
      • 概览
      • 数据库建表最佳实践
      • 冷热数据分层
        • SSD 和 HDD 层级存储
        • 远程存储
        • 冷热数据分层概述
      • 表索引
        • 倒排索引
        • 前缀索引与排序键
        • N-Gram 索引
        • BloomFilter 索引
        • 索引概述
      • 数据划分
        • 数据分桶
        • 数据分布概念
        • 动态分区
        • 自动分区
        • 手动分区
        • 常见文档
      • 数据模型
        • 使用注意
        • 模型概述
        • 主键模型
        • 明细模型
        • 聚合模型
  • 版本发布历史
    • 百度数据仓库 Palo 2.0 版本全新发布
  • SQL手册
    • 字面常量
    • 别名
    • SQL-手册
    • 数据类型
    • SQL语句
    • 注释
    • 内置函数
    • 白名单管理
    • SQL操作符
    • 内置函数
      • 聚合函数
      • 位操作函数
      • 字符串函数
      • 条件函数
      • 数学函数
      • JSON解析函数
      • 类型转换函数
      • 格式转换函数
      • 通用函数
      • 时间和日期函数
      • BITMAP函数
      • 窗口函数
      • 哈希函数
      • HLL函数
    • 语法帮助
      • DML
        • INSERT
        • ROUTINE-LOAD
        • RESTORE
        • SELECT-INTO-OUTFILE
        • ALTER-ROUTINE-LOAD
        • BROKER-LOAD
        • BACKUP
        • EXPORT
        • STREAM-LOAD
      • DDL
        • CREATE-FILE
        • DROP-RESOURCE
        • CREATE-RESOURCE
        • CREATE-MATERIALIZED-VIEW
        • DROP-RESROUCE
        • CREATE-TABLE
        • DROP-REPOSITORY
        • CREATE-REPOSITORY
        • CREATE-ODBC-TABLE
      • 信息查看语句
        • SHOW-BACKUP
        • SHOW-ALTER-TABLE-MATERIALIZED-VIEW
        • SHOW-SNAPSHOT
        • SHOW-ROUTINE-LOAD
        • SHOW-CREATE-ROUTINE-LOAD
        • SHOW-ROLES
        • SHOW-GRANTS
        • SHOW-EXPORT
        • SHOW-ROUTINE-LOAD-TASK
        • SHOW-REPOSITORIES
        • SHOW-LOAD
        • SHOW-RESOURCES
        • SHOW-RESTORE
        • SHOW-PROPERTY
        • SHOW-FILE
      • 辅助命令
        • PAUSE-ROUTINE-LOAD
        • STOP-ROUTINE-LOAD
        • ALTER-ROUTINE-LOAD
        • CANCEL-LOAD
        • RESUME-ROUTINE-LOAD
      • 账户管理
        • SET-PROPERTY
        • REVOKE
        • GRANT
        • CREATE-ROLE
        • DROP-ROLE
        • CREATE-USER
        • DROP-USER
        • SET-PASSWORD
  • 快速入门
    • 快速上手
    • 存算分离
    • 存算一体
  • 典型实践
    • 如何开启Debug日志
    • 导入分析
    • 查询分析
  • 操作手册
    • 权限和子用户
    • 存算一体
      • 连接集群
      • 查询分析
      • 监控告警
        • 监控指标
        • 告警配置
      • 备份恢复
        • 通过管理页面备份与恢复
        • 备份与恢复
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 集群创建
        • 停止与删除
        • 重置管理员密码
        • 集群扩缩容
        • 集群详情
    • 存算分离
      • 连接集群
      • 计算组管理
        • 重启计算组
        • 创建计算组
      • 监控告警
        • 监控指标
        • 告警配置
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 停止与删除
        • 创建集群
        • 重置管理员密码
        • 集群详情
  • 服务等级协议SLA
    • 服务等级协议(SLA)v1.0
  • 产品概述
    • 系统架构
    • 产品特点
    • 产品介绍
  • 视频专区
    • 操作指南
    • 产品简介
  • 产品定价
    • 预付费
    • 计费说明
    • 后付费
所有文档
menu
没有找到结果,请重新输入

数据仓库 PALO

  • 功能发布记录
  • 操作手册1
    • LDAP认证
    • 时区
    • 使用S3-SDK访问对象存储
    • 权限管理
    • 物化视图
    • 变量
    • 资源管理
    • 数据更新与删除
      • 标记删除
      • Sequence-Column
      • 数据更新
      • 数据删除
    • 备份与恢复
      • 备份与恢复
    • 数据导出1
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 数据导出概述
      • Export
    • 数据导出
      • 全量数据导出
      • 导出查询结果集
      • 导出总览
      • 导出数据到外部表
    • 查询加速1
      • 查询缓存
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
    • 数据导入
      • JSON格式数据导入说明
      • 导入本地数据
      • 导入BOS中的数据
      • 导入事务和原子性
      • 通过外部表同步数据
      • 使用JDBC同步数据
      • 列的映射、转换与过滤
      • 订阅Kafka日志
      • 严格模式
      • 导入总览
    • 数据更新与删除1
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 数据导入1
      • 高并发导入优化(Group Commit)
      • 导入概览
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 数据源
        • Kafka
        • S3 兼容存储
        • 从其他 TP 系统迁移数据
        • HDFS
        • 从其他 AP 系统迁移数据
        • Flink
        • 本地文件
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
  • 开发指南
    • 迁移ClickHouse数据
    • Doris集群间数据迁移
    • 数据更新与删除
      • 事务
      • 数据更新
        • 主键模型的导入更新
        • 主键模型的 Update 更新
        • 数据更新概述
        • 主键模型的更新并发控制
        • 聚合模型的导入更新
      • 数据删除
        • 删除操作概述
        • Truncate 操作
        • 表原子替换
        • Delete 操作
        • 基于导入的批量删除
        • 临时分区
    • 查询加速
      • 查询缓存
      • Colocation Join
      • 高并发点查
      • Hint
        • Hint 概述
        • Leading Hint
        • Distribute Hint
      • 物化视图
        • 同步物化视图
        • 物化视图概览
        • 异步物化视图
          • 异步物化视图常见问题
          • 最佳实践
          • 异步物化视图概述
          • 创建、查询与维护异步物化视图
      • 高效去重
        • BITMAP 精准去重
        • HLL 近似去重
      • 优化技术原理
        • TOPN 查询优化
        • 统计信息
        • Pipeline 执行引擎
        • 查询优化器介绍
        • Runtime Filter
      • 查询调优概述
        • 调优概述
        • 诊断工具
        • 分析工具
        • 调优流程
      • 查询优化实践
        • 常见调优参数
        • 计划调优
          • 使用 Hint 控制代价改写
          • 使用异步物化视图透明改写
          • 使用 Leading Hint 控制 Join 顺序
          • 优化表 Schema 设计
          • 使用分区裁剪优化扫表
          • 优化索引设计和使用
          • 使用 Hint 调整 Join Shuffle 方式
          • DML 计划调优
          • 使用 Colocate Group 优化 Join
          • 使用同步物化视图透明改写
          • 使用 SQL Cache 加速查询
        • 执行调优
          • 数据倾斜处理
          • RuntimeFilter 的等待时间调整
          • 并行度调优
    • 数据查询
      • 连接(JOIN)
      • 子查询
      • 复杂类型查询
      • 列转行 (Lateral View)
      • MySQL 兼容性
      • 聚合多维分析
      • 分析函数(窗口函数)
      • 公用表表达式(CTE)
      • 自定义函数
        • 别名函数
        • Java UDF, UDAF, UDTF
    • 数据导出
      • SELECT INTO OUTFILE
      • MySQL Dump
      • 最佳实践
      • 数据导出概述
      • Export
    • 数据导入
      • 高并发导入优化(Group Commit)
      • 异常数据处理
      • 导入高可用性
      • 导入时实现数据转换
      • 导入最佳实践
      • 数据源
        • Kafka
        • Snowflake
        • S3 兼容存储
        • Google Cloud Storage
        • 从其他 TP 系统迁移数据
        • Azure Storage
        • 腾讯云 COS
        • MinIO
        • HDFS
        • 阿里云 OSS
        • 华为云 OBS
        • 从其他 AP 系统迁移数据
        • Flink
        • Redshift
        • Amazon S3
        • 本地文件
        • BigQuery
      • 导入方式
        • Broker Load
        • MySQL Load
        • Insert Into Values
        • Stream Load
        • Insert Into Select
        • Routine Load
      • 文件格式
        • CSV
        • JSON
        • Parquet
        • ORC
      • 复杂数据类型
        • MAP
        • Variant
        • JSON
        • STRUCT
        • Bitmap
        • HLL
        • ARRAY
    • BI工具接入
      • Sugar
      • Navicat
      • Tableau
      • DBeaver
      • 永洪BI
      • FineBI(帆软)
    • 数据库连接
      • 通过 MySQL 协议连接
      • 基于 Arrow Flight SQL 的高速数据传输链路
    • 湖仓一体
      • 分析 S3或HDFS 上的文件
      • 湖仓一体概述
      • SQL 方言兼容
      • 弹性计算节点
      • 云服务认证接入
      • 元数据缓存
      • 外表统计信息
      • 数据缓存
      • 数据库分析
        • MySQL
        • JDBC Catalog
        • Oracle
        • OceanBase
        • SAP HANA
        • 阿里云 MaxCompute
        • ClickHouse
        • PostgreSQL
        • IBM Db2
        • SQL Server
        • Elasticsearch
      • 湖仓一体最佳实践
        • 使用 PALO 和 Paimon
        • 使用 PALO 和 Iceberg
        • 使用 PALO 和 Hudi
        • 使用 PALO 和 LakeSoul
      • 数据湖构建
        • Iceberg
        • Hive
      • 数据湖分析
        • Hudi Catalog
        • 阿里云 DLF
        • Iceberg Catalog
        • Paimon Catalog
        • Hive Catalog
    • 数据表设计
      • 行业混存
      • 数据压缩
      • Schema 变更
      • 数据类型
      • 自增列
      • 概览
      • 数据库建表最佳实践
      • 冷热数据分层
        • SSD 和 HDD 层级存储
        • 远程存储
        • 冷热数据分层概述
      • 表索引
        • 倒排索引
        • 前缀索引与排序键
        • N-Gram 索引
        • BloomFilter 索引
        • 索引概述
      • 数据划分
        • 数据分桶
        • 数据分布概念
        • 动态分区
        • 自动分区
        • 手动分区
        • 常见文档
      • 数据模型
        • 使用注意
        • 模型概述
        • 主键模型
        • 明细模型
        • 聚合模型
  • 版本发布历史
    • 百度数据仓库 Palo 2.0 版本全新发布
  • SQL手册
    • 字面常量
    • 别名
    • SQL-手册
    • 数据类型
    • SQL语句
    • 注释
    • 内置函数
    • 白名单管理
    • SQL操作符
    • 内置函数
      • 聚合函数
      • 位操作函数
      • 字符串函数
      • 条件函数
      • 数学函数
      • JSON解析函数
      • 类型转换函数
      • 格式转换函数
      • 通用函数
      • 时间和日期函数
      • BITMAP函数
      • 窗口函数
      • 哈希函数
      • HLL函数
    • 语法帮助
      • DML
        • INSERT
        • ROUTINE-LOAD
        • RESTORE
        • SELECT-INTO-OUTFILE
        • ALTER-ROUTINE-LOAD
        • BROKER-LOAD
        • BACKUP
        • EXPORT
        • STREAM-LOAD
      • DDL
        • CREATE-FILE
        • DROP-RESOURCE
        • CREATE-RESOURCE
        • CREATE-MATERIALIZED-VIEW
        • DROP-RESROUCE
        • CREATE-TABLE
        • DROP-REPOSITORY
        • CREATE-REPOSITORY
        • CREATE-ODBC-TABLE
      • 信息查看语句
        • SHOW-BACKUP
        • SHOW-ALTER-TABLE-MATERIALIZED-VIEW
        • SHOW-SNAPSHOT
        • SHOW-ROUTINE-LOAD
        • SHOW-CREATE-ROUTINE-LOAD
        • SHOW-ROLES
        • SHOW-GRANTS
        • SHOW-EXPORT
        • SHOW-ROUTINE-LOAD-TASK
        • SHOW-REPOSITORIES
        • SHOW-LOAD
        • SHOW-RESOURCES
        • SHOW-RESTORE
        • SHOW-PROPERTY
        • SHOW-FILE
      • 辅助命令
        • PAUSE-ROUTINE-LOAD
        • STOP-ROUTINE-LOAD
        • ALTER-ROUTINE-LOAD
        • CANCEL-LOAD
        • RESUME-ROUTINE-LOAD
      • 账户管理
        • SET-PROPERTY
        • REVOKE
        • GRANT
        • CREATE-ROLE
        • DROP-ROLE
        • CREATE-USER
        • DROP-USER
        • SET-PASSWORD
  • 快速入门
    • 快速上手
    • 存算分离
    • 存算一体
  • 典型实践
    • 如何开启Debug日志
    • 导入分析
    • 查询分析
  • 操作手册
    • 权限和子用户
    • 存算一体
      • 连接集群
      • 查询分析
      • 监控告警
        • 监控指标
        • 告警配置
      • 备份恢复
        • 通过管理页面备份与恢复
        • 备份与恢复
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 集群创建
        • 停止与删除
        • 重置管理员密码
        • 集群扩缩容
        • 集群详情
    • 存算分离
      • 连接集群
      • 计算组管理
        • 重启计算组
        • 创建计算组
      • 监控告警
        • 监控指标
        • 告警配置
      • 权限管理
        • 集群权限
        • 控制台权限
      • 集群管理
        • 停止与删除
        • 创建集群
        • 重置管理员密码
        • 集群详情
  • 服务等级协议SLA
    • 服务等级协议(SLA)v1.0
  • 产品概述
    • 系统架构
    • 产品特点
    • 产品介绍
  • 视频专区
    • 操作指南
    • 产品简介
  • 产品定价
    • 预付费
    • 计费说明
    • 后付费
  • 文档中心
  • arrow
  • 数据仓库PALO
  • arrow
  • 开发指南
  • arrow
  • 数据表设计
  • arrow
  • 自增列
本页目录
  • 功能
  • 唯一性
  • 聚集性
  • 语法
  • 示例
  • 约束和限制
  • 使用方式
  • 普通导入
  • 部分列更新
  • 使用场景
  • 字典编码
  • 高效分页

自增列

更新时间:2025-08-21

在 PALO 中,自增列(Auto Increment Column)是一种自动生成唯一数字值的功能,常用于为每一行数据生成唯一的标识符,如主键。每当插入新记录时,自增列会自动分配一个递增的值,避免了手动指定数字的繁琐操作。使用 PALO 自增列,可以确保数据的唯一性和一致性,简化数据插入过程,减少人为错误,并提高数据管理的效率。这使得自增列成为处理需要唯一标识的场景(如用户 ID 等)时的理想选择。

功能

对于具有自增列的表,PALO 处理数据写入的方式如下:

  • 自动填充(列排除): 如果写入的数据不包括自增列,PALO 会生成并填充该列的唯一值。
  • 部分指定(列包含):

    • 空值:PALO 会用系统生成的唯一值替换写入数据中的空值。
    • 非空值:用户提供的值保持不变。

      提示:

      用户提供的非空值可能会破坏自增列的唯一性。

唯一性

PALO 保证自增列中生成的值具有表级唯一性。但是:

  • 保证唯一性:这仅适用于系统生成的值。
  • 用户提供的值:PALO 不会验证或强制执行用户在自增列中指定的值的唯一性。这可能导致重复条目。

聚集性

PALO 生成的自增值通常是密集的,但有一些考虑:

  • 潜在的间隙:由于性能优化,可能会出现间隙。每个后端节点(BE)会预分配一块唯一值以提高效率,这些块在节点之间不重叠。
  • 非时间顺序值:PALO 不保证后续写入生成的值大于早期写入的值。

    注意: 自增值不能用于推断写入的时间顺序。

语法

要使用自增列,需要在建表CREATE-TABLE时为对应的列添加AUTO_INCREMENT属性。若要手动指定自增列起始值,可以通过建表时AUTO_INCREMENT(start_value)语句指定,如果未指定,则默认起始值为 1。

示例

  1. 创建一个 Dupliciate 模型表,其中一个 key 列是自增列
SQL
1CREATE TABLE `demo`.`tbl` (
2    `id` BIGINT NOT NULL AUTO_INCREMENT,
3    `value` BIGINT NOT NULL
4) ENGINE=OLAP
5DUPLICATE KEY(`id`)
6DISTRIBUTED BY HASH(`id`) BUCKETS 10
7PROPERTIES (
8"replication_allocation" = "tag.location.default: 3"
9);
  1. 创建一个 Dupliciate 模型表,其中一个 key 列是自增列,并设置起始值为 100
SQL
1CREATE TABLE `demo`.`tbl` (
2    `id` BIGINT NOT NULL AUTO_INCREMENT(100),
3    `value` BIGINT NOT NULL
4) ENGINE=OLAP
5DUPLICATE KEY(`id`)
6DISTRIBUTED BY HASH(`id`) BUCKETS 10
7PROPERTIES (
8"replication_allocation" = "tag.location.default: 3"
9);
  1. 创建一个 Dupliciate 模型表,其中一个 value 列是自增列
SQL
1CREATE TABLE `demo`.`tbl` (
2    `uid` BIGINT NOT NULL,
3    `name` BIGINT NOT NULL,
4    `id` BIGINT NOT NULL AUTO_INCREMENT,
5    `value` BIGINT NOT NULL
6) ENGINE=OLAP
7DUPLICATE KEY(`uid`, `name`)
8DISTRIBUTED BY HASH(`uid`) BUCKETS 10
9PROPERTIES (
10"replication_allocation" = "tag.location.default: 3"
11);
  1. 创建一个 Unique 模型表,其中一个 key 列是自增列
SQL
1CREATE TABLE `demo`.`tbl` (
2    `id` BIGINT NOT NULL AUTO_INCREMENT,
3    `name` varchar(65533) NOT NULL,
4    `value` int(11) NOT NULL
5) ENGINE=OLAP
6UNIQUE KEY(`id`)
7DISTRIBUTED BY HASH(`id`) BUCKETS 10
8PROPERTIES (
9"replication_allocation" = "tag.location.default: 3"
10);
  1. 创建一个 Unique 模型表,其中一个 value 列是自增列
SQL
1CREATE TABLE `demo`.`tbl` (
2    `text` varchar(65533) NOT NULL,
3    `id` BIGINT NOT NULL AUTO_INCREMENT,
4) ENGINE=OLAP
5UNIQUE KEY(`text`)
6DISTRIBUTED BY HASH(`text`) BUCKETS 10
7PROPERTIES (
8"replication_allocation" = "tag.location.default: 3"
9);

约束和限制

  1. 仅 Duplicate 模型表和 Unique 模型表可以包含自增列。
  2. 一张表最多只能包含一个自增列。
  3. 自增列的类型必须是 BIGINT 类型,且必须为 NOT NULL。
  4. 自增列手动指定的起始值必须大于等于 0。

使用方式

普通导入

以下表为例:

SQL
1CREATE TABLE `demo`.`tbl` (
2    `id` BIGINT NOT NULL AUTO_INCREMENT,
3    `name` varchar(65533) NOT NULL,
4    `value` int(11) NOT NULL
5) ENGINE=OLAP
6UNIQUE KEY(`id`)
7DISTRIBUTED BY HASH(`id`) BUCKETS 10
8PROPERTIES (
9"replication_allocation" = "tag.location.default: 3"
10);

使用 insert into 语句导入并且不指定自增列id时,id列会被自动填充生成的值。

SQL
1insert into tbl(name, value) values("Bob", 10), ("Alice", 20), ("Jack", 30);
2
3select * from tbl order by id;
4+------+-------+-------+
5| id   | name  | value |
6+------+-------+-------+
7|    1 | Bob   |    10 |
8|    2 | Alice |    20 |
9|    3 | Jack  |    30 |
10+------+-------+-------+

类似地,使用 stream load 导入文件 test.csv 且不指定自增列id,id列会被自动填充生成的值。

test.csv:

Plain Text
1Tom,40
2John,50
Plain Text
1curl --location-trusted -u user:passwd -H "columns:name,value" -H "column_separator:," -T ./test.csv http://{host}:{port}/api/{db}/tbl/_stream_load
SQL
1select * from tbl order by id;
2+------+-------+-------+
3| id   | name  | value |
4+------+-------+-------+
5|    1 | Bob   |    10 |
6|    2 | Alice |    20 |
7|    3 | Jack  |    30 |
8|    4 | Tom   |    40 |
9|    5 | John  |    50 |
10+------+-------+-------+

使用 insert into 导入时指定自增列id,则该列数据中的 null 值会被生成的值替换。

SQL
1insert into tbl(id, name, value) values(null, "Doris", 60), (null, "Nereids", 70);
2
3select * from tbl order by id;
4+------+---------+-------+
5| id   | name    | value |
6+------+---------+-------+
7|    1 | Bob     |    10 |
8|    2 | Alice   |    20 |
9|    3 | Jack    |    30 |
10|    4 | Tom     |    40 |
11|    5 | John    |    50 |
12|    6 | Doris   |    60 |
13|    7 | Nereids |    70 |
14+------+---------+-------+

部分列更新

在对一张包含自增列的 merge-on-write Unique 表进行部分列更新时,如果自增列是 key 列,由于部分列更新时用户必须显示指定 key 列,部分列更新的目标列必须包含自增列。此时的导入行为和普通的部分列更新相同。

SQL
1CREATE TABLE `demo`.`tbl2` (
2  `id` BIGINT NOT NULL AUTO_INCREMENT,
3  `name` varchar(65533) NOT NULL,
4  `value` int(11) NOT NULL DEFAULT "0"
5  ) ENGINE=OLAP
6  UNIQUE KEY(`id`)
7  DISTRIBUTED BY HASH(`id`) BUCKETS 10
8  PROPERTIES (
9  "replication_allocation" = "tag.location.default: 3",
10  "enable_unique_key_merge_on_write" = "true"
11  );
12
13
14insert into tbl2(id, name, value) values(1, "Bob", 10), (2, "Alice", 20), (3, "Jack", 30);
15
16select * from tbl2 order by id;
17+------+-------+-------+
18| id   | name  | value |
19+------+-------+-------+
20|    1 | Bob   |    10 |
21|    2 | Alice |    20 |
22|    3 | Jack  |    30 |
23+------+-------+-------+
24
25
26set enable_unique_key_partial_update=true;
27set enable_insert_strict=false;
28insert into tbl2(id, name) values(1, "modified"), (4, "added");
29
30select * from tbl2 order by id;
31+------+----------+-------+
32| id   | name     | value |
33+------+----------+-------+
34|    1 | modified |    10 |
35|    2 | Alice    |    20 |
36|    3 | Jack     |    30 |
37|    4 | added    |     0 |
38+------+----------+-------+

当自增列是非 key 列时,如果用户没有指定自增列的值,其值会从表中原有的数据行中进行补齐。如果用户指定了自增列,则该列数据中的 null 值会被替换为生成出的值,非 null 值则保持不变,然后以部分列更新的语义插入该表。

SQL
1CREATE TABLE `demo`.`tbl3` (
2  `id` BIGINT NOT NULL,
3  `name` varchar(100) NOT NULL,
4  `score` BIGINT NOT NULL,
5  `aid` BIGINT NOT NULL AUTO_INCREMENT
6  ) ENGINE=OLAP
7  UNIQUE KEY(`id`)
8  DISTRIBUTED BY HASH(`id`) BUCKETS 1
9  PROPERTIES (
10  "replication_allocation" = "tag.location.default: 3",
11  "enable_unique_key_merge_on_write" = "true"
12  );
13
14
15insert into tbl3(id, name, score) values(1, "Doris", 100), (2, "Nereids", 200), (3, "Bob", 300);
16
17select * from tbl3 order by id;
18+------+---------+-------+------+
19| id   | name    | score | aid  |
20+------+---------+-------+------+
21|    1 | Doris   |   100 |    0 |
22|    2 | Nereids |   200 |    1 |
23|    3 | Bob     |   300 |    2 |
24+------+---------+-------+------+
25
26
27set enable_unique_key_partial_update=true;
28set enable_insert_strict=false;
29insert into tbl3(id, score) values(1, 999), (2, 888);
30
31select * from tbl3 order by id;
32+------+---------+-------+------+
33| id   | name    | score | aid  |
34+------+---------+-------+------+
35|    1 | Doris   |   999 |    0 |
36|    2 | Nereids |   888 |    1 |
37|    3 | Bob     |   300 |    2 |
38+------+---------+-------+------+
39
40insert into tbl3(id, aid) values(1, 1000), (3, 500);
41
42select * from tbl3 order by id;
43+------+---------+-------+------+
44| id   | name    | score | aid  |
45+------+---------+-------+------+
46|    1 | Doris   |   999 | 1000 |
47|    2 | Nereids |   888 |    1 |
48|    3 | Bob     |   300 |  500 |
49+------+---------+-------+------+

使用场景

字典编码

在用户画像场景中使用 bitmap 做人群分析时需要构建用户字典,每个用户对应一个唯一的整数字典值,聚集的字典值可以获得更好的 bitmap 性能。

以离线 uv,pv 分析场景为例,假设有如下用户行为表存放明细数据:

SQL
1CREATE TABLE `demo`.`dwd_dup_tbl` (
2    `user_id` varchar(50) NOT NULL,
3    `dim1` varchar(50) NOT NULL,
4    `dim2` varchar(50) NOT NULL,
5    `dim3` varchar(50) NOT NULL,
6    `dim4` varchar(50) NOT NULL,
7    `dim5` varchar(50) NOT NULL,
8    `visit_time` DATE NOT NULL
9) ENGINE=OLAP
10DUPLICATE KEY(`user_id`)
11DISTRIBUTED BY HASH(`user_id`) BUCKETS 32
12PROPERTIES (
13"replication_allocation" = "tag.location.default: 3"
14);

利用自增列创建如下字典表

SQL
1CREATE TABLE `demo`.`dictionary_tbl` (
2    `user_id` varchar(50) NOT NULL,
3    `aid` BIGINT NOT NULL AUTO_INCREMENT
4) ENGINE=OLAP
5UNIQUE KEY(`user_id`)
6DISTRIBUTED BY HASH(`user_id`) BUCKETS 32
7PROPERTIES (
8"replication_allocation" = "tag.location.default: 3",
9"enable_unique_key_merge_on_write" = "true"
10);

将存量数据中的user_id导入字典表,建立user_id到整数值的编码映射

SQL
1insert into dictionary_tbl(user_id)
2select user_id from dwd_dup_tbl group by user_id;

或者使用如下方式仅将增量数据中的user_id导入到字典表

SQL
1insert into dictionary_tbl(user_id)
2select dwd_dup_tbl.user_id from dwd_dup_tbl left join dictionary_tbl
3on dwd_dup_tbl.user_id = dictionary_tbl.user_id where dwd_dup_tbl.visit_time > '2023-12-10' and dictionary_tbl.user_id is NULL;

实际场景中也可以使用 flink connector 把数据写入到 PALO。

假设dim1, dim3, dim5是我们关心的统计维度,建立如下聚合表存放聚合结果

SQL
1CREATE TABLE `demo`.`dws_agg_tbl` (
2    `dim1` varchar(50) NOT NULL,
3    `dim3` varchar(50) NOT NULL,
4    `dim5` varchar(50) NOT NULL,
5    `user_id_bitmap` BITMAP BITMAP_UNION NOT NULL,
6    `pv` BIGINT SUM NOT NULL 
7) ENGINE=OLAP
8AGGREGATE KEY(`dim1`,`dim3`,`dim5`)
9DISTRIBUTED BY HASH(`dim1`) BUCKETS 32
10PROPERTIES (
11"replication_allocation" = "tag.location.default: 3"
12);

将数据聚合运算后存放至聚合结果表

SQL
1insert into dws_agg_tbl
2select dwd_dup_tbl.dim1, dwd_dup_tbl.dim3, dwd_dup_tbl.dim5, BITMAP_UNION(TO_BITMAP(dictionary_tbl.aid)), COUNT(1)
3from dwd_dup_tbl INNER JOIN dictionary_tbl on dwd_dup_tbl.user_id = dictionary_tbl.user_id
4group by dwd_dup_tbl.dim1, dwd_dup_tbl.dim3, dwd_dup_tbl.dim5;

用如下语句进行 uv, pv 查询

SQL
1select dim1, dim3, dim5, bitmap_count(user_id_bitmap) as uv, pv from dws_agg_tbl;

高效分页

在页面展示数据时,往往需要做分页展示。传统的分页通常使用 SQL 中的 limit, offset + order by 进行查询。例如有如下业务表需要进行展示:

SQL
1CREATE TABLE `demo`.`records_tbl` (
2    `user_id` int(11) NOT NULL COMMENT "",
3    `name` varchar(26) NOT NULL COMMENT "",
4    `address` varchar(41) NOT NULL COMMENT "",
5    `city` varchar(11) NOT NULL COMMENT "",
6    `nation` varchar(16) NOT NULL COMMENT "",
7    `region` varchar(13) NOT NULL COMMENT "",
8    `phone` varchar(16) NOT NULL COMMENT "",
9    `mktsegment` varchar(11) NOT NULL COMMENT ""
10) DUPLICATE KEY (`user_id`, `name`)
11DISTRIBUTED BY HASH(`user_id`) BUCKETS 10
12PROPERTIES (
13"replication_allocation" = "tag.location.default: 3"
14);

假设在分页展示中,每页展示 100 条数据。那么获取第 1 页的数据可以使用如下 sql 进行查询:

SQL
1select * from records_tbl order by user_id, name limit 100;

获取第 2 页的数据可以使用如下 sql 进行查询:

SQL
1select * from records_tbl order by user_id, name limit 100 offset 100;

然而,当进行深分页查询时 (offset 很大时),即使实际需要需要的数据行很少,该方法依然会将全部数据读取到内存中进行全量排序后再进行后续处理,这种方法比较低效。可以通过自增列给每行数据一个唯一值,在查询时就可以通过记录之前页面unique_value列的最大值max_value,然后使用 where unique_value > max_value limit rows_per_page 的方式通过提下推谓词提前过滤大量数据,从而更高效地实现分页。

仍然以上述业务表为例,通过在表中添加一个自增列从而赋予每一行一个唯一标识:

SQL
1CREATE TABLE `demo`.`records_tbl2` (
2    `user_id` int(11) NOT NULL COMMENT "",
3    `name` varchar(26) NOT NULL COMMENT "",
4    `address` varchar(41) NOT NULL COMMENT "",
5    `city` varchar(11) NOT NULL COMMENT "",
6    `nation` varchar(16) NOT NULL COMMENT "",
7    `region` varchar(13) NOT NULL COMMENT "",
8    `phone` varchar(16) NOT NULL COMMENT "",
9    `mktsegment` varchar(11) NOT NULL COMMENT "",
10    `unique_value` BIGINT NOT NULL AUTO_INCREMENT
11) DUPLICATE KEY (`user_id`, `name`)
12DISTRIBUTED BY HASH(`user_id`) BUCKETS 10
13PROPERTIES (
14"replication_allocation" = "tag.location.default: 3"
15);

在分页展示中,每页展示 100 条数据,使用如下方式获取第一页的数据:

SQL
1select * from records_tbl2 order by unique_value limit 100;

通过程序记录下返回结果中unique_value中的最大值,假设为 99,则可用如下方式查询第 2 页的数据:

SQL
1select * from records_tbl2 where unique_value > 99 order by unique_value limit 100;

如果要直接查询一个靠后页面的内容,此时不方便直接获取之前页面数据中unique_value的最大值时,例如要直接获取第 101 页的内容,则可以使用如下方式进行查询

SQL
1select user_id, name, address, city, nation, region, phone, mktsegment
2from records_tbl2, (select unique_value as max_value from records_tbl2 order by unique_value limit 1 offset 9999) as previous_data
3where records_tbl2.unique_value > previous_data.max_value
4order by unique_value limit 100;

上一篇
数据类型
下一篇
概览