分析函数(窗口函数)

数据仓库 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
  • 分析函数(窗口函数)
本页目录
  • 基本概念介绍
  • 处理顺序
  • 结果集分区
  • 窗口
  • 当前行
  • 排序函数
  • NTILE 函数
  • 聚合函数
  • 使用聚合函数 SUM 计算累计值
  • 使用聚合函数 AVG 计算移动平均值
  • 报告函数
  • LAG / LEAD 函数
  • 分析函数数据的唯一排序
  • 附录

分析函数(窗口函数)

更新时间:2025-08-21

分析函数,也称为窗口函数,是一种在 SQL 查询中对数据集中的行进行复杂计算的函数。窗口函数的特点在于,它们不会减少查询结果的行数,而是为每一行增加一个新的计算结果。窗口函数适用于多种分析场景,如计算滚动合计、排名以及移动平均等。

下面是一个使用窗口函数计算每个商店的前后三天的销售移动平均值的例子:

SQL
1CREATE TABLE daily_sales
2(store_id INT, sales_date DATE, sales_amount DECIMAL(10, 2))
3PROPERTIES (
4  "replication_num" = "1"
5);
6INSERT INTO daily_sales (store_id, sales_date, sales_amount) VALUES (1, '2023-01-01', 100.00), (1, '2023-01-02', 150.00), (1, '2023-01-03', 200.00), (1, '2023-01-04', 250.00), (1, '2023-01-05', 300.00), (1, '2023-01-06', 350.00), (1, '2023-01-07', 400.00), (1, '2023-01-08', 450.00), (1, '2023-01-09', 500.00), (2, '2023-01-01', 110.00), (2, '2023-01-02', 160.00), (2, '2023-01-03', 210.00), (2, '2023-01-04', 260.00), (2, '2023-01-05', 310.00), (2, '2023-01-06', 360.00), (2, '2023-01-07', 410.00), (2, '2023-01-08', 460.00), (2, '2023-01-09', 510.00);
7
8SELECT
9        store_id,
10        sales_date,
11        sales_amount,
12        AVG(sales_amount) OVER ( PARTITION BY store_id ORDER BY sales_date 
13        ROWS BETWEEN 3 PRECEDING AND 3 FOLLOWING ) AS moving_avg_sales
14FROM
15        daily_sales;

查询结果为如下:

SQL
1+----------+------------+--------------+------------------+
2| store_id | sales_date | sales_amount | moving_avg_sales |
3+----------+------------+--------------+------------------+
4|        1 | 2023-01-01 |       100.00 |         175.0000 |
5|        1 | 2023-01-02 |       150.00 |         200.0000 |
6|        1 | 2023-01-03 |       200.00 |         225.0000 |
7|        1 | 2023-01-04 |       250.00 |         250.0000 |
8|        1 | 2023-01-05 |       300.00 |         300.0000 |
9|        1 | 2023-01-06 |       350.00 |         350.0000 |
10|        1 | 2023-01-07 |       400.00 |         375.0000 |
11|        1 | 2023-01-08 |       450.00 |         400.0000 |
12|        1 | 2023-01-09 |       500.00 |         425.0000 |
13|        2 | 2023-01-01 |       110.00 |         185.0000 |
14|        2 | 2023-01-02 |       160.00 |         210.0000 |
15|        2 | 2023-01-03 |       210.00 |         235.0000 |
16|        2 | 2023-01-04 |       260.00 |         260.0000 |
17|        2 | 2023-01-05 |       310.00 |         310.0000 |
18|        2 | 2023-01-06 |       360.00 |         360.0000 |
19|        2 | 2023-01-07 |       410.00 |         385.0000 |
20|        2 | 2023-01-08 |       460.00 |         410.0000 |
21|        2 | 2023-01-09 |       510.00 |         435.0000 |
22+----------+------------+--------------+------------------+
2318 rows in set (0.09 sec)

基本概念介绍

处理顺序

