首页/新闻资讯/正文详情

Amazon Athena Java V2 代码示例:AWS SDK for Java 2.x 的运行与 JUnit 测试实战指南

发布时间:2026/9/27 4:35:18 来源:云帆数科 栏目:资讯中心
Amazon Athena Java V2 代码示例:AWS SDK for Java 2.x 的运行与 JUnit 测试实战指南
示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载本文以 javav2/example_code/athena 目录为起点系统讲解如何基于 AWS SDK for Java 2.x 编写、运行并测试 Amazon Athena 客户端示例涵盖凭证与环境的准备、六个核心示例类的调用链、config.properties测试配置以及使用 Maven 执行 JUnit 5 测试的完整流程。读完本文你将掌握 Athena 命名查询的增删查、查询执行的启动/停止/结果拉取等核心 API 的 Java 实现并能独立搭建可运行的本地测试环境。示例概览目录结构与功能清单javav2/example_code/athena是一个独立的 Maven 项目目录布局如下src/main/java/aws/example/athena/七个主源码文件一个客户端工厂 六个功能示例src/test/java/AmazonAthenaTest.java基于 JUnit 5 的集成测试src/main/resources/config.properties测试运行前必须配置的属性文件pom.xmlMaven 构建配置与依赖管理run_example.sh一键运行示例类的 Shell 脚本metadata.yaml按files → path → services结构登记示例文件与 Athena 服务的对应关系六个功能示例覆盖了 Athena 常用的数据平面操作其底层调用关系可由 metadata.yaml 和源码确认示例类核心 API 操作类型CreateNamedQueryExamplecreateNamedQuery命名查询创建ListNamedQueryExamplelistNamedQueriesPaginator命名查询分页列举DeleteNamedQueryExamplecreateNamedQuerydeleteNamedQuery命名查询删除先建后删ListQueryExecutionsExamplelistQueryExecutionsPaginator查询执行 ID 分页列举StartQueryExamplestartQueryExecution/getQueryExecution/getQueryResultsPaginator提交、轮询、取结果全流程StopQueryExecutionExamplestartQueryExecutionstopQueryExecution取消查询执行运行前置条件凭证、计费与破坏性操作默认凭证提供者示例统一使用default credentials provider默认凭证链不需要在代码中硬编码密钥。推荐通过 AWS 官方文档《Using credentials》了解默认凭证链的查找顺序环境变量、系统属性、~/.aws/credentials配置文件等。重要警示示例会在你凭证所对应的账号与 Region 上执行真实的 Athena 操作运行后可能产生AWS 服务费用。例如执行查询会按扫描的数据量计费请查阅 AWS Pricing 页面了解具体服务的计费规则。破坏性操作其中部分示例如DeleteNamedQueryExample会删除云资源。运行删除/修改类操作时务必格外小心最佳实践是为实验创建独立的、仅供测试使用的资源避免影响生产环境。依赖环境配置运行这些示例你需要用Apache Maven 或 Gradle搭建 AWS SDK for Java 2.x 项目环境详见官方《Get started with the AWS SDK for Java 2.x》指南。本仓库的 pom.xml 展示了关键依赖software.amazon.awssdk:bom:2.35.10通过 BOM 统一管理 SDK 模块版本dependencyManagement导入software.amazon.awssdk:athenaAthena 服务客户端software.amazon.awssdk:sso/ssooidc支持 IAM Identity CenterSSO凭证流程org.junit.jupiter:junit-jupiter:5.11.4JUnit 5 测试框架test scopelog4j-core、slf4j-api、log4j-slf4j2-impl日志实现编译目标为Java 21maven.compiler.source/target21必改配置ExampleConstants注意所有代码示例都依赖 ExampleConstants 中定义的常量运行前必须将其改为适配你环境的真实值常量默认值说明CLIENT_EXECUTION_TIMEOUT100000客户端执行超时毫秒ATHENA_OUTPUT_BUCKETs3://bucketscott2查询结果输出位置必须改成你自己的 S3 桶名ATHENA_SAMPLE_QUERYSELECT * FROM scott2;示例查询语句演示查询一个 CSV 逗号分隔表需匹配你的表名SLEEP_AMOUNT_IN_MS1000查询状态轮询的休眠间隔毫秒ATHENA_DEFAULT_DATABASEmydatabase默认数据库名需改为你实际创建的数据库其中ATHENA_SAMPLE_QUERY查询的表、ATHENA_DEFAULT_DATABASE指定的库需要你按照 Athena 官方《Working with data》文档预先在 AWS Glue 数据目录中建好可在 Athena 控制台通过 CREATE DATABASE / CREATE TABLE 完成。客户端工厂与 RegionAthenaClientFactory 展示了推荐式写法通过AthenaClient.builder()显式指定Region.US_WEST_2并使用ProfileCredentialsProvider.create()读取~/.aws/credentials中的配置文件凭证public class AthenaClientFactory { private final AthenaClientBuilder builder AthenaClient.builder() .region(Region.US_WEST_2) .credentialsProvider(ProfileCredentialsProvider.create()); public AthenaClient createClient() { return builder.build(); } }其余示例类则更简洁直接AthenaClient.builder().region(Region.US_WEST_2).build()后交给默认凭证链解析凭证。两种写法都遵循客户端用完即close()的规范。运行方式一Maven exec 插件与一键脚本本目录提供了 run_example.sh 一键运行脚本其内部逻辑为export CLASSPATHtarget/aws-athena-examples-1.0.jar export className$1 shift mvn exec:java -Dexec.mainClassaws.example.athena.$className -Dexec.args$ -Dexec.cleanupDaemonThreadsfalse用法是传入示例类名可附带该类的命令行参数多个参数放在引号内。例如创建命名查询需要 1 个参数name示例类通过args.length ! 1校验参数个数参数不足时打印 Usage 提示并退出./run_example.sh CreateNamedQueryExample myQueryNameDeleteNamedQueryExample同样接收一个name参数main 中先用getNamedQueryId以同名创建一条命名查询并取得其namedQueryId再调用deleteQueryName删除它——从源码结构看这是为了确保删除操作有确定的目标 ID。六大示例源码解析创建命名查询CreateNamedQueryExample核心方法createNamedQuery(AthenaClient, String name)构造CreateNamedQueryRequest四个字段全部来自ExampleConstants与入参CreateNamedQueryRequest createNamedQueryRequest CreateNamedQueryRequest.builder() .database(ExampleConstants.ATHENA_DEFAULT_DATABASE) .queryString(ExampleConstants.ATHENA_SAMPLE_QUERY) .description(Sample Description) .name(name) .build(); athenaClient.createNamedQuery(createNamedQueryRequest);注意AthenaException被显式捕获并打印堆栈后System.exit(1)这是所有示例统一的异常处理模式。分页列举命名查询ListNamedQueryExample该示例演示了 SDK for Java 2.x 的分页器Paginator用法调用listNamedQueriesPaginator返回ListNamedQueriesIterable用 for-each 遍历自动翻页的响应每页取出namedQueryIds()打印ListNamedQueriesIterable listNamedQueriesResponses athenaClient.listNamedQueriesPaginator(listNamedQueriesRequest); for (ListNamedQueriesResponse listNamedQueriesResponse : listNamedQueriesResponses) { ListString namedQueryIds listNamedQueriesResponse.namedQueryIds(); System.out.println(namedQueryIds); }采用分页器而非手动nextToken循环是避免漏页、简化翻页逻辑的推荐方式。删除命名查询DeleteNamedQueryExample删除前需要目标查询 ID。代码先构造并提交一个同名查询请求从CreateNamedQueryResponse.namedQueryId()拿到 ID再构造DeleteNamedQueryRequest执行删除DeleteNamedQueryRequest deleteNamedQueryRequest DeleteNamedQueryRequest.builder() .namedQueryId(sampleNamedQueryId) .build(); athenaClient.deleteNamedQuery(deleteNamedQueryRequest);分页列举查询执行ListQueryExecutionsExample与列举命名查询对称使用listQueryExecutionsPaginator遍历ListQueryExecutionsIterable逐页取出queryExecutionIds()并打印可用于审计账号内的历史查询执行记录。提交查询并取回结果StartQueryExample这是最完整的示例main 中串联了三个步骤String queryExecutionId submitAthenaQuery(athenaClient); waitForQueryToComplete(athenaClient, queryExecutionId); processResultRows(athenaClient, queryExecutionId);步骤 1 — 提交查询submitAthenaQuery组合三要素QueryExecutionContext.builder().database(...)指定查询所在数据库ResultConfiguration.builder().outputLocation(ATHENA_OUTPUT_BUCKET)指定结果写入的 S3 位置StartQueryExecutionRequest带上queryString后调用startQueryExecution返回queryExecutionId。步骤 2 — 轮询状态waitForQueryToComplete循环调用getQueryExecution读取queryExecution().status().state()FAILED→ 抛出 RuntimeException附带stateChangeReason()错误原因CANCELLED→ 抛出 RuntimeException 提示查询已取消SUCCEEDED→ 退出循环其他状态如QUEUED/RUNNING→Thread.sleep(SLEEP_AMOUNT_IN_MS)后重试。if (queryState.equals(QueryExecutionState.FAILED.toString())) { throw new RuntimeException(The Amazon Athena query failed to run with error message: getQueryExecutionResponse.queryExecution().status().stateChangeReason()); }步骤 3 — 拉取结果processResultRows使用getQueryResultsPaginator遍历GetQueryResultsIterable从每个响应的resultSet().resultSetMetadata().columnInfo()取列元数据、resultSet().rows()取行数据再通过Datum.varCharValue()逐列打印单元格值。源码注释也指出GetQueryResultsRequest不设置 Max Results 时会自动选择最大页大小。停止查询执行StopQueryExecutionExample该示例先submitAthenaQuery发起一条查询获得执行 ID再调用stopQueryExecution请求取消StopQueryExecutionRequest stopQueryExecutionRequest StopQueryExecutionRequest.builder() .queryExecutionId(sampleQueryExecutionId) .build(); athenaClient.stopQueryExecution(stopQueryExecutionRequest);停止后立即调用getQueryExecution复核状态若status().state()等于QueryExecutionState.CANCELLED则打印“The Amazon Athena query has been cancelled!”确认取消成功。这是一种“请求取消 状态确认”的健壮实现模式。JUnit 5 测试AmazonAthenaTest测试入口与属性文件测试文件 AmazonAthenaTest 位于src/test/java文件夹基于JUnit 5。你可以从 Java IDE如 IntelliJ直接运行也可以在命令行用 Maven 运行。测试运行时会打印每条用例的成功/失败信息例如“Test 3 passed”。警告这些 JUnit 测试会操作真实的 AWS 资源运行可能在你的账号上产生费用。测试类使用了 JUnit 5 的两个关键注解TestInstance(TestInstance.Lifecycle.PER_METHOD)每个测试方法独立实例配合BeforeAll中的静态athenaClient共享客户端TestMethodOrder(MethodOrderer.OrderAnnotation.class)Order(1..6)确保六个测试按依赖顺序执行。BeforeAll中通过getClassLoader().getResourceAsStream(config.properties)加载 classpath 下的配置文件用Properties读取nameQuery属性并赋值给静态字段。加载不到文件时会打印 Sorry, unable to find config.properties。config.properties 必须项运行测试前必须在 config.properties位于resources文件夹中定义测试所需的值只要有一项未定义JUnit 测试就会失败。本测试唯一必须项nameQuery—— 一个命名查询的名称。创建类测试用它作为待创建的查询名删除类测试也用它重建同名查询以获得待删 ID。仓库中的默认示例值如下测试前请按需调整注意保持nameQuery与你的 Athena 数据库/查询环境一致因为示例代码内部还会读取ExampleConstants的库名、查询语句与输出桶nameQuery sampleQuery命令行运行在项目根目录执行mvn test命令会触发maven-surefire-plugin:3.5.2运行测试输出形如[INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [INFO] Running AmazonAthenaTest Test 1 passed Test 2 passed ... Done! [INFO] Results: [INFO] [INFO] Tests run: 7, Failures: 0, Errors: 0, Skipped: 0 [INFO] [INFO] -------------------------------------------- [INFO] BUILD SUCCESS [INFO]-------------------------------------------- [INFO] Total time: 12.003 s [INFO] Finished at: 2020-02-10T14:25:08-05:00 [INFO] --------------------------------------------测试用例与示例类的对应关系从 AmazonAthenaTest 源码可以精确还原六个用例与主代码的调用链顺序测试方法调用链1testCreateNamedQueryExampleCreateNamedQueryExample.createNamedQuery(client, nameQuery)2testListNamedQueryExampleListNamedQueryExample.listNamedQueries(client)3testListQueryExecutionsExampleListQueryExecutionsExample.listQueryIds(client)4testDeleteNamedQueryExamplegetNamedQueryId取 ID 后 →deleteQueryName(client, id)5testStartQueryExamplesubmitAthenaQuery→waitForQueryToComplete→processResultRows6testStopQueryExecutionExamplesubmitAthenaQuery→stopAthenaQuery所有用例均以assertDoesNotThrow(...)包裹通过 SLF4J Logger 输出Test N passed因此日志中的“Test 3 passed”即为第三条用例列举查询执行成功的标志。测试失败排错若属性文件中的值不正确JUnit 测试不会通过Maven 构建会失败并输出如下错误实际包名以你项目的 artifactId 为准[INFO] [INFO] -------------------------------------- [INFO] BUILD FAILURE [INFO] -------------------------------------- [INFO] Total time: 19.038 s [INFO] Finished at: 2020-02-10T14:41:51-05:00 [INFO] --------------------------------------- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.22.1:test (default-test) on project S3J2Project: There are test failures. [ERROR];排错步骤核对 config.properties 中的nameQuery是否已定义且与测试预期一致核对 ExampleConstants 中的数据库名、表名查询语句与输出桶是否真实存在且可写确认凭证对应的 IAM 账号对 Athenaathena:StartQueryExecution、athena:GetQueryResults等和 S3写入结果桶具备足够权限修正后重新执行mvn test。进阶把示例扩展为生产用法从上述源码可以提炼出几个值得复用的工程模式统一异常处理所有示例以try-catch (AthenaException)包裹 API 调用并printStackTrace生产代码建议改为记录日志并抛出业务级异常轮询而非忙等StartQueryExample的SLEEP_AMOUNT_IN_MS 1000毫秒间隔配合状态机判断是 Athena 异步查询的标准等待模式可进一步结合重试退避策略优先使用分页器listNamedQueriesPaginator、listQueryExecutionsPaginator、getQueryResultsPaginator三个分页器消除了手写nextToken的样板代码测试即文档AmazonAthenaTest的Order顺序恰好覆盖了创建 → 列举 → 执行 → 删除/取消的完整生命周期可作为集成测试模板复用到其他 Athena 业务场景。小结javav2/example_code/athena提供了一套麻雀虽小、五脏俱全的 Athena Java V2 参考实现从客户端构建、命名查询增删查到查询提交、状态轮询、结果分页拉取与执行取消再到配套的 JUnit 5 集成测试完整覆盖了 Athena API 的高频使用面。按本文步骤配置好凭证、ExampleConstants与config.properties后即可用mvn test一键验证全部示例并以此为模板快速搭建你自己的 Athena 数据查询服务。赞分享示例工程教程后端【免费下载链接】aws-doc-sdk-examplesWelcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below.项目地址https://gitcode.com/gh_mirrors/aw/aws-doc-sdk-examples点击查看免费下载相关推荐基于 AWS SDK for Java 2.x 的 Amazon API Gateway 实战指南代码示例运行与 JUnit 集成测试基于 AWS SDK for Java 2.x 的 Amazon API Gateway 实战指南代码示例运行与 JUnit 集成测试 本文以 AWS Cod示例工程教程后端AWS SDK for Java 2.x 实战在 aws-doc-sdk-examples 中运行与测试 Amazon MQ 的 Java 示例AWS SDK for Java 2.x 实战在 aws doc sdk examples 中运行与测试 Amazon MQ 的 Java 示例 本文基于 j示例工程教程后端基于 AWS SDK for Java 2.x 的 Amazon GuardDuty 示例源码解析、运行与 JUnit 集成测试指南基于 AWS SDK for Java 2.x 的 Amazon GuardDuty 示例源码解析、运行与 JUnit 集成测试指南 本文以 aws doc示例工程教程后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

