Amazon Athena
要添加数据库连接,请点击右上角的齿轮图标,然后导航到管理员设置 > 数据库 > 添加数据库。
连接和同步
连接到数据库后,您将看到“连接和同步”部分,其中显示当前连接状态和管理数据库连接的选项。
在此处,您可以同步数据库架构并重新扫描字段值,并编辑连接详情。
编辑连接详情
您可以随时编辑这些设置(并记住保存更改)。
连接字符串
在此处粘贴连接字符串以预填充以下剩余字段。
显示名称
Metabase 界面中数据库的显示名称。
区域
Amazon Athena 数据库所在的 AWS 区域。例如,您可以输入 us-east-1
。
工作组
AWS 工作组。例如:primary
。请参阅工作组文档。
S3 暂存目录
此 S3 暂存目录必须与您上面指定的区域相同。
访问密钥
AWS IAM 凭证的一部分。Metabase 将加密这些凭证。
如果您在 AWS 上运行 Metabase 并想使用AWS 默认凭证链,请将访问密钥和秘密密钥留空。
另请参阅我们关于连接到 Athena 的注意事项。
秘密密钥
AWS IAM 凭证的一部分。Metabase 将加密这些凭证。
其他 Athena 连接字符串选项
您可以通过字符串指定其他选项,例如 UseResultsetStreaming=0;LogLevel=6
。
在查询中包含用户 ID 和查询哈希
这对于审计和调试很有用,但会阻止数据库缓存结果并可能增加您的成本。如果您需要跟踪哪些用户正在运行特定查询,请启用此功能。
重新运行简单探索的查询
如果用户希望在应用任何汇总或筛选选择之前单击运行(播放按钮),请将此选项关闭。
默认情况下,Metabase 会在您从汇总菜单中选择分组选项或从钻取菜单中选择筛选条件后立即执行查询。如果您的数据库速度较慢,您可能需要禁用重新运行以避免每次单击都加载数据。
选择同步和扫描发生的时间
请参阅同步和扫描。
定期重新指纹识别表
定期重新指纹识别将增加数据库的负载。
将此选项打开,以便在 Metabase 每次运行同步时扫描值的样本。
指纹识别查询会检查每列的前 10,000 行,并使用该数据估算每列具有多少个唯一值、数字和时间戳列的最小值和最大值等等。如果您将此选项关闭,Metabase 将仅在设置期间指纹识别您的列一次。
连接到 Athena 的注意事项
如果您使用其他 AWS 服务,我们建议您创建一个仅具有运行 Athena 所需权限的专用 AWS 服务账户,并输入该账户的 IAM 凭证以将 Metabase 连接到 Athena。
请参阅Athena 中的身份和访问管理。
使用 AWS 默认凭证链连接
如果您在 AWS 上运行 Metabase 并想使用AWS 默认凭证链,请将访问密钥和秘密密钥留空。
- 对于 EC2,您可以使用实例配置文件。
- 对于 ECS,您可以使用任务的 IAM 角色。
在这两种情况下,Athena 驱动程序都会根据您配置的 IAM 角色自动获取会话凭证。
权限和 IAM 策略
我们发现人们尝试连接到 AWS Athena 时遇到的大多数问题都与权限有关。查询 AWS Athena 需要以下权限:
- AWS Athena。
- AWS Glue。
- 存储 Athena 结果的 S3 存储桶。
- Athena 查询的资源(即 Athena 查询的 S3 存储桶)。
- 如果您正在使用 AWS Lake Formation,那么您还需要通过 AWS 控制台授予 AWS Lake Formation 权限(AWS Lake Formation > 权限 > 数据湖权限 > 授予数据湖权限;Metabase 使用的角色需要 SELECT 和 DESCRIBE 表权限)。
IAM 策略示例
此策略为 S3 中的数据提供只读权限。您需要指定任何您希望 Metabase 能够查询的 S3 存储桶,以及作为配置一部分提供的用于写入结果的 S3 存储桶。
其他 Athena 功能(如联合查询)可能需要额外的权限。有关详细信息,请查看Athena 文档。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Athena",
"Effect": "Allow",
"Action": [
"athena:BatchGetNamedQuery",
"athena:BatchGetQueryExecution",
"athena:GetNamedQuery",
"athena:GetQueryExecution",
"athena:GetQueryResults",
"athena:GetQueryResultsStream",
"athena:GetWorkGroup",
"athena:ListDatabases",
"athena:ListDataCatalogs",
"athena:ListNamedQueries",
"athena:ListQueryExecutions",
"athena:ListTagsForResource",
"athena:ListWorkGroups",
"athena:ListTableMetadata",
"athena:StartQueryExecution",
"athena:StopQueryExecution",
"athena:CreatePreparedStatement",
"athena:DeletePreparedStatement",
"athena:GetPreparedStatement",
"athena:GetTableMetadata"
],
"Resource": "*"
},
{
"Sid": "Glue",
"Effect": "Allow",
"Action": [
"glue:BatchGetPartition",
"glue:GetDatabase",
"glue:GetDatabases",
"glue:GetPartition",
"glue:GetPartitions",
"glue:GetTable",
"glue:GetTables",
"glue:GetTableVersion",
"glue:GetTableVersions"
],
"Resource": "*"
},
{
"Sid": "S3ReadAccess",
"Effect": "Allow",
"Action": ["s3:GetObject", "s3:ListBucket", "s3:GetBucketLocation"],
"Resource": [
"arn:aws:s3:::bucket1",
"arn:aws:s3:::bucket1/*",
"arn:aws:s3:::bucket2",
"arn:aws:s3:::bucket2/*"
]
},
{
"Sid": "AthenaResultsBucket",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:GetObject",
"s3:AbortMultipartUpload",
"s3:ListBucket",
"s3:GetBucketLocation"
],
"Resource": ["arn:aws:s3:::bucket2", "arn:aws:s3:::bucket2/*"]
}
]
}
如果 Metabase 还需要创建表,您将需要额外的 AWS Glue 权限。"Resource": "*"
键值对授予账户对任何表的删除和更新权限。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"glue:BatchCreatePartition",
"glue:UpdateDatabase",
"glue:DeleteDatabase",
"glue:CreateTable",
"glue:CreateDatabase",
"glue:UpdateTable",
"glue:BatchDeletePartition",
"glue:BatchDeleteTable",
"glue:DeleteTable",
"glue:CreatePartition",
"glue:DeletePartition",
"glue:UpdatePartition",
"glue:GetCatalogImportStatus"
],
"Resource": "*"
}
]
}
模型功能
Athena 尚无(目前)可用的模型功能。
数据库路由
通过数据库路由,管理员可以使用单个数据连接构建问题一次,然后问题将根据查看问题的人员针对具有相同架构的不同数据连接运行其查询。
诚然,“数据库路由”对于 Athena 来说具有误导性,因为 Athena 中的“数据库”一词更接近于其他数据库中的“架构”。您不能使用数据库路由在 Athena 的不同数据库之间路由查询,但您可以在不同的数据连接之间路由,例如,不同的区域或存储桶、不同的 IAM 用户或不同的数据源/目录。
请参阅数据库路由。
危险区
请参阅危险区。
延伸阅读
阅读其他版本的 Metabase 的文档。