使用分析函数的查询处理可以分为三个阶段。

  1. 执行所有的连接、WHERE、GROUP BY 和 HAVING 子句。
  2. 将结果集提供给分析函数,并进行所有必要的计算。
  3. 如果查询的末尾包含 ORDER BY 子句,则处理该子句以实现精确的输出排序。

结果集分区

分区是在使用 PARTITION BY 子句定义的组之后创建的。分析函数允许用户将查询结果集划分为称为分区的行组。

注意: 分析函数中使用的术语“分区”与表分区功能无关。在本章中,术语“分区”仅指与分析函数相关的含义。

窗口

对于分区中的每一行,你可以定义一个滑动数据窗口。此窗口确定了用于执行当前行计算所涉及的行范围。窗口具有一个起始行和一个结束行,根据其定义,窗口可以在一端或两端进行滑动。例如,为累积和函数定义的窗口,其起始行固定在其分区的第一行,而其结束行则从起点一直滑动到分区的最后一行。相反,为移动平均值定义的窗口,其起点和终点都会进行滑动。

窗口的大小可以设置为与分区中的所有行一样大,也可以设置为在分区内仅包含一行的滑动窗口。需要注意的是,当窗口靠近分区的边界时,由于边界的限制,计算的范围可能会缩减行数,此时函数仅返回可用行的计算结果。

在使用窗口函数时,当前行会被包含在计算之中。因此,在处理 n 个项目时,应指定为 (n-1)。例如,如果您需要计算五天的平均值,窗口应指定为“rows between 4 preceding and current row”,这也可以简写为“rows 4 preceding”。

当前行

使用分析函数执行的每个计算都是基于分区内的当前行。当前行作为确定窗口开始和结束的参考点,具体如图所示。

例如,可以使用一个窗口来定义中心移动平均值计算,该窗口包含当前行、当前行之前的 6 行以及当前行之后的 6 行。这样就创建了一个包含 13 行的滑动窗口。

排序函数

排序函数中,只有当指定的排序列是唯一值列时,查询结果才是确定的;如果排序列包含重复值,则每次的查询结果可能不同。

NTILE 函数

NTILE 是 SQL 中的一种窗口函数,用于将查询结果集分成指定数量的桶(组),并为每一行分配一个桶号。这在数据分析和报告中非常有用,特别是在需要对数据进行分组和排序时。

1. 函数语法

SQL
1NTILE(num_buckets) OVER ([PARTITION BY partition_expression] ORDER BY order_expression)
  • num_buckets:要将行划分成的桶的数量。
  • PARTITION BY partition_expression(可选):定义如何分区数据。
  • ORDER BY order_expression:定义如何排序数据。

2. 使用 NTILE 函数

假设有一个包含学生考试成绩的表class_student_scores,希望将学生按成绩分成 4 个组,每组中的学生数量尽可能均匀。

首先,创建并插入数据到class_student_scores表中:

SQL
1CREATE TABLE class_student_scores (
2    class_id INT,
3    student_id INT,
4    student_name VARCHAR(50),
5    score INT
6)distributed by hash(student_id) properties('replication_num'=1);
7
8INSERT INTO class_student_scores VALUES
9(1, 1, 'Alice', 85),
10(1, 2, 'Bob', 92),
11(1, 3, 'Charlie', 87),
12(2, 4, 'David', 78),
13(2, 5, 'Eve', 95),
14(2, 6, 'Frank', 80),
15(2, 7, 'Grace', 90),
16(2, 8, 'Hannah', 84);

然后,使用 NTILE 函数将学生按成绩分成 4 个组:

SQL
1SELECT  
2    student_id,  
3    student_name,  
4    score,  
5    NTILE(4) OVER (ORDER BY score DESC) AS bucket  
6FROM  
7    class_student_scores;

结果如下:

SQL
1+------------+--------------+-------+--------+
2| student_id | student_name | score | bucket |
3+------------+--------------+-------+--------+
4|          5 | Eve          |    95 |      1 |
5|          2 | Bob          |    92 |      1 |
6|          7 | Grace        |    90 |      2 |
7|          3 | Charlie      |    87 |      2 |
8|          1 | Alice        |    85 |      3 |
9|          8 | Hannah       |    84 |      3 |
10|          6 | Frank        |    80 |      4 |
11|          4 | David        |    78 |      4 |
12+------------+--------------+-------+--------+
138 rows in set (0.12 sec)

在这个例子中,NTILE(4)函数根据成绩将学生分成了 4 个组(桶),每个组的学生数量尽可能均匀。

注意事项

  • 如果不能均匀地将行分配到桶中,某些桶可能会多一行。
  • NTILE函数在每个分区内工作,如果使用PARTITION BY子句,则每个分区内的数据将分别进行桶分配。

3. 使用 NTILE 和 PARTITION BY

假设按班级对学生进行分组,然后在每个班级内将学生按成绩分成 3 个组,可以使用PARTITION BY和NTILE函数:

SQL
1SELECT  
2    class_id,  
3    student_id,  
4    student_name,  
5    score,  
6    NTILE(3) OVER (PARTITION BY class_id ORDER BY score DESC) AS bucket  
7FROM  
8    class_student_scores;

结果如下:

SQL
1+----------+------------+--------------+-------+--------+
2| class_id | student_id | student_name | score | bucket |
3+----------+------------+--------------+-------+--------+
4|        1 |          2 | Bob          |    92 |      1 |
5|        1 |          3 | Charlie      |    87 |      2 |
6|        1 |          1 | Alice        |    85 |      3 |
7|        2 |          5 | Eve          |    95 |      1 |
8|        2 |          7 | Grace        |    90 |      1 |
9|        2 |          8 | Hannah       |    84 |      2 |
10|        2 |          6 | Frank        |    80 |      2 |
11|        2 |          4 | David        |    78 |      3 |
12+----------+------------+--------------+-------+--------+
138 rows in set (0.05 sec)

在这个例子中,学生按班级进行分区,然后在每个班级内按成绩分成 3 个组。每个组的学生数量尽可能均匀。

聚合函数

使用聚合函数 SUM 计算累计值

示例如下:

SQL
1SELECT
2        i_category,
3        year(d_date),
4        month(d_date),
5        sum(ss_net_paid) as total_sales,
6        sum(sum(ss_net_paid)) over (partition by i_category order by year(d_date),month(d_date) ROWS UNBOUNDED PRECEDING) as cum_sales
7FROM 
8        store_sales,
9        date_dim d1,
10        item
11WHERE 
12        d1.d_date_sk = ss_sold_date_sk
13        and i_item_sk = ss_item_sk
14        and year(d_date) =2000
15        and i_category in ('Books','Electronics')
16GROUP BY         
17        i_category,
18        year(d_date),
19        month(d_date)

查询结果如下:

SQL
1+-------------+--------------+---------------+-------------+-------------+
2| i_category  | year(d_date) | month(d_date) | total_sales | cum_sales   |
3+-------------+--------------+---------------+-------------+-------------+
4| Books       |         2000 |             1 |  5348482.88 |  5348482.88 |
5| Books       |         2000 |             2 |  4353162.03 |  9701644.91 |
6| Books       |         2000 |             3 |  4466958.01 | 14168602.92 |
7| Books       |         2000 |             4 |  4495802.19 | 18664405.11 |
8| Books       |         2000 |             5 |  4589913.47 | 23254318.58 |
9| Books       |         2000 |             6 |  4384384.00 | 27638702.58 |
10| Books       |         2000 |             7 |  4488018.76 | 32126721.34 |
11| Books       |         2000 |             8 |  9909227.94 | 42035949.28 |
12| Books       |         2000 |             9 | 10366110.30 | 52402059.58 |
13| Books       |         2000 |            10 | 10445320.76 | 62847380.34 |
14| Books       |         2000 |            11 | 15246901.52 | 78094281.86 |
15| Books       |         2000 |            12 | 15526630.11 | 93620911.97 |
16| Electronics |         2000 |             1 |  5534568.17 |  5534568.17 |
17| Electronics |         2000 |             2 |  4472655.10 | 10007223.27 |
18| Electronics |         2000 |             3 |  4316942.60 | 14324165.87 |
19| Electronics |         2000 |             4 |  4211523.06 | 18535688.93 |
20| Electronics |         2000 |             5 |  4723661.00 | 23259349.93 |
21| Electronics |         2000 |             6 |  4127773.06 | 27387122.99 |
22| Electronics |         2000 |             7 |  4286523.05 | 31673646.04 |
23| Electronics |         2000 |             8 | 10004890.96 | 41678537.00 |
24| Electronics |         2000 |             9 | 10143665.77 | 51822202.77 |
25| Electronics |         2000 |            10 | 10312020.35 | 62134223.12 |
26| Electronics |         2000 |            11 | 14696000.54 | 76830223.66 |
27| Electronics |         2000 |            12 | 15344441.52 | 92174665.18 |
28+-------------+--------------+---------------+-------------+-------------+
2924 rows in set (0.13 sec)

在此示例中,聚合函数 SUM 为每一行定义一个窗口,该窗口从分区的开头(UNBOUNDED PRECEDING)开始,默认在当前行结束。在此示例中,需要嵌套使用 SUM,因为需要对本身就是 SUM 的结果执行 SUM。嵌套聚合在分析聚合函数中高频使用。

使用聚合函数 AVG 计算移动平均值

示例如下:

SQL
1SELECT
2        i_category,
3        year(d_date),
4        month(d_date),
5        sum(ss_net_paid) as total_sales,
6        avg(sum(ss_net_paid)) over (order by year(d_date),month(d_date) ROWS 2 PRECEDING) as avg
7FROM 
8        store_sales,
9        date_dim d1,
10        item
11WHERE 
12        d1.d_date_sk = ss_sold_date_sk
13        and i_item_sk = ss_item_sk
14        and year(d_date) =2000
15        and i_category='Books'
16GROUP BY         
17        i_category,
18        year(d_date),
19        month(d_date)

查询结果如下:

SQL
1+------------+--------------+---------------+-------------+---------------+
2| i_category | year(d_date) | month(d_date) | total_sales | avg           |
3+------------+--------------+---------------+-------------+---------------+
4| Books      |         2000 |             1 |  5348482.88 |  5348482.8800 |
5| Books      |         2000 |             2 |  4353162.03 |  4850822.4550 |
6| Books      |         2000 |             3 |  4466958.01 |  4722867.6400 |
7| Books      |         2000 |             4 |  4495802.19 |  4438640.7433 |
8| Books      |         2000 |             5 |  4589913.47 |  4517557.8900 |
9| Books      |         2000 |             6 |  4384384.00 |  4490033.2200 |
10| Books      |         2000 |             7 |  4488018.76 |  4487438.7433 |
11| Books      |         2000 |             8 |  9909227.94 |  6260543.5666 |
12| Books      |         2000 |             9 | 10366110.30 |  8254452.3333 |
13| Books      |         2000 |            10 | 10445320.76 | 10240219.6666 |
14| Books      |         2000 |            11 | 15246901.52 | 12019444.1933 |
15| Books      |         2000 |            12 | 15526630.11 | 13739617.4633 |
16+------------+--------------+---------------+-------------+---------------+
1712 rows in set (0.13 sec)

注意: 输出数据中 AVG 列的前两行没有计算三天的移动平均值,因为边界数据前面没有足够的行数(在 SQL 中指定的行数为 3)。

同时,还可以计算以当前行为中心的窗口聚合函数。例如,此示例计算了 Books 类别的产品 在 2000 年各月销售额的中心移动平均值,具体计算的是当前行前一个月、当前行、以及当前行后一个月的销售总额平均值。

