亚马逊AWS官方博客

一分钟从零构建数据湖,S3 Tables 究竟有啥魔力?

HAQM S3 Tables 产品介绍

在当今的商业环境中,人工智能(AI)和数据应用的普及正驱动企业加速创新和提高效率。企业广泛采用 AI 技术来优化运营、提升客户体验,并在竞争激烈的市场中保持领先地位。例如,酒店业利用生成式 AI 自动化客户服务,显著减少等待时间和运营成本。 金融机构则通过 AI 提升生产力,旨在将这些技术转化为盈利。 此外,AI 在研发领域的应用也在重塑产品开发流程,促进更快的创新和市场响应。然而,企业在部署 AI 时需谨慎考虑数据安全、监管合规和技术成熟度等因素,以确保负责任且有效地应用这些技术。HAQM S3 于 2006 年推出,提供了可扩展、可靠且低延迟的数据存储服务。2024 年,亚马逊云科技发布了 S3 Tables,内置对 Apache Iceberg 的支持,旨在优化大规模表格数据的存储和查询性能。S3 Tables 通过自动化的表维护和与亚马逊云科技的分析服务的无缝集成,帮助企业更快速地构建数据湖,简化权限管理,并提升查询性能和事务处理能力,满足现代数据驱动型业务的需求。本文将探讨 S3 Tables 技术的应用场景及其对业务的收益及最佳实践,提供生产中可参考的价值。

应用场景

1. 快速构建数据湖

在传统数据库应用场景中,例如使用 MySQL 关系型数据库,当表的数据量变得极为庞大时,常常会面临查询性能急剧下降的问题。例如在电商领域,每日的交易记录、用户行为数据等随着业务扩展不断累积,表中的数据量达到数千万甚至数十亿条记录。除了查询性能下降,超大表的存在还使得索引更新需消耗额外的计算资源,增加了系统的运算负担,还在存储层面带来额外的运维开销。

在面对传统数据库超大表查询困难的问题上,大数据技术及相关工具正逐渐成为企业突破瓶颈、实现数据价值最大化的有力武器。其中,HAQM S3 Tables 支持企业从海量数据(如日志、事务数据、IoT 数据)中快速构建数据湖,并支持高效查询与分析的需求,可以帮助快速、低成本帮助企业构建大数据分析服务,并解决数据库超大表查询问题。

2. Hive 传统数仓的替换

对于已经使用大数据技术栈,采用传统 Hive 构建数据仓库的企业,随着数据量的不断增长和业务需求的日益复杂,仍然面临几点挑战。

  • 数据更新&删除操作困难:增量数据更新、数据临时修复/删除是常见的业务场景,然而 Hive 表对数据的更新、删除支持有限,在实际业务中修正错误数据或删除过期数据,但在 Hive 中执行这些操作需要对整表进行重写。
  • 查询效率低:业务对于数据查询速度提出了更高的要求,尤其涉及超大表的 OLAP 查询。
  • 存储&运维成本高:基于块存储的 HDFS 需要不断进行扩展

HAQM S3 Tables 作为完全托管的 Iceberg 开发表格式,有效应对以上传统数仓痛点问题。

  • 支持丰富的 SQL 表达:传统 Hive 表需要通过 INSERT OVERWRITE 重写整表来达到数据更新、删除的目的。S3 Tables 支持对数据的细粒度更新/删除操作,支持 UPDATEDELETEMERGE INTO 等 SQL 表达,无需像 Hive 那样重写整个表。S3 Tables 通过维护数据文件的元数据,记录数据的更改历史,能够精确地定位、修改需要更新的部分或删除表中的特定行。
  • 查询性能优化:S3 Tables 支持先进的文件格式(Parquet 或 ORC),并结合了数据分区和索引技术,可以根据查询条件快速过滤掉不需要的数据文件和数据块,减少数据的读取量。在进行大规模的 OLAP 查询时,S3 Tables 能够利用分区和索引信息,只读取与查询相关的部分数据,从而缩短查询时间。此外,HAQM Athena 与 S3 Tables 无缝集成,作为无服务器交互式查询服务,能利用 S3 Tables 的数据组织和索引结构,以分布式并行处理查询任务,提升数据分析效率与响应速度。

以下是对比 S3 Tables 使用 Athena 查询与 Hive on HAQM EMR 用 Spark 查询在超大表复杂查询的实验对比结果。从基于 Cloud-DWB-Derived-from-TPCH  3TB 数据集的 6 个复杂 SQL 观测到,查询扫描的数据体积从 4GB~286GB,Q1、Q2、Q4、Q6 查询中 S3 Tables + Athena 查询性能优于 Hive + Spark 查询,最大节省时长超 52%。

其中,Hive Cluster 2 配置如下:

Hive on EMR 类型 数量
主实例节点 m5.4xlarge (16vCPU+64GB) 1
核心节点 i3.4xlarge (16vCPU+122GB) 4
任务节点 i3.4xlarge (16vCPU+122GB) 4
  • 存储和运维成本:S3 Tables 采用了全新的表格式桶,利用了对象存储的低成本和高可扩展性优势。与 Hive 基于块存储的 HDFS 相比,S3 等对象存储成本相对较低,并且可以根据数据量的增长灵活扩展,无需担心存储节点的容量限制。在运维管理方面,S3 Tables 作为全托管服务,不需要像 Hive 那样维护复杂的 HDFS 集群和相关的管理组件。它与 S3 集成紧密,借助云服务的管理功能,减少了运维的工作量和复杂性。

