如何在EC2实例中从AWS Athena获取数据?连接对象相关疑问
在EC2实例中通过Athena查询AWS Data Catalog表数据的方法
你可以通过两种常用方式在EC2实例中使用Athena查询数据:
方式一:使用AWS CLI
- 确保EC2实例已配置正确的IAM权限(你已有Athena访问权限,可通过实例角色或本地AWS凭证配置)
- 安装AWS CLI(若未安装)
- 提交查询并获取结果:
执行后会返回# 提交查询,替换占位符为你的数据库、表和结果存储S3桶 aws athena start-query-execution \ --query-string "SELECT * FROM your_database.your_table LIMIT 10;" \ --result-configuration "OutputLocation=s3://your-result-bucket/athena-results/" \ --query-execution-context "Database=your_database"QueryExecutionId,用它查询状态:
当状态变为aws athena get-query-execution --query-execution-id <你的查询ID>SUCCEEDED后,从S3下载结果文件:aws s3 cp s3://your-result-bucket/athena-results/<你的查询ID>.csv ./local-result.csv
方式二:使用Python Boto3 SDK
- 在EC2实例中安装boto3:
pip install boto3 - 编写查询脚本(示例):
import boto3 import time # 初始化客户端 athena_client = boto3.client('athena') s3_client = boto3.client('s3') # 配置查询参数 DB_NAME = "your_database" TABLE_NAME = "your_table" RESULT_S3_PATH = "s3://your-result-bucket/athena-results/" LOCAL_OUTPUT_PATH = "./query-result.csv" # 提交查询 query_response = athena_client.start_query_execution( QueryString=f"SELECT * FROM {DB_NAME}.{TABLE_NAME} LIMIT 10;", QueryExecutionContext={"Database": DB_NAME}, ResultConfiguration={"OutputLocation": RESULT_S3_PATH} ) query_id = query_response["QueryExecutionId"] # 等待查询完成 while True: query_status = athena_client.get_query_execution(QueryExecutionId=query_id)[ "QueryExecution"]["Status"]["State"] if query_status in ["SUCCEEDED", "FAILED", "CANCELLED"]: break time.sleep(2) # 下载结果 if query_status == "SUCCEEDED": result_file_key = f"{query_id}.csv" s3_client.download_file( RESULT_S3_PATH.split("//")[1].split("/")[0], f"athena-results/{result_file_key}", LOCAL_OUTPUT_PATH )
选择Athena还是直接连接原始数据源?
Athena并非单纯的编辑器,它是基于Presto的Serverless交互式查询服务,帮你解析、查询多种数据源的数据。两种方案的适用场景如下:
优先选择Athena的情况
- 你不知道原始数据源类型/位置,或没有原始数据源的直接访问权限
- 原始数据源是S3这类对象存储,直接查询需要自行处理数据格式(如Parquet、ORC),Athena已封装好解析逻辑
- 需要用统一的SQL语法查询多种异构数据源(Athena支持S3、Glue、RDS等)
考虑直接连接原始数据源的情况
- 你拥有原始数据源的访问权限,且需要更低延迟的查询(Athena针对大查询或冷启动可能有延迟)
- 需要对数据执行写入、实时操作等Athena不支持的功能
- 原始数据源是关系型数据库(如RDS),直接用JDBC/ODBC连接能获得更灵活的操作能力
额外技巧:查看表的数据源信息
如果你想了解表的原始数据源细节,可通过AWS CLI查询Glue Data Catalog:
aws glue get-table --database-name your_database --name your_table
返回结果中的StorageDescriptor字段会包含数据存储位置(如S3路径)、数据格式等信息。
内容的提问来源于stack exchange,提问作者Lakshay Dulani
相关产品推荐
相关产品推荐

