AWS 中的数据目录编制
Source: Dev.to
引言
在现代数据工程中,最常被忽视却极具威力的能力之一是数据目录化。若无法清晰了解已有的数据、它们所在的位置、模式以及随时间的变化,任何 ETL 架构都难以扩展。本指南将演示如何使用 AWS Glue Crawlers 对数据进行目录化,以及在处理存储于 Amazon S3 的原始和清洗后数据集时,如何构建元数据层。
本教程使用 S3 原始桶中的一个简单 CSV 文件,展示 AWS Glue 如何自动发现其结构并构建可搜索、可查询的数据目录。所有步骤均可通过 AWS 控制台复现。
什么是数据目录化?
数据目录化是为所有数据资产创建结构化清单的过程。
一个好的数据目录应包含:
- 数据集名称
- 模式(列、数据类型、分区)
- 位置(例如 S3 路径)
- 元数据(大小、所有者、最近更新)
- 标签、分类、血缘
它相当于数据生态系统的“索引”——就像图书馆目录帮助读者快速找到书籍一样。
为什么它重要
- 让跨团队的数据可被发现
- 减少手动文档工作
- 确保管道之间的模式一致性
- 支持数据校验和质量检查
- 推动自助式分析
- 支持治理和合规
数据目录化在 ETL 流水线中的作用
ETL 流水线高度依赖元数据。在转换任何数据集之前,流水线必须了解:
- 存在的列有哪些
- 需要强制的 数据类型
- 使用的分区
- 已发生的模式演进
- 原始 → 清洗 → 精选层的映射方式
强大的数据目录能够确保:
- ETL 作业可靠运行
- Glue/Spark 脚本不会因模式漂移而中断
- 下游 BI 工具(Athena、QuickSight、Superset、Power BI)能够即时读取数据
- 数据血缘和文档保持最新
AWS Glue Data Catalog 充当所有结构化和半结构化数据的中心元数据存储。
架构概览
下面是工作流的高级示意图:
项目演练展示了 Glue Crawlers 如何:
- 扫描 S3 桶
- 检测模式(标题、类型、格式)
- 生成元数据
- 将元数据以表的形式存入 Data Catalog
生成的元数据可通过 Amazon Athena 查询,供 Glue ETL 作业使用,也可被分析工具消费。
了解 Amazon S3、AWS Glue Crawler 与 Glue Data Catalog
Amazon S3(Simple Storage Service)
Amazon S3 是一种全托管的对象存储服务,可让您以规模化方式存储任何类型的数据——CSV 文件、日志、JSON、Parquet、图片等。它具备高耐久、成本效益高,并能与 AWS 分析服务无缝集成。在大多数现代数据工程架构(包括 Medallion 架构)中,S3 充当 落地层、原始层和处理层。
AWS Glue Crawler
AWS Glue Crawler 是一种自动化元数据发现工具,可扫描存储在 Amazon S3(以及其他来源)中的数据。当爬虫运行时,它:
- 读取文件结构和内容
- 检测数据格式(CSV、JSON、Parquet 等)
- 推断列名和数据类型
- 识别分区
- 使用内置或自定义分类器对数据集进行分类
随后爬虫会自动创建或更新表的元数据,无需手动定义模式。
AWS Glue Data Catalog
Glue Data Catalog 是 AWS 内部的集中式元数据仓库,存储:
- 表定义
- 模式信息
- 分区详情
- 供分析服务使用的其他元数据
当 Glue Crawler 完成对 S3 桶的扫描后,它会将发现的模式和表信息写入 Glue Data Catalog。该元数据可被 Athena、EMR、Redshift Spectrum 和 AWS Glue ETL 作业等服务查询。
工作流概述:
S3 → Glue Crawler 扫描文件 → 推断模式 → 元数据存入 Glue Data Catalog → 数据可查询。
步骤详解
1. 将 CSV 文件上传至 Amazon S3
创建一个 S3 桶(将名称替换为您自己的):
aws s3api create-bucket --bucket medallion-orders-2025-12-17 --region us-east-1
上传示例 CSV 文件:
aws s3 cp orders.csv s3://medallion-orders-2025-12-17/
可选地将文件放在一个文件夹(前缀)中,以表示原始层:
aws s3 cp orders.csv s3://medallion-orders-2025-12-17/raw/orders.csv

2. 创建 Glue 数据库
- 在 Glue 控制台,进入 Data Catalog → Databases。
- 点击 Add database。
- 为数据库命名为
orders_db,然后点击 Create database。

3. 创建 AWS Glue Crawler
- 前往 Glue → Crawlers,点击 Create crawler。
- 输入名称(例如
orders_crawler),点击 Next。 - 点击 Add a data source,选择 S3,并指向包含 CSV 文件的桶/前缀。
- 选择之前创建的数据库
orders_db。 - 配置调度(或选择按需运行),完成向导。

4. 运行爬虫并验证表
创建爬虫后,选中它并选择 Run crawler。完成后,前往 Data Catalog → Tables,在 orders_db 数据库中查看。您应能看到一个新表(如 orders),其中包含推断出的列、数据类型和分区信息。
5. 使用 Athena 查询已目录化的数据
- 打开 Athena 控制台。
- 将查询结果位置设置为一个 S3 桶(例如
s3://my-athena-results/)。 - 运行简单查询:
SELECT * FROM orders_db.orders LIMIT 10;
如果爬虫成功,Athena 将返回 orders.csv 中的记录。
后续步骤
- 添加分区(例如按日期),并重新运行爬虫以保持目录最新。
- 与 Glue ETL 作业集成,将原始数据转换为清洗后/精选表。
- 设置 Lake Formation 或 IAM 策略,实现细粒度访问控制。
- 启用模式版本管理,跟踪随时间的演进。
通过在早期建立可靠的数据目录,您为在 AWS 上构建可扩展、可维护且受治理的数据管道奠定了坚实基础。