STM32CubeMX 6.14 配置全指南:下载、安装与固件库管理
STM32CubeMX 6.14 配置全指南:下载、安装与固件库管理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 4:35:18

ChatGPT-Shortcut(AiShort)自部署全解析:Vercel / Cloudflare / Docker / 离线内网版与自定义配置
ChatGPT-Shortcut(AiShort)自部署全解析:Vercel / Cloudflare / Docker / 离线内网版与自定义配置

AI 应用提示工程人工智能前端 【免费下载链接】ChatGPT-Shortcut Stop writing prompts from scratch — a searchable prompt library for ChatGPT, Claude, Gemini and Cursor Русский 한국어 العربية हिन्दी ไทย | 别再从头写提示词&… · 2026/9/27 4:35:18

班级和企业怎样组织在线刷题?练题簿小程序的 4 个功能,安排任务与考试
班级和企业怎样组织在线刷题?练题簿小程序的 4 个功能,安排任务与考试

老师想给学生布置一个课后小任务,企业想让员工每天用五分钟巩固岗位知识,还要跟进谁完成了、谁参加了考试、成绩怎么样。 练题簿微小程序支持基于题库发布学习任务、组织线上和线下考试,并查看成员进度和成绩。学生或员工在手机上查看安排&am… · 2026/9/27 4:35:12