SQL
1SELECT
2        i_category,
3        year(d_date),
4        month(d_date),
5        sum(ss_net_paid) as total_sales,
6        avg(sum(ss_net_paid)) over (order by year(d_date),month(d_date) ROWS between 1 PRECEDING and 1 following) as avg_sales
7FROM 
8        store_sales,
9        date_dim d1,
10        item
11WHERE 
12        d1.d_date_sk = ss_sold_date_sk
13        and i_item_sk = ss_item_sk
14        and year(d_date) =2000
15        and i_category='Books'
16GROUP BY         
17        i_category,
18        year(d_date),
19        month(d_date)

注意: 输出数据中起始行和结束行的中心移动平均值计算仅基于两天,因为边界数据前后没有足够的行数。

报告函数

报告函数是指每一行的窗口范围都是整个 partition。报告函数的主要优点是能够在单个查询块中多次传递数据,从而提高查询性能。例如,“对于每一年,找出其销售额最高的商品类别”之类的查询,使用报告函数则不需要进行 JOIN 操作。示例如下:

SQL
1select year,category,total_sum from (
2select
3        year(d_date) as year,
4        i_category as category,
5        sum(ss_net_paid) as total_sum,
6        max(sum(ss_net_paid)) over (partition by year(d_date)) as max_sales
7from
8        store_sales,
9        date_dim d1,
10        item
11where
12        d1.d_date_sk = ss_sold_date_sk
13        and i_item_sk = ss_item_sk
14        and year(d_date) in(1998, 1999)
15group by
16        year(d_date), i_category 
17) t
18where total_sum=max_sales;

报告MAX(SUM(ss_net_paid))的内层查询结果如下:

SQL
1+------+-------------+-------------+-------------+
2| year | category    | total_sum   | max_sales   |
3+------+-------------+-------------+-------------+
4| 1998 | Electronics | 91723676.27 | 91723676.27 |
5| 1998 | Books       | 91307909.84 | 91723676.27 |
6| 1999 | Electronics | 90310850.54 | 90310850.54 |
7| 1999 | Books       | 88993351.11 | 90310850.54 |
8+------+-------------+-------------+-------------+
94 rows in set (0.11 sec)

完整的查询结果如下:

SQL
1+------+-------------+-------------+
2| year | category    | total_sum   |
3+------+-------------+-------------+
4| 1998 | Electronics | 91723676.27 |
5| 1999 | Electronics | 90310850.54 |
6+------+-------------+-------------+
72 rows in set (0.12 sec)

你可以将报告聚合与嵌套查询结合使用,以解决一些复杂的问题,比如查找重要商品子类别中销量最好的产品。以“查找产品销售额占其产品类别总销售额 20% 以上的子类别,并从中选出其中销量最高的五种商品”为例,查询语句如下:

SQL
1select i_category as categ, i_class as sub_categ, i_item_id 
2from
3    (
4    select 
5        i_item_id,i_class, i_category, sum(ss_net_paid) as sales,
6        sum(sum(ss_net_paid)) over(partition by i_category) as cat_sales,
7        sum(sum(ss_net_paid)) over(partition by i_class) as sub_cat_sales,
8        rank() over (partition by i_class order by sum(ss_net_paid) desc) rank_in_line
9    from 
10        store_sales,
11        item
12    where
13        i_item_sk = ss_item_sk
14    group by i_class, i_category, i_item_id) t
15where sub_cat_sales>0.2*cat_sales and rank_in_line<=5;

LAG / LEAD 函数

LAG 和 LEAD 函数适用于值之间的比较。两个函数无需进行自连接,均可以同时访问表中的多个行,从而可以提高查询处理的速度。具体来说,LAG 函数能够提供对当前行之前给定偏移处的行的访问,而 LEAD 函数则提供对当前行之后给定偏移处的行的访问。

以下是一个使用 LAG 函数的 SQL 查询示例,该查询希望选取特定年份(1999, 2000, 2001, 2002)中,每个商品类别的总销售额、前一年的总销售额以及两者之间的差异:

