안녕하세요, Everly입니다.
데이터 분석 업무를 하다 보면 쿼리 결과를 파이썬에 불러와서 사용하는 경우가 많이 생기는데요.
SQL 상에서 쿼리를 날려 결과를 csv 형태로 뽑아 다시 파이썬에서 불러오는 것보다,
처음부터 파이썬에서 쿼리를 날릴 수 있다면 훨씬 수월하겠죠? 오늘은 그 방법에 대해 포스팅합니다.
How to connect python and Redshift
먼저 파이썬 상에서 AWS Redshift와 연결하기 위해 아나콘다 프롬프트에 다음을 입력해 설치해줍니다.
pip install redshift_connector
다음으로는 Jupyter Notebook을 열어 AWS 계정 정보를 인증해주면 되는데요,
이를 위해선 여러분의 계정의 host, database, user, password 정보를 입력해야 합니다.
import redshift_connector
conn = redshift_connector.connect(
host='examplecluster.abc123xyz789.us-west-1.redshift.amazonaws.com',
database='dev',
user='awsuser',
password='my_password'
)
위의 코드는 aws에서 제공하고 있는 예제 코드입니다.
여러분의 계정에 해당하는 4개의 정보를 따옴표 ' ' 안에 넣어주시면 됩니다. (위는 그냥 예시입니다!)
이제 cursor 메서드로 cursor object를 생성하고, 쿼리를 날려봅시다.
쿼리는 cursor.execute 메서드 안에 따옴표 처리(주석 처리)를 하여 날려주면 됩니다.
예를 들어, 저는 주간 매출 랭킹 10위 안에 드는 인기 상품만 뽑아보고자 합니다. 상품 테이블은 product에, 매출정보 테이블은 sale_table에 있다고 해봅시다. (가상의 테이블입니다)
그럼 상품과 매출정보 테이블을 연결하고, 매출액 순으로 상품을 정렬한 후 10위까지만 뽑아보면 되겠죠? 예시로 쿼리를 만들어보겠습니다.
# Create a Cursor object
cursor: redshift_connector.Cursor = conn.cursor()
# Query a table using the Cursor
cursor.execute("""
with everly as (
a.product_code, a.product_name, a.product_price,
b.sales_amt, b.datetime
from product a
join sale_table b
where a.prodcut_code = b.prodcut_code
and b.datetime between (current_date - '7 day'::interval and current_date)
)
select product_code, product_name,
product_price, sum(sales_amt) as sum_sales_amt
from everly
group by 1, 2, 3
order by 4 desc
limit 10;
""")
conn.commit()
다시 한번 강조하지만 쿼리는 꼭 따옴표 안에 써주셔야 합니다.
이렇게 쿼리를 날리고, commit 메서드를 실행하시면 끝입니다.
그럼 결과를 확인해볼까요?
저는 데이터프레임 형태로 보고 싶으므로 판다스(pandas)를 사용하여 위 결과를 dataframe으로 출력해보겠습니다.
다음 코드를 실행합니다.
import pandas as pd
df: pd.DataFrame = cursor.fetch_dataframe()
위 코드를 실행하면 쿼리 결과가 파이썬 상에 데이터프레임으로 출력될 것입니다.
도움이 되었길 바라며, 궁금한 점이 있으시면 댓글 남겨주세요 :)
'Skillset > SQL' 카테고리의 다른 글
[Redshift] DBeaver에서 프로시저 만들기 (0) | 2024.02.29 |
---|---|
파이썬에서 SQL parameter 설정하기 (Python SQL formatter) (2) | 2022.09.20 |
[MySQL] 문자열에서 0 제거하기 (REPLACE) (0) | 2022.08.12 |
SQL로 깔끔한 문장 출력하기 (CONCAT 활용) (0) | 2022.08.10 |
SQL 중첩된 CASE WHEN 구문 활용: 삼각형의 타입 구분하기 (0) | 2022.08.09 |