使用早期版本的 JDBC 驱动程序 - Amazon Athena
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用早期版本的 JDBC 驱动程序

我们建议您使用最新版本的 JDBC 驱动程序。有关信息,请参阅将 Athena 与 JDBC 驱动程序配合使用。下面列出了指向早期的 2.x 版本驱动程序和支持材料的链接(如果您的应用程序需要。)

早期版本的 JDBC 驱动程序
JDBC 驱动程序版本 下载
2.0.8 兼容 JDBC 4.2 和 JDK 8.0 – AthenaJDBC42-2.0.8.jar 发行说明 许可协议 通知 安装和配置指南 (PDF) 迁移指南 (PDF)
兼容 JDBC 4.1 和 JDK 7.0 – AthenaJDBC41-2.0.8.jar
2.0.7 兼容 JDBC 4.2 和 JDK 8.0 – AthenaJDBC42-2.0.7.jar 发行说明 许可协议 通知 安装和配置指南 (PDF) 迁移指南 (PDF)
兼容 JDBC 4.1 和 JDK 7.0 – AthenaJDBC41-2.0.7.jar
2.0.6 兼容 JDBC 4.2 和 JDK 8.0 – AthenaJDBC42-2.0.6.jar 发行说明 通知 安装和配置指南 (PDF) 迁移指南 (PDF)
兼容 JDBC 4.1 和 JDK 7.0 – AthenaJDBC41-2.0.6.jar
2.0.5 兼容 JDBC 4.2 和 JDK 8.0 – AthenaJDBC42-2.0.5.jar 发行说明 许可协议 通知 安装和配置指南 (PDF) 迁移指南 (PDF)
兼容 JDBC 4.1 和 JDK 7.0 – AthenaJDBC41-2.0.5.jar
2.0.2 兼容 JDBC 4.2 和 JDK 8.0 – AthenaJDBC42-2.0.2.jar 发行说明 许可协议 通知 安装和配置指南 (PDF) 迁移指南 (PDF)
兼容 JDBC 4.1 和 JDK 7.0 – AthenaJDBC41-2.0.2.jar

有关 JDBC 驱动程序版本 1.1.0 的说明

本部分包含一个用于下载 JDBC 驱动程序版本 1.1.0 的链接。我们强烈建议您迁移到该驱动程序的最新版本。有关信息,请参阅 JDBC 驱动程序迁移指南

JDBC 驱动程序版本 1.0.1 和之前的版本已弃用。

JDBC 驱动程序版本 1.1.0 与 JDBC 4.1 和 JDK 7.0 兼容。使用以下链接下载驱动程序:AthenaJDBC41-1.1.0.jar。此外,下载此驱动程序的驱动程序许可证第三方许可证。将 AWS CLI 与以下命令结合使用:aws s3 cp s3://path_to_the_driver [local_directory],然后使用此部分中的其他说明。

注意

以下说明特定于 JDBC 版本 1.1.0 及更早版本。

JDBC 驱动程序版本 1.1.0:指定连接字符串

要在自定义应用程序中指定 JDBC 驱动程序连接 URL,请使用以下格式的字符串:

jdbc:awsathena://athena.{REGION}.amazonaws.com:443

其中,{REGION} 是区域标识符,例如 us-west-2。有关 Athena 区域的信息,请参阅区域

JDBC 驱动程序版本 1.1.0:指定 JDBC 驱动程序类名称

要在自定义应用程序中使用此驱动程序,请将您的 Java 类路径设置为您从 Amazon S3 https://s3.cn-north-1.amazonaws.com.cn/athena-downloads-cn/drivers/JDBC/AthenaJDBC_1.1.0/AthenaJDBC41-1.1.0.jar 下载的 JAR 文件的位置。这会使 JAR 中的类可供使用。主要 JDBC 驱动程序类是 com.amazonaws.athena.jdbc.AthenaDriver

JDBC 驱动程序版本 1.1.0:提供 JDBC 驱动程序凭证

要获得对 AWS 服务和资源(如 Athena 和 Amazon S3 存储桶)的访问权限,请为您的应用程序提供 JDBC 驱动程序凭证。

为您的应用程序提供 Java 代码格式的凭证:

  1. 使用一个实现 AWSCredentialsProvider 的类。

  2. 将 JDBC 属性 aws_credentials_provider_class 设置为等于类名,并将其包括在您的类路径中。

  3. 要包括构造函数参数,请按照以下配置选项部分中的指定来设置 JDBC 属性 aws_credentials_provider_arguments

另一种向 BI 工具 (如 SQL Workbench) 提供凭据的方法是,分别提供作为 AWS 访问密钥用于 JDBC 的凭据和用于 JDBC 用户和密码属性的 AWS 私有密钥。

通过 JDBC 驱动程序连接并具有附加到其配置文件的自定义访问策略的用户除了 Amazon Athena API 参考中的权限外,还需要具有策略操作的权限。

针对 JDBC 驱动程序版本 1.1.0 的策略

您必须允许 JDBC 用户执行一组特定于策略的操作。如果不允许执行以下操作,用户将无法看到数据库和表:

  • athena:GetCatalogs

  • athena:GetExecutionEngine

  • athena:GetExecutionEngines

  • athena:GetNamespace

  • athena:GetNamespaces

  • athena:GetTable

  • athena:GetTables

JDBC 驱动程序版本 1.1.0:配置 JDBC 驱动程序选项