SQL
1select year, category, total_sales, before_year_sales, total_sales - before_year_sales from
2(
3select
4        sum(ss_net_paid) as total_sales,
5        year(d_date) year,
6        i_category category,
7        lag(sum(ss_net_paid), 1,0) over(PARTITION BY i_category ORDER BY YEAR(d_date)) AS before_year_sales
8from
9        store_sales,
10        date_dim d1,
11        item
12where
13        d1.d_date_sk = ss_sold_date_sk
14        and i_item_sk = ss_item_sk
15GROUP BY 
16        YEAR(d_date), i_category
17) t
18where year in (1999, 2000, 2001, 2002)

查询结果如下:

SQL
1+------+-------------+-------------+-------------------+-----------------------------------+
2| year | category    | total_sales | before_year_sales | (total_sales - before_year_sales) |
3+------+-------------+-------------+-------------------+-----------------------------------+
4| 1999 | Books       | 88993351.11 |       91307909.84 |                       -2314558.73 |
5| 2000 | Books       | 93620911.97 |       88993351.11 |                        4627560.86 |
6| 2001 | Books       | 90640097.99 |       93620911.97 |                       -2980813.98 |
7| 2002 | Books       | 89585515.90 |       90640097.99 |                       -1054582.09 |
8| 1999 | Electronics | 90310850.54 |       91723676.27 |                       -1412825.73 |
9| 2000 | Electronics | 92174665.18 |       90310850.54 |                        1863814.64 |
10| 2001 | Electronics | 92598527.85 |       92174665.18 |                         423862.67 |
11| 2002 | Electronics | 94303831.84 |       92598527.85 |                        1705303.99 |
12+------+-------------+-------------+-------------------+-----------------------------------+
138 rows in set (0.16 sec)

分析函数数据的唯一排序

1. 存在返回结果不一致的问题

当使用窗口函数的 ORDER BY 子句未能产生数据的唯一排序时,例如当 ORDER BY 表达式导致重复值时,行的顺序会变得不确定。这意味着在多次执行查询时,这些行的返回顺序可能会有所不同,进而导致窗口函数返回不一致的结果。

通过以下示例可以看出,该查询在多次运行时返回了不同的结果。出现不一致性的情况主要由于 ORDER BY dateid 没有为 SUM 窗口函数提供产生数据的唯一排序。

SQL
1CREATE TABLE test_window_order 
2    (item_id int,
3    date_time date,
4    sales double)
5distributed BY hash(item_id)
6properties("replication_num" = 1);
7
8INSERT INTO test_window_order VALUES
9(1, '2024-07-01', 100),
10(2, '2024-07-01', 100),
11(3, '2024-07-01', 140);
12
13SELECT
14    item_id, date_time, sales,
15    sum(sales) OVER (ORDER BY date_time ROWS BETWEEN 
16        UNBOUNDED PRECEDING AND CURRENT ROW) sum
17FROM
18    test_window_order;

由于排序列 date_time存在重复值,可能呈现以下两种查询结果:

SQL
1+---------+------------+-------+------+
2| item_id | date_time  | sales | sum  |
3+---------+------------+-------+------+
4|       1 | 2024-07-01 |   100 |  100 |
5|       3 | 2024-07-01 |   140 |  240 |
6|       2 | 2024-07-01 |   100 |  340 |
7+---------+------------+-------+------+
83 rows in set (0.03 sec)
9+---------+------------+-------+------+
10| item_id | date_time  | sales | sum  |
11+---------+------------+-------+------+
12|       2 | 2024-07-01 |   100 |  100 |
13|       1 | 2024-07-01 |   100 |  200 |
14|       3 | 2024-07-01 |   140 |  340 |
15+---------+------------+-------+------+
163 rows in set (0.02 sec)

2. 解决方法

为了解决这个问题,可以在 ORDER BY 子句中添加一个唯一值列,如 item_id,以确保排序的唯一性。

