Athena 是 Amazon Web Services 中的一项服务,可用于在 S3 存储桶中进行 SQL 查询。我们可以通过在 Athena 中建立外部表来查询存储在 S3 存储桶中的非结构化 JSON 数据。
以下是一个简单的 Python 示例,演示如何使用 AWS SDK for Python(boto3)和 Athena 查询非结构化 JSON:
import boto3
import json
# Create Athena client
client = boto3.client('athena')
# Set Athena configuration
database = 'mydatabase'
table = 'mytable'
# Set query
query = f"SELECT * FROM {table}"
# Start query execution
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': database
},
ResultConfiguration={
'OutputLocation': 's3://my-bucket/my-folder/'
}
)
# Get query execution ID
query_execution_id = response['QueryExecutionId']
# Wait for the query to complete
while True:
query_execution = client.get_query_execution(QueryExecutionId=query_execution_id)
status = query_execution['QueryExecution']['Status']['State']
if status in ['SUCCEEDED', 'FAILED', 'CANCELLED']:
break
result_location = query_execution['QueryExecution']['ResultConfiguration']['OutputLocation']
# Get query results
s3_client = boto3.client('s3')
result_key = result_location.replace('s3://my-bucket/', '')
response = s3_client.get_object(Bucket='my-bucket', Key=result_key)
results = response['Body'].read().decode('utf-8')
results = json.loads(results)
print(results)
此示例将 mytable 中的所有数据选择出来,并将结果存储在 S3 存储桶 my-bucket 中的 my-folder 文件夹中。然后,它会等待查询完成,并获取结果并将其解析为 Python 对象,以便在命令行中打印出来。
请确保在执行此示例之前,您已经设置了 AWS 认证。