3. 从开源 Apache Iceberg 切换

Apache Iceberg 是一个流行的高性能数据湖表格式,满足用户在大数据场景下对可靠性和 SQL 表简洁性的需求。Iceberg 的开源社区非常活跃,截止 2025 年 3 月,Iceber 项目有超过 7.1k 的 starred ,Fork 超过 2.4 k 。社区主要有来自中国、美国、印度及其它国家地区贡献者,目前有 300+ 开放的问题及 130+ 的提交请求。

企业在使用开源软件构建业务时,往往会遇到学习成本高、质量参差不齐、维护和支持不足以及一些安全隐患。HAQM S3 Tables 相比用户直接使用 Apache Iceberg,帮助客户解决了以下三个主要问题:

  • 自动运行维护:S3 Tables 自动执行关键的表维护任务,如压缩、快照管理和未引用文件删除。这些操作在后台持续进行,优化查询性能并降低存储成本,减轻了用户的运维负担。
  • 增强的性能:通过持续的表优化,查询性能有明显提升;与存储在通用 S3 存储桶中的 Iceberg 表相比,每秒事务处理量可提升高达 10 倍。与未经过 compaction 处理的数据表相比,S3 Tables 自动优化后,性能可提升 2~3 倍。可以参考博客
  • 无缝集成与兼容性与安全性:S3 Tables 支持 Apache Iceberg 标准,能够与常用的亚马逊云科技服务(如 HAQM Athena、Redshift、EMR)以及第三方查询引擎(包括 Apache Spark)无缝集成,简化了数据分析流程。您可以参考本文第一章节,在亚马逊云科技上快速构建数据湖业务。

4. 作为 AI/ML 统一数据基座

AI/ML 科学家 ML 算法。使用 PyIceberg,您可以在 Python 环境中直接管理和操作 Iceberg 表,无需依赖 JVM。这使得数据科学家和工程师能够更方便地在熟悉的 Python 生态系统中处理大规模数据。PyIceberg 可以直接集成 S3 Tables,详细说明可以查看博客。在机器学习训练过程中,PyIceberg 可以与 Pandas、PyArrow、Ray 等数据处理库结合使用。例如,您可以将 Iceberg 表的数据加载为 Pandas DataFrame,随后进行数据预处理、特征工程等操作。此外,PyIceberg 还支持与 PyTorch 或 TensorFlow 等深度学习框架集成,方便地将 Iceberg 表的数据转换为这些框架所需的数据集格式。

以下是一个简单的示例,展示如何使用 PyIceberg 连接到 Iceberg 目录并读取数据:

#!/usr/bin/env python3
from pyiceberg.catalog import load_catalog
import os
import pyarrow as pa
import pandas as pd
from pyiceberg.expressions import EqualTo
import boto3
import json
import argparse
from botocore.exceptions import ProfileNotFound
from datetime import datetime
from tabulate import tabulate

# Constants
REGION = 'us-east-2'
CATALOG = 's3tablescatalog'
DATABASE = 'myblognamespace'
TABLE_BUCKET = 'pyiceberg-blog-bucket'
# 加载 Iceberg 目录
catalog = load_catalog(
    $CATALOG,
    **{
        "type": "rest",
        "warehouse": f"{account_id}:s3tablescatalog/$TABLE_BUCKET",
        "uri": f"http://glue.{region}.amazonaws.com/iceberg",
        "rest.sigv4-enabled": "true",
        "rest.signing-name": "glue",
        "rest.signing-region": region
    }
)

# 获取指定表
table = catalog.load_table("example_table")

# 执行扫描并将结果转换为 Pandas DataFrame
scan = table.scan()
batches = scan.to_arrow()
df = batches.to_pandas()

# 显示数据
print(df.head())

生产建议

  1. 数据接入 (全量/增量):对于业务数据全量/增量接入的场景,使用 HAQM Glue ETL 通常是推荐的选择。如果对于数据查询实时性有一定要求,可以通过 HAQM Data Firehose 与 S3 Tables 集成的能力来设计链路,参考文档
  2. 查询效率优化: 1. 通过分区设计,利用 S3 Tables 查询时分区裁剪的特性,减少扫描量来加速查询/降低查询成本。例如提前根据业务表的预期增长进行设计,例如对时序数据根据时间设计分区等。2. 通过开启 S3 Tables 托管的 Compression 功能,对小文件进行自动合并,提升查询性能。
  3. 定期备份:制定定期备份计划,将 S3 Tables 中的数据备份到一个 S3 通用存储桶中,并通过生命周期管理对冷数据进行归档。

本篇作者

邬慧霖

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的解决方案咨询和架构设计,在离线和实时数仓、数据湖生态具备丰富研发与架构经验。

张鑫

亚马逊云科技解决方案架构师,负责基于亚马逊云科技的解决方案咨询和架构设计,在软件系统架构、数仓和实时及离线计算领域有丰富的研发和架构经验。致力于结合数据开源软件与亚马逊云科技云原生服务组件构建高可用数据架构的实践探索。