Amazon Athena

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

连接到Athena

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

  • 访问密钥
  • 秘密密钥

Metabase将对这些凭据进行加密。

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

Athena中的身份和访问管理

使用AWS默认凭证链连接

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

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

设置

您可以在任何时候编辑这些设置。只需记得保存您的更改。

显示名称

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

区域

您的数据库托管在Amazon Athena的AWS区域,例如,您可能输入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仅在向仪表板或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 > 权限 > 数据湖权限 > 授予权限;Metabase使用的角色需要SELECT和DESCRIBE表权限)授予AWS Lake Formation权限。

示例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其他版本的文档。

想改进这些文档?提出更改。