当前位置: 首页 > news >正文

【PostgreSQL数据分析实战:从数据清洗到可视化全流程】附录-C. 常用SQL脚本模板

👉 点击关注不迷路
👉 点击关注不迷路
👉 点击关注不迷路


文章大纲

      • 附录C. 常用SQL脚本模板速查表
        • 一、数据清洗与预处理模板
        • 二、数据聚合与分析模板
        • 三、窗口函数应用模板
        • 四、性能优化与监控模板
        • 五、数据备份与恢复模板
        • 六、权限管理与安全模板
        • 七、事务与错误处理模板
        • 八、时间序列分析模板
        • 九、日志分析与诊断模板
        • 十、高级功能模板
      • 附录使用说明

在这里插入图片描述
以下是《PostgreSQL数据分析实战:从数据清洗到可视化全流程》附录C的内容框架和核心知识点整理,结合官方文档与实战经验,采用 表格化速查形式呈现,适合技术书籍附录场景

附录C. 常用SQL脚本模板速查表

一、数据清洗与预处理模板
场景SQL脚本示例说明
去除字段首尾空格UPDATE users SET username = TRIM(username);使用TRIM()函数去除字符串首尾空格
处理空值填充UPDATE sales SET amount = COALESCE(amount, 0);使用COALESCE()NULL值替换为指定值(如0)
正则清洗UPDATE logs SET message = REGEXP_REPLACE(message, '\s+', ' ', 'g');使用正则表达式替换多余空格为单个空格
数据类型转换ALTER TABLE employees ALTER COLUMN salary TYPE NUMERIC USING salary::numeric;显式转换字段类型(如VARCHARNUMERIC
去重(保留最新)DELETE FROM orders o1 WHERE EXISTS (SELECT 1 FROM orders o2 WHERE o1.id = o2.id AND o1.create_time < o2.create_time);删除重复数据,保留最新记录
二、数据聚合与分析模板
场景SQL脚本示例说明
分组统计SELECT department, COUNT(*) AS employee_count FROM employees GROUP BY department;按部门统计员工数量
滚动平均值SELECT order_time, AVG(amount) OVER (ORDER BY order_time ROWS BETWEEN 3 PRECEDING AND CURRENT ROW) AS rolling_avg FROM sales;计算近3条记录的滚动平均值
同比增长率WITH monthly_sales AS (SELECT DATE_TRUNC('month', order_time) AS month, SUM(amount) AS total FROM sales GROUP BY month) SELECT month, total, LAG(total) OVER (ORDER BY month) AS prev_total, (total - LAG(total) OVER (ORDER BY month)) / LAG(total) OVER (ORDER BY month) * 100 AS growth_rate FROM monthly_sales;计算月度销售额同比增长率
Top N分析SELECT product_id, SUM(quantity) AS total_sold FROM sales GROUP BY product_id ORDER BY total_sold DESC LIMIT 10;统计销量前10的产品
三、窗口函数应用模板
场景SQL脚本示例说明
行号分配SELECT order_id, ROW_NUMBER() OVER (ORDER BY order_time) AS row_num FROM orders;为结果集分配唯一行号
累计求和SELECT order_time, amount, SUM(amount) OVER (ORDER BY order_time) AS cumulative_sum FROM sales;计算累计销售额
排名分析SELECT product_id, RANK() OVER (ORDER BY total_sold DESC) AS rank FROM (SELECT product_id, SUM(quantity) AS total_sold FROM sales GROUP BY product_id) AS sub;按销量对产品进行排名
前后行对比SELECT order_time, amount, LAG(amount) OVER (ORDER BY order_time) AS prev_amount FROM sales;访问前一行的销售额
四、性能优化与监控模板
场景SQL脚本示例说明
查询执行计划EXPLAIN ANALYZE SELECT * FROM employees WHERE department = 'Engineering';分析查询执行计划,定位性能瓶颈
索引分析SELECT relname AS index_name, reltuples AS cardinality FROM pg_class WHERE relkind = 'i' AND relname NOT LIKE 'pg_%' ORDER BY reltuples DESC;查询索引基数,评估索引效率
慢查询监控SELECT query, total_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;查看耗时最长的10条查询(需启用pg_stat_statements扩展)
表空间管理CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data'; CREATE TABLE large_table (id INT) TABLESPACE fastspace;创建表空间并指定表存储位置

在这里插入图片描述
在这里插入图片描述

五、数据备份与恢复模板
场景SQL脚本示例说明
全量备份pg_dump -U postgres -Fc mydb > mydb_backup.backup使用pg_dump进行逻辑备份
增量备份pg_dump -U postgres -Fc --schema-only mydb > mydb_schema.backup仅备份表结构
恢复备份pg_restore -U postgres -d mydb mydb_backup.backup从备份文件恢复数据库
表级备份pg_dump -U postgres -t orders mydb > orders_backup.sql备份单个表
六、权限管理与安全模板
场景SQL脚本示例说明
创建用户CREATE ROLE analyst LOGIN PASSWORD 'secure_password';创建具有登录权限的用户
分配权限GRANT SELECT, INSERT ON employees TO analyst;授予用户表查询和插入权限
回收权限REVOKE SELECT ON employees FROM analyst;回收用户表查询权限
审计用户行为ALTER SYSTEM SET log_statement = 'all'; ALTER SYSTEM SET log_line_prefix = '%m [%p] user=%u database=%d ';配置日志记录用户操作(需重启数据库)
七、事务与错误处理模板
场景SQL脚本示例说明
事务提交与回滚BEGIN; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;原子性转账操作
错误自动回滚BEGIN; INSERT INTO employees (id, name) VALUES (1, 'Alice'); INSERT INTO employees (id, name) VALUES (1, 'Bob'); -- 主键冲突 COMMIT;若执行过程中出错,事务自动回滚
异常捕获DO $$ BEGIN INSERT INTO employees (id, name) VALUES (1, 'Alice'); EXCEPTION WHEN unique_violation THEN RAISE NOTICE 'Duplicate key error'; END $$;使用DO块捕获唯一约束冲突异常
八、时间序列分析模板
场景SQL脚本示例说明
时间窗口聚合SELECT DATE_TRUNC('hour', order_time) AS hour, SUM(amount) AS total_sales FROM sales WHERE order_time BETWEEN '2024-01-01' AND '2024-01-02' GROUP BY hour ORDER BY hour;按小时统计销售额
实时流量监控SELECT DATE_TRUNC('minute', order_time) AS minute, COUNT(*) AS order_count FROM sales WHERE order_time >= NOW() - INTERVAL '1 hour' GROUP BY minute ORDER BY minute;统计最近1小时每分钟的订单量
时间序列补全WITH RECURSIVE time_series AS (SELECT '2024-01-01'::DATE AS date UNION ALL SELECT date + INTERVAL '1 day' FROM time_series WHERE date < '2024-01-31') SELECT ts.date, COALESCE(s.total_sales, 0) AS total_sales FROM time_series ts LEFT JOIN (SELECT DATE_TRUNC('day', order_time) AS date, SUM(amount) AS total_sales FROM sales GROUP BY date) s ON ts.date = s.date ORDER BY ts.date;补全缺失日期的销售数据
九、日志分析与诊断模板
场景SQL脚本示例说明
慢查询日志过滤SELECT query, total_time FROM pg_stat_statements WHERE total_time > INTERVAL '1 second' ORDER BY total_time DESC;筛选执行时间超过1秒的查询
死锁检测SELECT * FROM pg_stat_activity WHERE query LIKE '%UPDATE%' AND state = 'idle in transaction';查看可能导致死锁的事务
日志文件分析pgbadger /var/log/postgresql/postgresql-16-main.log -o report.html使用pgBadger生成可视化日志报告
十、高级功能模板
场景SQL脚本示例说明
JSON数据处理SELECT id, data->>'name' AS name FROM json_table WHERE data->>'age' > '30';查询JSON字段中年龄大于30的记录
地理位置查询SELECT id, ST_Distance(geom, ST_GeomFromText('POINT(120.123 30.456)')) AS distance FROM locations ORDER BY distance LIMIT 10;查找距离指定点最近的10条记录(需启用postgis扩展)
全文搜索SELECT id, title FROM articles WHERE to_tsvector('english', content) @@ to_tsquery('data & analysis');搜索包含“data”和“analysis”的文章

附录使用说明

    1. 快速定位
    • 按场景分类查找模板,使用Ctrl+F搜索关键词(如“去重”“窗口函数”)。
    • 关键参数用{}标注,需根据实际环境替换(如{table_name})。
    1. 版本兼容性
    • 脚本适用于PostgreSQL 10+版本,部分功能(如pg_stat_statements)需手动安装扩展。
    • 表空间路径、日志文件位置等需根据实际部署调整。
    1. 安全建议
    • 生产环境执行脚本前,建议在测试环境验证。
    • 敏感操作(如DROP TABLE)需谨慎,优先使用事务控制。
    1. 扩展资源
    • 官方文档:PostgreSQL SQL Commands
    • 工具推荐:pgAdmin(图形化管理)、pgBadger(日志分析)、pgloader(数据迁移)

说明

  • 本附录包含PostgreSQL 16.2版本的主要脚本模板,实际应用中请结合具体环境验证。
  • 建议将本速查表作为日常开发和运维的参考工具,结合官方文档和日志分析工具进行综合应用。

相关文章:

  • 高压启动电路--学习记录
  • 蓝桥杯13届国B 完全日期
  • 正则表达式(二)-高级应用_谨慎使用
  • 《AI驱动的智能推荐系统:原理、应用与未来》
  • 微信小程序之将轮播图设计为组件
  • 鸿蒙NEXT开发动画案例8
  • wordcount程序
  • Git 用户名与邮箱配置全解析:精准配置——基于场景的参数选择
  • 第二章:磁盘管理与文件管理
  • 六西格玛觉醒:一场数据思维的启蒙运动​
  • 【RabbitMQ】发布确认机制的具体实现
  • MUSE Pi Pro 更换kernel内核及module模块
  • AI智能体的现状和应用前景
  • jQuery知识框架
  • 2020年下半年试题三:论云原生架构及其应用
  • IDEA 新建 SpringBoot 项目时,没有高版本 SpringBoot 可选
  • Kafka 消费者组进度监控方法解析
  • 【SSL证书系列】https双向认证中客户端认证的原理
  • LeetCode 每日一题 3341. 到达最后一个房间的最少时间 I + II
  • Vue ElementUI原生upload修改字体大小和区域宽度
  • 德国总理默茨发表首份政府声明:将提升国防能力,全力发展经济
  • 盖茨说对中国技术封锁起到反作用
  • 中方发布会:中美经贸高层会谈取得了实质性进展,达成了重要共识
  • 海航回应“男团粉丝为追星堵住机舱通道”:已紧急阻止
  • 名帅大挪移提前开启,意属皇马的阿隆索会是齐达内第二吗
  • 范志毅跨界归来做青训,探索中国足球人才培养新模式