您可以为 JDBC 驱动程序版本 - 版本 1.1.0 配置以下选项。借助此版本的驱动程序,您还可以使用标准的 JDBC URL 语法传递参数,例如:jdbc:awsathena://athena.cn-north-1.amazonaws.com.cn:443?max_error_retries=20&connection_timeout=20000

针对 JDBC 驱动程序版本 1.0.1 的选项
属性名称 描述 默认值 是必需的
s3_staging_dir 您的查询输出写入到的 S3 位置(例如 s3://query-results-bucket/folder/),此位置是在 Athena 控制台 https://console.amazonaws.cn/athena/ 中的 Settings (设置) 下建立的。然后,JDBC 驱动程序要求 Athena 读取结果并将数据行提供给用户。 不适用
query_results_encryption_option 要用于 s3_staging_dir 指定的目录的加密方法。如果未指定,则位置不加密。有效值包括 SSE_S3SSE_KMSCSE_KMS 不适用
query_results_aws_kms_key

要在 query_results_encryption_option 指定 SSE-KMSCSE-KMS 时使用的 AWS 客户主密钥 (CMK) 的密钥 ID例如:123abcde-4e56-56f7-g890-1234h5678i9j

不适用
aws_credentials_provider_class 实现 AWSCredentialsProvider 接口的凭据提供程序类名。 不适用
aws_credentials_provider_arguments 凭据提供程序构造函数的参数 (逗号分隔的值)。 不适用
max_error_retries

JDBC 客户端尝试对 Athena 发出请求的最大重试次数。

10
connection_timeout 在尝试终止之前成功连接到 Athena 的最长时间(以毫秒为单位)。 10000
socket_timeout 为将数据发送到 Athena 而等待套接字的最长时间(以毫秒为单位)。 10000
retry_base_delay 重试连接 Athena 的尝试之间的最短延迟(以毫秒为单位)。 100
retry_max_backoff_time 重试连接到 Athena 的尝试之间的最长延迟(以毫秒为单位)。 1000
log_path Athena JDBC 驱动程序日志的本地路径。如果没有提供日志路径,则不会创建任何日志文件。 不适用
log_level Athena JDBC 驱动程序日志的日志级别。有效值:INFODEBUGWARNERRORALLOFFFATALTRACE 不适用

示例:将 JDBC 驱动程序 1.1.0 版本和 JDK 结合使用

以下代码示例演示如何在 Java 应用程序中使用 JDBC 驱动程序版本 1.1.0。这些示例假定 AWS JAVA SDK 包含在类路径中,具体而言是 aws-java-sdk-core 模块,该模块包含示例中引用的授权程序包 (com.amazonaws.auth.*)。

例 示例:创建驱动程序版本 1.0.1

Properties info = new Properties(); info.put("user", "AWSAccessKey"); info.put("password", "AWSSecretAccessKey"); info.put("s3_staging_dir", "s3://S3 Bucket Location/"); info.put("aws_credentials_provider_class","com.amazonaws.auth.DefaultAWSCredentialsProviderChain"); Class.forName("com.amazonaws.athena.jdbc.AthenaDriver"); Connection connection = DriverManager.getConnection("jdbc:awsathena://athena.us-east-1.amazonaws.com:443/", info);

下面的示例说明使用凭证提供程序对早期 JDBC 驱动程序版本实现 AWSCredentialsProvider 接口的不同方法。

例 示例:使用 JDBC 驱动程序 1.0.1 的凭证提供程序

Properties myProps = new Properties(); myProps.put("aws_credentials_provider_class","com.amazonaws.auth.PropertiesFileCredentialsProvider"); myProps.put("aws_credentials_provider_arguments","/Users/myUser/.athenaCredentials");

在本例中,文件 /Users/myUser/.athenaCredentials 应包含以下内容:

accessKey = ACCESSKEY secretKey = SECRETKEY

将赋值语句右侧内容替换为您的账户的 AWS 访问密钥和私有密钥。

例 示例:使用具有多个参数的凭证提供程序

此示例显示一个示例凭证提供程序 CustomSessionsCredentialsProvider,其使用访问密钥和密钥以及会话密钥。例如,CustomSessionsCredentialsProvider 仅显示,但不包含在驱动程序中。该类的签名类似如下内容:

public CustomSessionsCredentialsProvider(String accessId, String secretKey, String token) { //... }

您可以如下设置属性:

Properties myProps = new Properties(); myProps.put("aws_credentials_provider_class","com.amazonaws.athena.jdbc.CustomSessionsCredentialsProvider"); String providerArgs = "My_Access_Key," + "My_Secret_Key," + "My_Token"; myProps.put("aws_credentials_provider_arguments",providerArgs);
注意

如果使用 InstanceProfileCredentialsProvider,则无需提供任何凭证提供程序参数,因为它们是通过使用运行应用程序的实例的 Amazon EC2 实例配置文件提供的。不过,您还是需要将 aws_credentials_provider_class 属性设置为此类名。

针对 1.1.0 版本之前的 JDBC 驱动程序的策略

将策略中的弃用操作与版本 1.1.0 之前的 JDBC 驱动程序一起使用。如果要升级 JDBC 驱动程序,请用列出的适当 API 操作替换允许或拒绝已废弃操作的策略语句,否则会发生错误。

已弃用的特定于策略的操作 对应的 Athena API 操作
athena:RunQuery
athena:StartQueryExecution
athena:CancelQueryExecution
athena:StopQueryExecution
athena:GetQueryExecutions
athena:ListQueryExecutions