SQL
1SELECT
2        item_id,
3        date_time,
4        sales,
5        sum(sales) OVER (
6        ORDER BY item_id,
7        date_time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) sum
8FROM
9        test_window_order;

则查询结果固定为:

SQL
1+---------+------------+-------+------+
2| item_id | date_time  | sales | sum  |
3+---------+------------+-------+------+
4|       1 | 2024-07-01 |   100 |  100 |
5|       2 | 2024-07-01 |   100 |  200 |
6|       3 | 2024-07-01 |   140 |  340 |
7+---------+------------+-------+------+
83 rows in set (0.03 sec)

附录

示例中使用到的表的建表语句如下:

SQL
1CREATE DATABASE IF NOT EXISTS doc_tpcds;
2USE doc_tpcds;
3
4CREATE TABLE IF NOT EXISTS item (
5    i_item_sk bigint not null,
6    i_item_id char(16) not null,
7    i_rec_start_date date,
8    i_rec_end_date date,
9    i_item_desc varchar(200),
10    i_current_price decimal(7,2),
11    i_wholesale_cost decimal(7,2),
12    i_brand_id integer,
13    i_brand char(50),
14    i_class_id integer,
15    i_class char(50),
16    i_category_id integer,
17    i_category char(50),
18    i_manufact_id integer,
19    i_manufact char(50),
20    i_size char(20),
21    i_formulation char(20),
22    i_color char(20),
23    i_units char(10),
24    i_container char(10),
25    i_manager_id integer,
26    i_product_name char(50)
27)
28DUPLICATE KEY(i_item_sk)
29DISTRIBUTED BY HASH(i_item_sk) BUCKETS 12
30PROPERTIES (
31  "replication_num" = "1"
32);
33
34CREATE TABLE IF NOT EXISTS store_sales (
35    ss_item_sk bigint not null,
36    ss_ticket_number bigint not null,
37    ss_sold_date_sk bigint,
38    ss_sold_time_sk bigint,
39    ss_customer_sk bigint,
40    ss_cdemo_sk bigint,
41    ss_hdemo_sk bigint,
42    ss_addr_sk bigint,
43    ss_store_sk bigint,
44    ss_promo_sk bigint,
45    ss_quantity integer,
46    ss_wholesale_cost decimal(7,2),
47    ss_list_price decimal(7,2),
48    ss_sales_price decimal(7,2),
49    ss_ext_discount_amt decimal(7,2),
50    ss_ext_sales_price decimal(7,2),
51    ss_ext_wholesale_cost decimal(7,2),
52    ss_ext_list_price decimal(7,2),
53    ss_ext_tax decimal(7,2),
54    ss_coupon_amt decimal(7,2),
55    ss_net_paid decimal(7,2),
56    ss_net_paid_inc_tax decimal(7,2),
57    ss_net_profit decimal(7,2)
58)
59DUPLICATE KEY(ss_item_sk, ss_ticket_number)
60DISTRIBUTED BY HASH(ss_item_sk, ss_ticket_number) BUCKETS 32
61PROPERTIES (
62  "replication_num" = "1"
63);
64
65CREATE TABLE IF NOT EXISTS date_dim (
66    d_date_sk bigint not null,
67    d_date_id char(16) not null,
68    d_date date,
69    d_month_seq integer,
70    d_week_seq integer,
71    d_quarter_seq integer,
72    d_year integer,
73    d_dow integer,
74    d_moy integer,
75    d_dom integer,
76    d_qoy integer,
77    d_fy_year integer,
78    d_fy_quarter_seq integer,
79    d_fy_week_seq integer,
80    d_day_name char(9),
81    d_quarter_name char(6),
82    d_holiday char(1),
83    d_weekend char(1),
84    d_following_holiday char(1),
85    d_first_dom integer,
86    d_last_dom integer,
87    d_same_day_ly integer,
88    d_same_day_lq integer,
89    d_current_day char(1),
90    d_current_week char(1),
91    d_current_month char(1),
92    d_current_quarter char(1),
93    d_current_year char(1)
94)
95DUPLICATE KEY(d_date_sk)
96DISTRIBUTED BY HASH(d_date_sk) BUCKETS 12
97PROPERTIES (
98  "replication_num" = "1"
99);
100
101CREATE TABLE IF NOT EXISTS customer_address (
102    ca_address_sk bigint not null,
103    ca_address_id char(16) not null,
104    ca_street_number char(10),
105    ca_street_name varchar(60),
106    ca_street_type char(15),
107    ca_suite_number char(10),
108    ca_city varchar(60),
109    ca_county varchar(30),
110    ca_state char(2),
111    ca_zip char(10),
112    ca_country varchar(20),
113    ca_gmt_offset decimal(5,2),
114    ca_location_type char(20)
115)
116DUPLICATE KEY(ca_address_sk)
117DISTRIBUTED BY HASH(ca_address_sk) BUCKETS 12
118PROPERTIES (
119  "replication_num" = "1"
120);

