I'm wang zhiwei 👋

Data Engineer, CLI User.

我是一名数据研发工程师,命令行爱好者,开源贡献者。我主要写 Python 和 SQL,也写过一点 Scala、Java,正在学习使用前端。

#Data Engineering#Data Architect#AWS#Databricks#Azure#Snowflake#DevOps

My chatter about life and the tech realm

  • Published on
    本文介绍了如何简单高效地将DynamoDB的数据同步到Redshift。通过全量扫描DynamoDB并使用COPY命令导入数据到临时表,随后利用MERGE和DELETE语句实现目标表的批量更新和删除,确保数据一致性。方案设计充分利用了Redshift的ETL能力,避免了引入其他AWS组件的额外费用,满足了低频率更新和小数据量的需求。
  • Published on
    在使用 rclone 进行文件同步时,遇到 "InvalidUTF8" 错误,主要是由于文件名在处理过程中被截断导致的。通过分析 rclone 的源码,发现旧版本 v1.64.2 中的文件名截断逻辑存在问题,建议升级到 v1.66.x 版本以解决此问题。新版本中增加了合法 UTF-8 字符串的检测算法,避免了此类错误的发生。
  • Published on
    使用 sqlite-utils 进行数据插入时, upsert 方法可能因未满足非空约束而失败。插入时只提供主键值导致违反 NOT NULL 约束,因而插入失败但未反馈错误。SQLite 3.24.0 及以上版本支持 upsert 语法,建议使用该语法以避免此类问题。sqlite-utils 的 upsert 实现不符合 SQLite 的新特性,需注意其命名和实现方式。
  • Published on
    本文讨论了如何将10TB数据从SQL Server迁移到Amazon Redshift的过程,包括RDS还原和Redshift数据迁移的方案演变。数据迁移涉及使用AWS服务如S3、Lambda、Glue和Step Function,确保数据从外部数据中心顺利迁移到AWS云,并实现定期同步。整个过程包括Schema转换、数据导出、压缩和上传,以及通过Step Function调度的完整数据管道。
  • Published on
    本文讨论了在AWS RDS SQLServer中进行数据库还原时遇到的故障及其排查过程。通过定期备份和使用T-SQL存储过程进行还原,作者记录了在执行还原任务时出现的异常,包括连接丢失和任务中断。最终发现,RDS实例的重启和EC2节点的更换是导致这些问题的根本原因。
  • Published on
    本文介绍了一种使用 SQLite 实现字符串 DSL 的方法,允许用户在字符串中动态渲染表达式,如获取当前日期和时间。通过定义 SQL 查询和解析表达式,用户可以方便地生成包含动态数据的字符串。示例代码展示了如何使用该方法来处理不同格式的字符串,并强调了这种方法相较于直接执行 Python 代码的安全性和友好性。
  • Published on
    本文记录了TiDB SQL的调优过程,主要针对两个表的查询性能进行了分析与优化。通过使用EXPLAIN和EXPLAIN ANALYZE,发现全索引扫描导致性能瓶颈,提出了使用索引和TiFlash的混合查询方案,显著提升了查询效率。最终的优化方案结合了TiFlash和TiKV的查询方式,以提高数据检索的性能。
  • Published on
    本文记录了在使用Flink与TiDB进行实时ETL时遇到的异常和数据格式差异。主要讨论了Maxwell JSON消息的解析错误,特别是在DELETE消息中TiCDC与Maxwell官方数据格式的不同,指出TiCDC使用 old 字段而Maxwell使用 data 字段。提供了相关源码链接和解决方案的参考。
  • Published on
    本文记录了MySQL左外连接查询的优化过程,分析了企业信息表和风险预警信息表的结构及数据量,展示了初始查询的SQL语句及其耗时,并指出了查询逻辑的错误。通过调整查询方式和添加索引,优化后的查询耗时显著降低。最终,探讨了不同连接方式对查询性能的影响,并提供了相关的MySQL文档链接作为参考。
  • Published on
    在计算 SQL 的 percent_rank() 和 rank() 函数时,若 order by 顺序不一致,会导致结果不匹配。通过两个案例分析,发现当按升序和降序计算时, percent_rank 的结果会出现差异,正确的做法是保持两个函数按相同顺序计算。 rank 函数在存在并列名次时会产生排名间隙,这也是导致结果不一致的原因。
  • Published on
    本文讨论了在BI工具中实现跨数据源JOIN的设计,介绍了FineBI和Redash的实现方式。FineBI通过自助数据集支持多源JOIN,而Redash则利用查询结果数据源(QRDS)实现惰性查询和临时表的使用。文中还提供了部分源码示例,展示了如何从查询语句创建SQLite临时表并执行JOIN查询。
  • Published on
    本文介绍了 BoostPost 库的设计与实现,旨在优化数据处理工作中的更新请求构建。通过示例展示了如何处理新旧数据的插入、更新和删除,强调了数据类的概念及其在 Python 中的应用。文章还探讨了逻辑删除和更新优先级等特殊场景,提供了扩展接口的实现思路,并总结了项目代码质量提升的重要性。