写点什么

Snowflake 中的数据概况:在清理之前发现数据中的混乱 | 技术实践

  • 2025-09-16
    北京
  • 本文字数:1833 字

    阅读完需:约 6 分钟

大小:785.68K时长:04:28
Snowflake 中的数据概况:在清理之前发现数据中的混乱 | 技术实践

我围绕一个模拟的加密货币数据集构建了我的第一个 dbt 项目,而且故意让它变得混乱。为什么?因为分析工程并不是关于完美的数据,而是将不可靠的输入转化为值得信赖的内容。


我没有清理随机的公共数据,而是设计了这个数据集,使其反映出与工作相关的挑战,比如重复数据、不一致的标记和冲突的类别——这些都是分析工程师每天需要解决的问题。


然后,我使用 Snowflake 对原始数据进行概况分析,利用 dbt 进行建模、标准化和测试——构建了一个看起来和实际生产环境中分析工程师所面临的情况相似的数据管道。

为什么数据概况很重要


混乱的数据不仅仅是带来小小的烦恼,它还会:


  • 当值无法转换为正确类型时,导致查询失败。

  • 当类别没有标准化时,造成冲突的度量。

  • 当重复数据或空值出现在报告中时,破坏信任。


尽管我的数据集是模拟的,但我遇到了分析工程师在生产环境中常常面临的同样问题。

这是我在原始交易表中发现的内容:


  • 重复数据 → 大约有 50 个 TRANSACTION_ID 出现了多次,有时仅在大小写上有所不同(t0001118 vs T0001118)。

  • 空值 → USD_FX_RATE 有 2,541 个空值;其他关键列如 USER_ID 和 PRODUCT_ID 则没有。

  • 类别不一致 →

  • 数据类型错误 → 所有列在摄取时都变成了 VARCHAR(16777216)。

  • 缺乏约束 → 数据仓库层面没有强制执行唯一性或外键约束。


换句话说:这就是一个完美的练习场,帮助我解决真实的数据质量问题。

我如何在 Snowflake 中对数据进行概况分析


我编写了一个 SQL 脚本(tx_profiling.sql),在 Snowflake 中运行系统性的检查。


模式和数据类型


desc table FINANCING_PRODUCTS.PUBLIC.raw_transactions; 
复制代码


✔ 确认所有列都是 VARCHAR(16777216) ✔ 验证没有键或约束

重复数据和唯一性检查

 

select transaction_id, count(*) from FINANCING_PRODUCTS.PUBLIC.raw_transactionsgroup by transaction_idhaving count(*) > 1; 
复制代码


✔ 发现大约 50 个重复的 transaction_id

空值分析


select  sum(case when usd_fx_rate is null then 1 else 0 end) as null_fx_rate,  sum(case when asset_amount is null then 1 else 0 end) as null_asset_amountfrom FINANCING_PRODUCTS.PUBLIC.raw_transactions; 
复制代码


✔ USD_FX_RATE 中有 2541 个空值 ✔ 关键字段中没有空值

值范围

 

select  min(asset_amount), max(asset_amount),  min(usd_fx_rate), max(usd_fx_rate)from FINANCING_PRODUCTS.PUBLIC.raw_transactions; 
复制代码


✔ 发现 NaN 和负资产金额 ✔ 外汇汇率从 0.8001 到 1.4998,符合实际,但不完整

域名检查

 

select distinct transaction_action from FINANCING_PRODUCTS.PUBLIC.raw_transactions; 
复制代码


✔ 13 个不一致的 transaction_action 值

我对 Snowflake 的一些发现


由于我的数据集规模较小且是模拟数据,数据概况查询运行顺利。这是一个优势——它让我能集中精力在工作流上,而不是等待查询完成。


即使在这个规模下,我也能练习真实团队在处理数 TB 数据时使用的相同步骤:


  • 使用 DESCRIBE 检查模式和数据类型。

  • 使用 TRY_TO_NUMBER 和 TRY_TO_TIMESTAMP_NTZ 安全地进行类型转换。

  • 使用 ROW_NUMBER() OVER (PARTITION BY …) 进行去重。

  • 让 dbt 将暂存模型作为 Snowflake 中的视图进行物化。


教训是什么?工作流是可以扩展的。那些在我模拟数据上有效的 SQL 模式,正是公司在生产环境中依赖的方式——Snowflake 只是处理了数据量的问题。

从数据概况到建模