在终端执行如下命令,下载数据到本地,并使用 Stream Load 的方式加载数据:

Shell
1curl -L https://cdn.selectdb.com/static/doc_ddl_dir_d27a752a7b.tar -o - | tar -Jxf -
2
3curl --location-trusted \
4-u "root:" \
5-H "column_separator:|" \
6-H "columns: i_item_sk, i_item_id, i_rec_start_date, i_rec_end_date, i_item_desc, i_current_price, i_wholesale_cost, i_brand_id, i_brand, i_class_id, i_class, i_category_id, i_category, i_manufact_id, i_manufact, i_size, i_formulation, i_color, i_units, i_container, i_manager_id, i_product_name" \
7-T "doc_ddl_dir/item_1_10.dat" \
8http://127.0.0.1:8030/api/doc_tpcds/item/_stream_load
9
10curl --location-trusted \
11-u "root:" \
12-H "column_separator:|" \
13-H "columns: d_date_sk, d_date_id, d_date, d_month_seq, d_week_seq, d_quarter_seq, d_year, d_dow, d_moy, d_dom, d_qoy, d_fy_year, d_fy_quarter_seq, d_fy_week_seq, d_day_name, d_quarter_name, d_holiday, d_weekend, d_following_holiday, d_first_dom, d_last_dom, d_same_day_ly, d_same_day_lq, d_current_day, d_current_week, d_current_month, d_current_quarter, d_current_year" \
14-T "doc_ddl_dir/date_dim_1_10.dat" \
15http://127.0.0.1:8030/api/doc_tpcds/date_dim/_stream_load
16
17curl --location-trusted \
18-u "root:" \
19-H "column_separator:|" \
20-H "columns: ss_sold_date_sk, ss_sold_time_sk, ss_item_sk, ss_customer_sk, ss_cdemo_sk, ss_hdemo_sk, ss_addr_sk, ss_store_sk, ss_promo_sk, ss_ticket_number, ss_quantity, ss_wholesale_cost, ss_list_price, ss_sales_price, ss_ext_discount_amt, ss_ext_sales_price, ss_ext_wholesale_cost, ss_ext_list_price, ss_ext_tax, ss_coupon_amt, ss_net_paid, ss_net_paid_inc_tax, ss_net_profit" \
21-T "doc_ddl_dir/store_sales.csv" \
22http://127.0.0.1:8030/api/doc_tpcds/store_sales/_stream_load
23
24curl --location-trusted \
25-u "root:" \
26-H "column_separator:|" \
27-H "ca_address_sk, ca_address_id, ca_street_number, ca_street_name, ca_street_type, ca_suite_number, ca_city, ca_county, ca_state, ca_zip, ca_country, ca_gmt_offset, ca_location_type" \
28-T "doc_ddl_dir/customer_address_1_10.dat" \
29http://127.0.0.1:8030/api/doc_tpcds/customer_address/_stream_load

上一篇
聚合多维分析
下一篇
公用表表达式(CTE)