在 Lake Formation 中从 JDBC 来源创建数据湖
本教程将指导您完成在 Amazon Lake Formation 控制台上使用 Lake Formation 从来源创建和加载您的第一个数据湖的步骤。
主题
- 目标受众
- JDBC 教程的先决条件
- 第 1 步:创建数据分析师用户
- 第 2 步:在 Amazon Glue 中创建连接
- 第 3 步:为数据湖创建 Amazon S3 存储桶
- 第 4 步:注册 Amazon S3 路径
- 第 5 步:授予数据位置权限
- 第 6 步:在数据目录中创建数据库
- 第 7 步:授予数据权限
- 第 8 步:使用蓝图创建工作流
- 第 9 步:运行工作流
- 第 10 步:授予对表的选择权限
- 第 11 步:使用 Amazon Athena 查询数据湖
- 第 12 步:使用 Amazon Redshift Spectrum 查询数据湖中的数据
- 第 13 步:使用 Amazon Redshift Spectrum 授予或撤销 Lake Formation 权限
目标受众
下表列出了本 Amazon Lake Formation JDBC 教程中使用的角色。
角色 | 描述 |
---|---|
IAM 管理员 | 可以创建 Amazon Identity and Access Management (IAM) 用户和角色以及 Amazon Simple Storage Service (Amazon S3) 存储桶的用户。具有 AdministratorAccess Amazon 托管策略。 |
数据湖管理员 | 可以访问数据目录、创建数据库以及向其他用户授予 Lake Formation 权限的用户。拥有的 IAM 权限比 IAM 管理员少,但足以管理数据湖。 |
数据分析人员 | 可以对数据湖运行查询的用户。拥有的权限仅足以运行查询。 |
工作流角色 | 具有运行工作流所需的 IAM 策略的角色。 |
有关完成教程的先决条件的信息,请参阅JDBC 教程的先决条件。
JDBC 教程的先决条件
在开始学习 Amazon Lake Formation JDBC 教程之前,请确保您已完成以下操作:
-
完成Lake Formation 入门中所述的任务。
-
确定要在本教程中使用的可访问 JDBC 的数据存储。
-
收集创建 JDBC 类型的 Amazon Glue 连接所需的信息。此数据目录对象包括数据存储的 URL 和登录凭证,如果数据存储是在 Amazon Virtual Private Cloud (Amazon VPC) 中创建的,则还包括其他特定于 VPC 的配置信息。有关更多信息,请参阅《Amazon Glue 开发人员指南》中的在 Amazon Glue 数据目录中定义连接。
本教程假定您熟悉 Amazon Identity and Access Management (IAM)。有关 IAM 的信息,请参阅 IAM 用户指南。
要开始,请执行第 1 步:创建数据分析师用户操作。
第 1 步:创建数据分析师用户
在这一步,您将在 Amazon Lake Formation 中创建一个 Amazon Identity and Access Management (IAM) 用户作为数据湖的数据分析师。
此用户拥有查询数据湖所需的一组最低权限。
-
使用 https://console.amazonaws.cn/iam
打开 IAM 控制台。以您在中创建的管理员用户或使用 AdministratorAccess
Amazon 托管策略的用户身份登录。 -
使用以下设置创建名为
datalake_user
的用户:-
启用 Amazon Web Services Management Console 访问。
-
设置密码,不需要重置密码。
-
附加
AmazonAthenaFullAccess
Amazon 托管策略。 -
附加下面的内联策略。将该策略命名为
DatalakeUserBasic
。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:GetTable", "glue:GetTables", "glue:SearchTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartitions", "lakeformation:GetResourceLFTags", "lakeformation:ListLFTags", "lakeformation:GetLFTag", "lakeformation:SearchTablesByLFTags", "lakeformation:SearchDatabasesByLFTags" ], "Resource": "*" } ] }
-
第 2 步:在 Amazon Glue 中创建连接
注意
如果您已经与 JDBC 数据来源建立了 Amazon Glue 连接,请跳过这一步。
Amazon Lake Formation 通过 Amazon Glue 连接访问 JDBC 数据来源。连接是数据目录对象,其中包含连接到数据来源所需的所有信息。您可以使用 Amazon Glue 控制台创建连接。
创建连接
-
在 https://console.amazonaws.cn/glue/
中打开 Amazon Glue 控制台,并以您在中创建的管理员用户身份登录。 -
在导航窗格的 Data catalog (数据目录) 下,选择 Connections (连接)。
-
在 Connectors (连接器) 页面上,选择 Create custom connector (创建自定义连接器)。
-
在连接器属性页面上,输入
datalake-tutorial
作为连接名称,然后选择 JDBC 作为连接类型。然后选择下一步。 -
继续运行连接向导并保存连接。
有关创建连接的信息,请参阅《Amazon Glue 开发人员指南》中的 Amazon Glue JDBC 连接属性。
第 3 步:为数据湖创建 Amazon S3 存储桶
在这一步,您要创建 Amazon Simple Storage Service (Amazon S3) 存储桶作为数据湖的根位置。
-
通过 https://console.aws.amazon.com/s3/
打开 Amazon S3 控制台,并以您在中创建的管理员用户身份登录。 -
选择创建存储桶,然后通过向导创建名为
的存储桶,其中<yourName>
-datalake-tutorial<yourName>
是您的名字和姓氏。例如:jdoe-datalake-tutorial
。有关创建 Amazon S3 存储桶的详细说明,请参阅《Amazon Simple Storage Service 用户指南》中的如何创建 S3 存储桶?。
第 4 步:注册 Amazon S3 路径
在这一步,您要创建 Amazon Simple Storage Service (Amazon S3) 路径作为数据湖的根位置。
-
通过 https://console.aws.amazon.com/lakeformation/
打开 Lake Formation 控制台。以数据湖管理员身份登录。 -
在导航窗格的管理下,选择数据湖位置。
-
选择注册位置,然后选择浏览。
-
选择您之前创建的
存储桶,接受默认 IAM 角色<yourName>
-datalake-tutorialAWSServiceRoleForLakeFormationDataAccess
,然后选择注册位置。有关注册位置的更多信息,请参阅向数据湖添加 Amazon S3 位置。
第 5 步:授予数据位置权限
主体必须拥有对数据湖位置的数据位置权限,才能创建指向该位置的数据目录表或数据库。您必须向 IAM 角色授予对工作流的数据位置权限,这样工作流才能向数据摄取目标写入数据。
-
在 Lake Formation 控制台的导航窗格中,在权限下选择数据位置。
-
选择授权,然后在授予权限对话框中执行以下操作:
-
对于 IAM 用户和角色,请选择
LakeFormationWorkflowRole
。 -
对于存储位置,选择您的
存储桶。<yourName>
-datalake-tutorial
-
-
选择授权。
有关数据位置权限的更多信息,请参阅Underlying data access control。
第 6 步:在数据目录中创建数据库
Lake Formation 数据目录中的元数据表存储在数据库中。
-
在 Lake Formation 控制台的导航窗格中,在数据目录下选择数据库。
-
选择创建数据库,然后在数据库详细信息下输入名称
lakeformation_tutorial
。 -
将其他字段留空,然后选择创建数据库。
第 7 步:授予数据权限
您必须授予在数据目录中创建元数据表的权限。由于工作流与角色 LakeFormationWorkflowRole
一起运行,因此您必须向该角色授予这些权限。
-
在 Lake Formation 控制台的导航窗格中,在权限下选择数据湖权限。
-
选择授权,然后在授予数据权限对话框中执行以下操作:
-
在主体下,对于 IAM 用户和角色,选择
LakeFormationWorkflowRole
。 -
在 LF 标签或目录资源下,选择命名数据目录资源。
-
对于数据库,请选择您之前创建的数据库
lakeformation_tutorial
。 -
在数据库权限下,选择创建表、更改和删除,如果已选中超级,请将其清除。
-
-
选择授权。
有关授予 Lake Formation 权限的更多信息,请参阅Lake Formation 权限概述 。
第 8 步:使用蓝图创建工作流
Amazon Lake Formation 工作流会生成 Amazon Glue 作业、爬网程序和触发器,以用于发现数据并将其摄取到您的数据湖中。您可以基于其中一个预定义的 Lake Formation 蓝图创建工作流。
-
在 Lake Formation 控制台的导航窗格中,选择蓝图,然后选择使用蓝图。
-
在使用蓝图页面的蓝图类型下,选择数据库快照。
-
在导入源下的数据库连接中,选择您刚刚创建的连接
datalake-tutorial
,或者为您的数据来源选择一个现有连接。 -
对于源数据路径,以
形式输入从中摄取数据的路径。<database>
/<schema>
/<table>
您可以用百分比 (%) 字符替换架构或表。对于支持架构的数据库,请输入
<database>
/<schema>
/% 以匹配<database>
中<schema>
内的所有表。Oracle Database 和 MySQL 不支持路径中的架构,所以请改为输入<database>
/%。对于 Oracle 数据库,<database>
是系统标识符 (SID)。例如,如果 Oracle 数据库的 SID 为
orcl
,则输入orcl/%
以匹配在 JDCB 连接中指定的用户有权访问的所有表。重要
此字段区分大小写。
-
在导入目标下,指定以下参数:
目标数据库 lakeformation_tutorial
目标存储位置 s3://
<yourName>
-datalake-tutorialData format(数据格式) (选择 Parquet 或 CSV) -
对于导入频率,选择按需运行。
-
在导入选项下,指定以下参数:
工作流名称 lakeformationjdbctest
IAM 角色 LakeFormationWorkflowRole
表前缀 jdbctest
注意
必须小写。
-
选择创建,然后等待控制台报告已成功创建工作流。
提示
您是否收到了以下错误消息?
User: arn:aws:iam::
<account-id>
:user/<datalake_administrator_user>
is not authorized to perform: iam:PassRole on resource:arn:aws:iam::<account-id>
:role/LakeFormationWorkflowRole...如果收到了,请检查您将是否将数据湖管理员用户的内联策略中的
<account-id>
替换为了有效的 Amazon 帐号。
第 9 步:运行工作流
由于您指定工作流按需运行,因此必须在 Amazon Lake Formation 中手动启动该工作流。
-
在 Lake Formation 控制台的蓝图页面上,选择工作流
lakeformationjdbctest
。 -
选择操作,然后选择启动。
-
当工作流运行时,您可以在上次运行状态列中查看其进度。时不时地选择刷新按钮。
状态从正在运行依次变为正在发现、正在导入和已完成。
工作流完成后:
-
数据目录中将含有新的元数据表。
-
您的数据已被摄取到数据湖中。
如果工作流失败,请执行以下操作:
-
选择工作流。选择操作,然后选择查看图表。
该工作流将在 Amazon Glue 控制台中打开。
-
选择该工作流,然后选择历史记录选项卡。
-
选择最近的运行,然后选择查看运行详细信息。
-
在动态(运行时)图表中选择失败的作业或爬网程序,然后查看错误消息。失败的节点为红色或黄色。
-
第 10 步:授予对表的选择权限
您必须在 Amazon Lake Formation 中授予对新数据目录表的 SELECT
权限,以便数据分析师可以查询这些表所指向的数据。
注意
工作流会自动向运行它的用户授予对它创建的表的 SELECT
权限。由于数据湖管理员运行了该工作流,因此您必须向数据分析师授予 SELECT
。
-
在 Lake Formation 控制台的导航窗格中,在权限下选择数据湖权限。
-
选择授权,然后在授予数据权限对话框中执行以下操作:
-
在主体下,对于 IAM 用户和角色,选择
datalake_user
。 -
在 LF 标签或目录资源下,选择命名数据目录资源。
-
对于数据库,选择
lakeformation_tutorial
。表列表即会填充。
-
对于表,从数据来源中选择一个或多个表。
-
在表和列权限 下,选择选择。
-
-
选择授权。
以数据分析师的身份执行下一步。
第 11 步:使用 Amazon Athena 查询数据湖
使用 Amazon Athena 控制台查询数据湖中的数据。
-
通过 https://console.aws.amazon.com/athena/
打开 Athena 控制台并以数据分析师用户 datalake_user
的身份登录。 -
如有必要,请选择开始使用以继续使用 Athena 查询编辑器。
-
对于数据来源,选择 AwsDataCatalog。
-
对于 Database (数据库),请选择
lakeformation_tutorial
。表列表即会填充。
-
在其中一个表旁边的弹出菜单中,选择预览表。
查询即会运行并显示 10 行数据。
第 12 步:使用 Amazon Redshift Spectrum 查询数据湖中的数据
您可以设置 Amazon Redshift Spectrum 以查询您导入到 Amazon Simple Storage Service (Amazon S3) 数据湖中的数据。首先,创建一个 Amazon Identity and Access Management (IAM) 角色,该角色用于启动 Amazon Redshift 集群和查询 Amazon S3 数据。然后,向该角色授予对您要查询的表的 Select
权限。然后,授予该用户使用 Amazon Redshift 查询编辑器的权限。最后,创建一个 Amazon Redshift 集群并运行查询。
您要以管理员身份创建集群,并以数据分析师的身份查询集群。
有关 Amazon Redshift Spectrum 的更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的使用 Amazon Redshift Spectrum 查询外部数据。
设置运行 Amazon Redshift 查询的权限
-
通过 https://console.aws.amazon.com/iam/
打开 IAM 控制台。以您在中创建的管理员用户(用户名 Administrator
)或使用AdministratorAccess
Amazon 托管策略的用户身份登录。 -
在导航窗格中,选择策略。
如果这是您首次选择 Policies,则会显示 Welcome to Managed Policies 页面。选择开始使用。
-
选择创建策略。
-
选择 JSON 选项卡。
-
粘贴以下 JSON 策略文档。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess", "glue:GetTable", "glue:GetTables", "glue:SearchTables", "glue:GetDatabase", "glue:GetDatabases", "glue:GetPartitions", "lakeformation:GetResourceLFTags", "lakeformation:ListLFTags", "lakeformation:GetLFTag", "lakeformation:SearchTablesByLFTags", "lakeformation:SearchDatabasesByLFTags" ], "Resource": "*" } ] }
-
完成后,选择审核对策略进行审核。策略验证程序将报告任何语法错误。
-
在查看策略页面上,输入
RedshiftLakeFormationPolicy
作为您要创建的策略的名称。输入描述(可选)。查看策略摘要以查看您的策略授予的权限。然后,选择创建策略以保存您的工作。 -
在 IAM 控制台的导航窗格中,选择角色,然后选择创建角色。
-
对于选择可信实体,选择 Amazon 服务。
-
选择 Amazon Redshift 服务来代入此角色。
-
为您的服务选择 Redshift Customizable (Redshift 可自定义)。然后选择 Next: Permissions (下一步:权限)。
-
搜索刚创建的策略
RedshiftLakeFormationPolicy
,然后在列表中选中该策略名称旁边的复选框。 -
选择下一步:标签。
-
选择下一步:审核。
-
对于角色名称,输入名称
RedshiftLakeFormationRole
。 -
(可选)对于 Role description (角色描述),输入新角色的描述。
-
检查该角色,然后选择创建角色。
授予对 Lake Formation 数据库中要查询的表的 Select
权限
-
通过 https://console.aws.amazon.com/lakeformation/
打开 Lake Formation 控制台。以数据湖管理员身份登录。 -
在导航窗格的权限下,选择数据湖权限,然后选择授权。
-
提供以下信息:
-
对于 IAM 用户和角色,选择您创建的 IAM 角色
RedshiftLakeFormationRole
。运行 Amazon Redshift 查询编辑器时,它使用此 IAM 角色来获取数据权限。 -
对于 Database (数据库),请选择
lakeformation_tutorial
。表列表即会填充。
-
对于表,选择数据来源中要查询的表。
-
选择选择表权限。
-
-
选择授权。
设置 Amazon Redshift Spectrum 并运行查询
-
通过以下网址打开 Amazon Redshift 控制台:https://console.amazonaws.cn/redshift
。以用户 Administrator
的身份登录。 -
选择创建集群。
-
在创建集群页面上,输入
redshift-lakeformation-demo
作为集群标识符。 -
对于节点类型,选择 dc2.large。
-
向下滚动,在数据库配置下输入或接受以下参数:
-
管理用户名称:
awsuser
-
管理用户密码:
(
Choose a password
)
-
-
展开集群权限,对于可用的 IAM 角色,选择 RedshiftLakeFormationRole。然后选择 Add IAM role (添加 IAM 角色)。
-
如果您必须使用的端口与默认值 5439 不同,请关闭其他配置旁边的使用默认值选项。展开数据库配置部分,然后输入新的数据库端口号。
-
选择创建集群。
集群页面即会加载。
-
等待到集群状态变为可用。定期选择刷新图标。
-
向数据分析师授予对集群运行查询的权限。为此,请完成以下步骤。
-
通过网址 https://console.aws.amazon.com/iam/
打开 IAM 控制台,然后以 Administrator
用户身份登录。 -
在导航窗格中,选择用户,然后选择将以下托管策略附加到用户
datalake_user
。-
AmazonRedshiftQueryEditor
-
AmazonRedshiftReadOnlyAccess
-
-
-
退出 Amazon Redshift 控制台,然后以用户
datalake_user
身份重新登录。 -
在左侧垂直工具栏中,选择编辑器图标以打开查询编辑器并连接到集群。如果连接到数据库对话框出现,请选择集群名称
redshift-lakeformation-demo
,然后输入数据库名称dev
、用户名awsuser
和您创建的密码。然后,选择 Connect to database (连接到数据库)。注意
如果系统没有提示您输入连接参数,并且已经在查询编辑器中选择了另一个集群,请选择更改连接打开连接到数据库对话框。
-
在新查询 1 文本框中,输入并运行以下语句以将 Lake Formation 中的数据库
lakeformation_tutorial
映射到 Amazon Redshift 架构名称redshift_jdbc
:重要
将
<account-id>
替换为有效的 Amazon 账户编号,并将<region>
替换为有效的 Amazon 区域名称(例如,us-east-1
)。create external schema if not exists redshift_jdbc from DATA CATALOG database 'lakeformation_tutorial' iam_role 'arn:aws:iam::
<account-id>
:role/RedshiftLakeFormationRole' region '<region>
'; -
在选择架构下的架构列表中,选择 redshift_jdbc。
表列表即会填充。查询编辑器仅显示您被授予了对其的 Lake Formation 数据湖权限的表。
-
在表名称旁边的弹出菜单中,选择预览数据。
Amazon Redshift 将返回前 10 行。
现在,您可对您对其拥有权限的表和列运行查询。
第 13 步:使用 Amazon Redshift Spectrum 授予或撤销 Lake Formation 权限
Amazon Redshift 支持使用修改后的 SQL 语句授予和撤销对数据库和表的 Lake Formation 权限。这些语句与现有的 Amazon Redshift 语句相似。有关更多信息,请参阅《Amazon Redshift 数据库开发人员指南》中的授权和撤销。