Amazon Athena

要添加数据库连接,请单击右上角的**齿轮**图标,然后导航至**管理设置** > **数据库** > **添加数据库**。

连接到 Athena

要将 Metabase 连接到 Athena,您需要输入您的 IAM 凭据

  • 访问密钥
  • 密钥

Metabase 将加密这些凭据。

如果您使用其他 AWS 服务,我们建议您创建一个特殊的 AWS 服务账户,该账户仅具有运行 Athena 所需的权限,并输入该账户的 IAM 凭据以将 Metabase 连接到 Athena。

请参阅 Athena 中的身份和访问管理

使用 AWS 默认凭证链连接

如果您在 AWS 上运行 Metabase 并希望使用 AWS 默认凭证链,请将访问密钥和密钥留空。

在这两种情况下,Athena 驱动程序都将根据您配置的 IAM 角色自动获取会话凭据。

设置

您可以随时编辑这些设置。只需记住保存您的更改。

显示名称

数据库在 Metabase 界面中显示的名称。

区域

您的数据库托管所在的 AWS 区域,适用于 Amazon Athena。例如,您可以输入 us-east-1

工作组

AWS 工作组。例如:primary。请参阅 关于工作组的文档

S3 暂存目录

此 S3 暂存目录必须与您在上面指定的区域相同。

访问密钥

AWS 的 IAM 凭据的一部分。Metabase 将加密这些凭据。

如果您在 AWS 上运行 Metabase 并希望使用 AWS 默认凭证链,请将访问密钥和密钥留空。

密钥

AWS 的 IAM 凭据的一部分。Metabase 将加密这些凭据。

其他 Athena 连接字符串选项

您可以通过字符串指定其他选项,例如 UseResultsetStreaming=0;LogLevel=6

重新运行简单探索的查询

如果人们希望在应用任何汇总或筛选器选择之前单击**运行**(播放按钮),请将此选项**关闭**。

默认情况下,当您从**汇总**菜单中选择分组选项或从钻取菜单中选择筛选条件时,Metabase 将立即执行查询。如果您的数据库速度较慢,您可能希望禁用重新运行以避免每次单击都加载数据。

选择 Metabase 同步和扫描的时间

将此选项**开启**以管理 Metabase 用于保持数据库最新状态的查询。有关更多信息,请参阅同步和扫描数据库

数据库同步

如果您选择了**选择同步和扫描发生的时间** > **开启**,您将能够设置

  • 同步的频率:每小时(默认)或每天。
  • 运行同步的时间,以运行 Metabase 应用程序的服务器的时区为准。

扫描筛选器值

Metabase 可以扫描此数据库中每个字段中存在的值,以在仪表板和问题中启用复选框筛选器。这可能是一个相当消耗资源的过程,特别是当您有一个非常大的数据库时。

如果您选择了**选择同步和扫描发生的时间** > **开启**,您将在**扫描筛选器值**下看到以下选项

  • **定期,按计划**允许您以与数据库更改速率相匹配的频率运行扫描查询。时间以运行 Metabase 应用程序的服务器的时区为准。对于小型数据库或具有经常更新的不同值的表,这是最佳选择。
  • **仅在添加新的筛选器小组件时**是一个很好的选择,如果您希望按需运行扫描查询。将此选项**开启**意味着 Metabase 将仅扫描和缓存在向仪表板或 SQL 问题添加新筛选器时使用的字段的值。
  • **从不,如果需要,我会手动执行**是用于数据库过大或从未真正添加新值的选项。使用立即重新扫描字段值按钮运行手动扫描并将您的筛选器值更新到最新。

定期重新指纹表

定期重新指纹识别将增加数据库的负载。

将此选项**开启**以在 Metabase 每次运行同步时扫描值样本。

指纹识别查询检查每个列的前 10,000 行,并使用该数据来估计每个列有多少个唯一值,数值列和时间戳列的最小值和最大值是多少等等。如果您将此选项**关闭**,Metabase 将仅在设置期间为您的列进行一次指纹识别。

权限和 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"
      ],
      "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": "*"
    }
  ]
}

延伸阅读

阅读其他 Metabase 版本 的文档。