php做教育网站5个注意事项避开90%踩坑
php做教育网站5个注意事项避开90%踩坑

php做教育网站5个注意事项避开90%踩坑 模板网站太丑不够用,这几乎是所有做教育行业的人最初的痛感。你看着那些千篇一律的蓝色调、死板的表格布局,心里清楚这东西根本留不住用户,更别提转化了。这时候很多人想自己动手,或者找懂技术的团队用… · 2026/9/27 5:12:05

GSM信令流程实战导图:协议栈、接口与抓包排错全解析
GSM信令流程实战导图:协议栈、接口与抓包排错全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:11:34

2026最新wordpress字不能显示?5步搞定字符编码痛点
2026最新wordpress字不能显示?5步搞定字符编码痛点

2026最新wordpress字不能显示?5步搞定字符编码痛点 很多小白刚接触WordPress,最崩溃的瞬间不是装不上,而是页面里全是“乱码”或者某些汉字死活出不来。自己不会代码想做网站,卡在“wordpress字不能”正常显示的环节,真… · 2026/9/27 5:11:16

学工管理系统:高校学生工作数字化转型的核心引擎
学工管理系统:高校学生工作数字化转型的核心引擎

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多… · 2026/9/27 5:11:10

DeepSeek安装全攻略:官方客户端、API接入与本地部署详解
DeepSeek安装全攻略:官方客户端、API接入与本地部署详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/27 5:11:04

网站开发专家揭秘:避开性能优化坑,3步搞定透明报价
网站开发专家揭秘:避开性能优化坑,3步搞定透明报价

网站开发专家揭秘:避开性能优化坑,3步搞定透明报价 网站做好了没人访问,多半不是内容不行,而是底层 性能优化 没做到位。很多老板花了大几万做站,上线后加载慢如蜗牛,搜索引擎直接判死刑。 找 网站开发专家… · 2026/9/27 5:10:57

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码