创建目录数据库
您已创建用作数据湖存储后端的 S3 存储桶,并且已将数据添加到该存储桶。但是,在对数据进行_编目_之前,此数据在 Lake Formation 中尚不可用。
Lake Formation 在数据湖中保存与 Hive 兼容的数据目录。您必须先创建数据库,然后才能在 S3 存储后端中对数据进行编目或使用 Lake Formation 数据导入程序(稍后讨论)将数据推送到 S3。
Lake Formation 数据库采用逻辑结构,您稍后可以向其添加表。每个表都包含向 S3 中的一个或多个对象的映射,它们共同表示该表。表还包含基本元数据,包括但不限于文件格式、S3 位置、列标题和列类型。Lake Formation 用户还可以选择为表和列定义任意键值对,以更好地描述数据并用作数据发现的可查询属性。
您可以在控制台中手动创建一个或多个数据库,并使用 AWS SDK 或 AWS CLI 以编程方式填充其中的表,也可以通过定义 AWS Glue 爬网程序自动创建它们。
对于本博文,您必须定义以下三个逻辑数据库:
o amazon-reviews-prod
o amazon-reviews-test
o ny-taxi
然后,使用编目流程映射到您先前上传到 S3 存储后端的两个数据集。请记住,您有意创建了两个 Amazon 评论数据集副本,用来模拟数据湖中的生产数据库和测试数据库。
现在,请创建您的数据库。首先,在 Lake Formation 中将 IAM 用户和角色配置为管理员。
目录权限是指所选 IAM 主体可以直接使用的权限。可授予权限是指 IAM 主体稍后可以为其他 IAM 主体授予的权限。
例如,您可能希望通过授予目录权限,使数据库管理员 (DBA) 能够创建数据库。但是,通过禁用可授予权限,可以防止 DBA 意外地将此访问权限授予给开发人员。
现在,您已经授予了必要的权限,可以继续在目录中创建数据库。
对于名称,请输入
amazon-reviews-prod
。对于位置,请输入
s3://<YOUR_BUCKET>/amazon-reviews-prod
。对于描述,请输入有意义的简短描述。
对于此数据库中的新表,请选中默认的仅允许基于 IAM 的权限控制。在生产中,请评估这样做是否满足权限控制要求。
对其他两个数据库重复此过程:
名称:
amazon-reviews-test
位置:
s3://<YOUR_BUCKET>/amazon-reviews-test
名称:
ny-taxi
位置:
s3://<YOUR_BUCKET>/ny-taxi
完成这些步骤之后,您的目录中应该有三个数据库:amazon-reviews-prod
、amazon-reviews-test
和 ny-taxi
。
将表从 S3 添加到目录数据库
在上一节中,您在 Lake Formation 目录中创建了三个数据库。但是,这些目录数据库为空,尚未提供 S3 中的特定表、架构、文件格式或对象路径的相关信息。要添加此信息,请使用以下两种方法之一:
使用控制台、SDK 或 AWS CLI 在目录中手动定义表。
使用 AWS Glue 爬网程序搜索 S3 并将发现的表自动添加到目录中。
对于本博文,为 S3 中的三个数据集和 Lake Formation 数据目录中的数据库分别创建并手动运行一个 AWS Glue 爬网程序。详细演练不在本文讨论范围内。有关指导,请参阅在 AWS Glue 控制台上使用爬网程序。
继续操作时,请牢记以下几点:
为三个数据集分别创建一个爬网程序。您应该能够接受大多数默认的爬网程序设置。但是,爬网程序的 S3 路径应该为:
o s3://_YOUR_BUCKET_/amazon-reviews-prod/amazon-reviews
o s3://_YOUR_BUCKET_/amazon-reviews-test/amazon-reviews
o s3://_YOUR_BUCKET_/ny-taxi/trip-data
在运行爬网程序以填充目录之前,必须为它们分配 IAM 角色。该角色授予他们从数据湖的 S3 存储桶中读取数据、将爬网程序日志写入 Amazon CloudWatch 以及更新数据目录的权限。无论是创建新角色还是使用现有角色,都请记下 IAM 角色名称。您需要此信息来执行下一步操作。
除了在 IAM 中定义的权限外,您还必须明确授予 IAM 主体(角色或用户)从 Lake Formation 内部修改数据目录的能力。从概念上讲,这类似于与 IAM 一起使用的 S3 中的存储桶策略概念。在 Lake Formation 控制台的权限下,选择数据权限。
授予 AWS Glue 爬网程序修改数据目录的能力。配置以下字段:
对于 IAM 用户和角色,请选择 AWS Glue 爬网程序之前使用的 IAM 角色。
对于数据库,请选择 amazon-reviews-prod、amazon-reviews-test 和 ny-taxi 数据库。
对于数据库权限,请选择所有权限。
让所有可授予权限保持未选中状态。
当 AWS Glue 爬网程序获得修改 Lake Formation 数据目录的权限后,返回 AWS Glue 控制台并手动运行三个爬网程序。几分钟后,这些爬网程序应该已完成运行。每个爬网程序都应该会向数据目录添加一个表:
o amazon-reviews
o amazon-reviews
o trip-data
验证您的目录是否已更新。在 Lake Formation 控制台的数据目录下,选择表,然后查看添加到相应的数据湖数据库中的三个新表,如以下屏幕截图所示。
在目录中编辑和添加元数据
AWS Glue 爬网程序会填充有关在 S3 中发现的表的标准元数据,包括(但不限于)属性,例如对象位置、文件格式、列标题和列类型。
但是,您可以手动编辑标准元数据或将其他自定义元数据添加到目录中,以使其更易于搜索并提高其提供的整体价值。在下一节中,我将逐步介绍编辑和添加元数据的几个示例。
编辑标准元数据
AWS Glue 爬网程序可从 CSV 文件的第一行推断出列名称。要查看 ny_taxi 表中自动填充的列名称,请查看表属性:
在数据目录下,选择表。
选择 ny_taxi,然后向下滚动到架构部分。
选择编辑架构。数据列名称必须始终使用蛇形命名法,这意味着需要在单词之间使用“_”字符。更改所有 id 列以匹配其余列。如果查看原始数据的第一行,则会发现使用了不一致的命名。您可以手动更改元数据,而不是更改这些文件。
选择
vendorid
行,然后选择编辑。做出更改以包含蛇形命名法,然后选择保存。为
dolocationid
、ratecodeid
和pulocationid
重复以下步骤。做出更改后,选择另存为新版本。在数据目录下,选择表。如果搜索
pulocationid
,则不会返回任何结果。搜索新的列名称
pu_location_id
。该搜索应该会返回预期结果,即 ny-taxi 数据库中的 trip_data 表。
添加自定义元数据
现在,尝试添加几个自定义表属性来帮助组织表。要添加的第一个表属性是 environment 变量,可帮助您确定表是用于开发、测试还是生产。要添加的第二个表属性是 department 变量,它允许您按部门对表进行分组。
在 Lake Formation 控制台的数据目录下,选择数据库。
选择 ny-taxi 数据库,然后选择查看表。
选择 trip_data 表,然后选择编辑表。
在表属性下,选择添加。将 environment 值设置为 dev,并将 department 值设置为 research1。选择保存。
注意:如果保存失败,请检查当前用户是否有修改表的权限
在数据目录下,选择表。在搜索栏中,键入“research”,然后按 Enter。未返回任何结果,因为不存在表属性值为 research 的表。但是,搜索 research****1 应该会返回 trip_data 表。
返回 trip-data 的表属性,并将 department 属性从 research1 更新为 research。完成编辑后,在表搜索中输入“研究”作为关键字时,将显示 trip-data 表:
小结
恭喜,您已经成功使用 Lake Formation 创建并编辑了您的第一个数据湖。您已使用该服务保护数据并将其提取到 S3 数据湖中,对数据进行编目,并自定义数据源的元数据。在本系列的第 2 部分中,我将向您展示如何使用 Lake Formation 的元数据搜索功能来发现数据。
作者介绍:
**
Julia Soscia 是总部设在纽约市的 Amazon Web Services 的解决方案架构师。**她的主要工作是帮助客户在 AWS 云平台上创建架构完善的环境。她是一位经验丰富的数据分析师,专注于大数据和分析。
**
Eric Weinberg 是 AWS Envision Engineering 团队的系统开发工程师。**他在构建和设计软件应用程序方面拥有 15 年的经验。
**
Francesco Marelli 是 Amazon Web Services 的高级解决方案架构师。**他在分析和数据管理方面拥有二十多年的经验。
评论