如何使用Boto3遍历 AWS Glue 中存在的 S3 Bucket 对象版本
AWS Glue 是一种完全托管的 ETL (extract,transform,load)服务,可以让用户在几分钟内轻松地转换和在多个数据源之间移动数据。AWS Glue 还支持通过将数据目录抽象为一个 PySpark 数据帧来使用分析和机器学习(ML)服务。使用 AWS Glue,您可以连接到各种数据存储(移动数据)源,包括 Amazon S3、Redshift、Oracle 和 SQL Server 等,并将它们转换为分析友好的数据存储库(转换数据)。
在 AWS Glue 中,S3 是一个非常重要的数据源,S3 中的所有数据都被存储为对象。每个对象都有元数据,包括对象的大小、创建时间、最后修改时间以及标记为可选对象版本的信息。这个元数据可以通过 AWS Glue 或 Boto3 这样的 AWS SDK 来访问。
本文将介绍如何使用 Boto3 遍历 AWS Glue 中存在的 S3 Bucket 对象版本,下面我们将逐步进行以下操作:
- 确认 AWS CLI 凭证可用。
- 列出您的 S3 存储桶。
- 查看存储桶的对象版本详细信息。
- 通过 Boto3 遍历存储桶中的对象版本。
阅读更多:Python 教程
确认 AWS CLI 凭证可用
在开始之前,请确保您已经安装并配置 AWS CLI。您可以使用以下命令来检查 AWS CLI 的凭证:
aws sts get-caller-identity
该命令将返回您当前的 IAM 用户 ARN 和帐户 ID。如果您无法验证 AWS CLI,请参阅AWS 文档,以设置和验证 AWS CLI。
此外,您还应该配置 Boto3,这是使用 Python 与 AWS 交互的 SDK。
import logging
import boto3
# Set up logging
logging.basicConfig(level=logging.DEBUG)
LOGGER = logging.getLogger(__name__)
# Create an S3 Client
s3 = boto3.client("s3")
列出您的 S3 存储桶
执行以下命令来列出您的 S3 存储桶:
response = s3.list_buckets()
buckets = [bucket["Name"] for bucket in response["Buckets"]]
LOGGER.debug("Bucket List: %s", buckets)
响应将为所有存储桶的信息,但在此处,我们只需要存储桶名称。
查看存储桶的对象版本详细信息
现在,我们已经列出了您的存储桶,请使用以下代码查看某个存储桶的对象版本详细信息:
current_bucket = "my-bucket"
# List Object Versions
versions = s3.list_object_versions(
Bucket=current_bucket,
)
LOGGER.debug("Object Versions: %s", versions)
所有版本的对象元数据都将返回到控制台。
通过 Boto3 遍历存储桶中的对象版本
考虑到可能有许多文件在存储桶中,您可能需要筛选或定位特定类型或类别的对象。例如,如果您想查看所有名称以*.pdf 结尾的对象,您可以使用以下代码:
def get_objects():
"""
This function returns a list of objects in the specific bucket
"""
current_bucket = "my-bucket"
result = []
paginator = s3.get_paginator("list_object_versions")
pages = paginator.paginate(Bucket=current_bucket)
for page in pages:
LOGGER.debug("Object Versions: %s", page)
versions = page.get("Versions")
for version in versions:
if ".pdf" in version.get("Key"):
LOGGER.debug("PDF Objects: %s", version)
result.append(version)
return result
该函数将遍历存储桶中所有对象,并选择文件名以 “*.pdf” 结尾的所有对象。这些对象将被存储到一个列表中,并可以按照需要进一步使用。
结论
通过本文介绍的方法,您可以使用 Boto3 轻松地遍历 AWS Glue 中存在的 S3 Bucket 对象版本。为了更好地组织您的数据,您可以选择根据对象属性来筛选或筛选特定类型的对象。这对于处理大量数据或由用户上传的数据非常有用。