개발
AWS Athena를 통해 S3 parquet 데이터 조회 (C#)
yun000
2025. 3. 21. 16:36
목적
대용량 데이터를 S3에 parquet 파일로 저장 후
Athena를 활용하여 C#프로그램에서 데이터를 조회해 보자
선행 과정
S3에 parquet 파일 저장후 Athena로 데이터 조회 해보기
https://yun000.tistory.com/295
S3에 Parquet 파일 올리고 Athena로 조회
1️⃣ AWS S3 bucket 생성AWS console의 S3에 접속 bucket 생성 bucket 이름과 지역 설정 후 하단의 create bucket 2️⃣ IAM 계정 만들기현재 Root계정이라면 IAM계정을 먼저 만들자Root 사용자는 AWS 계정 전체를
yun000.tistory.com
코드
NuGet 패키지 설치
dotnet add package AWSSDK.Athena
C# 코드
using System;
using System.Threading.Tasks;
using Amazon.Athena;
using Amazon.Athena.Model;
class Program
{
static async Task Main(string[] args)
{
await AthenaQueryExample.RunQuery();
}
}
class AthenaQueryExample
{
private static string database = "Athena데이터베이스이름";
private static string outputS3 = "s3://버켓명/경로/"; // 쿼리 결과 저장 위치. S3에 해당 폴더, 경로가 있는지 확인할 것것
private static string query = "SELECT * FROM 테이블명";//조회할 쿼리문
public static async Task RunQuery()
{
var client = new AmazonAthenaClient();
var request = new StartQueryExecutionRequest
{
QueryString = query,
QueryExecutionContext = new QueryExecutionContext { Database = database },
ResultConfiguration = new ResultConfiguration { OutputLocation = outputS3 }
};
var response = await client.StartQueryExecutionAsync(request);
string queryExecutionId = response.QueryExecutionId;
// 쿼리 상태 확인
GetQueryExecutionResponse result;
do
{
await Task.Delay(1000);
result = await client.GetQueryExecutionAsync(new GetQueryExecutionRequest
{
QueryExecutionId = queryExecutionId
});
} while (result.QueryExecution.Status.State == "RUNNING");
if (result.QueryExecution.Status.State == "SUCCEEDED")
{
Console.WriteLine("쿼리 성공!!!!!!!!!");
var resultsResponse = await client.GetQueryResultsAsync(new GetQueryResultsRequest
{
QueryExecutionId = queryExecutionId
});
foreach (var row in resultsResponse.ResultSet.Rows)
{
foreach (var data in row.Data)
{
Console.Write($"{data.VarCharValue}\t");
}
Console.WriteLine();
}
}
else
{
Console.WriteLine($"쿼리 실패... = {result.QueryExecution.Status.State} - {result.QueryExecution.Status.StateChangeReason}");
}
}
}