数据概况不仅仅是打勾那么简单,它为我在 dbt 中的暂存模型提供了蓝图:

  • 将 ASSET_AMOUNT 和 USD_FX_RATE 转换为数字类型。

  • 将 EVENT_TIME 和 INGESTION_TS 转换为时间戳类型。

  • 在 TRANSACTION_ID 上进行去重,保留最新的一行数据。

  • 使用种子映射(如 asset_symbol_map、risk_flag_map、transaction_action_map)对分类字段进行标准化。

  • 使用 dbt 测试强制执行相同的规则(唯一性、非空、接受的值)。

  • 简而言之:数据概况转化为转换逻辑,而转换逻辑转化为测试。

心得体会


这个项目让我学到:数据概况是分析工程的起点。


为我提供了一个平滑的环境,可以检查和查询原始数据。dbt 给了我建模、测试和文档化修复的框架。它们结合在一起,形成了一个管道,将不可靠的模拟加密货币数据转化为值得信赖的数据。


数据可能很小,但工作流是分析工程师在大规模应用中使用的相同流程:从数据概况开始,带着明确目标进行建模,并通过测试强制执行数据质量。


原文地址:https://www.linkedin.com/pulse/data-profiling-snowflake-finding-mess-before-you-clean-wilkinson-7xwee/?trackingId=1jZAlK6wRHmbhkyKXqfrmg%3D%3D


2025-09-16 17:574245

评论

发布
暂无评论

软件测试|一文教你flask路由配置

霍格沃兹测试开发学社

软件测试|Python绘图神器——Matplotlib使用教程(一)

霍格沃兹测试开发学社

一文快速了解微服务架构

穿过生命散发芬芳

微服务 6 月 优质更文活动

推动高校教改:如何面向人文社科教授数据分析

ModelWhale

数据分析 学科交叉 人文社科 教学经验 高等教育

软件测试|码农必会的git操作(一)

霍格沃兹测试开发学社

什么是无服务器架构技术?

天翼云开发者社区

服务器 架构设计

头部大模型公司进京赶考,向量数据库成为应考神器

Zilliz

Milvus Zilliz AIGC 向量数据库 zillizcloud

虚拟机安装Ubuntu16并安装Ros(Kinetic)

Studying_swz

6 月 优质更文活动

潮流地标美罗城焕新活力,智图赋能传统商业经典延续|MobTech观察

MobTech袤博科技

镭速用心打造,新版本发布,为用户实现更多可能

镭速

AIGC时代,基于云原生 MLOps 构建属于你的大模型(上)

York

云原生 大模型 MLOps AIGC ChatGPT

关于GDPR体系文件介绍,介绍GDPR体系文件的内容和意义

镭速

STM32读取BH1750光照强度数据打印到串口

DS小龙哥

6 月 优质更文活动

帮您了解CDN节点如何做到访问加速与安全防护

天翼云开发者社区

云计算 CDN 内容分发网络

软件测试|教你轻松解决pip安装下载超时问题

霍格沃兹测试开发学社

Nop平台为什么是一个独一无二的开源软件开发平台

canonical

开源 低代码 开发平台

软件测试|Python操作Excel制作报表,不要太方便

霍格沃兹测试开发学社

软件测试|pyecharts绘制NBA球星得分能力对比图

霍格沃兹测试开发学社

2023-06-09:什么是Redis事务?原理是什么?

福大大架构师每日一题

redis 福大大

请解释如何实现算法 PERMUTE-BY-SORTING,以处理两个或更多优先级相同的情形。也就是说,即使有两个或更多优先级相同,你的算法也应该产生一个均匀随机排列。

福大大架构师每日一题

福大大 ChatGPT

索信达携手华为联合发布智能营销标签平台解决方案

索信达控股

解密云商降本之谜:揭开AWS账单的真相,实现Finops的关键数据

jinjin

AWS 降本增效 spotmax FinOps 节约成本

软件测试|必须遵循的UI自动化设计军规

霍格沃兹测试开发学社

软件测试|一文带你了解Flask框架

霍格沃兹测试开发学社

2024深圳电子展

AIOTE智博会

电子展

基于 AIGC,RocketMQ 学习社区探索开源软件学习新范式

阿里巴巴云原生

阿里云 RocketMQ 云原生 AIGC

边缘计算简介

天翼云开发者社区

云计算 边缘计算

C语言编程—强制类型转换

芯动大师

C语言 强制类型转换 6 月 优质更文活动

Snowflake 中的数据概况:在清理之前发现数据中的混乱 | 技术实践_DataOps_River W._InfoQ精选文章