limit, offset을 알아보자.
LIMIT는 몇 개 불러올건지, OFFSET은 어디부터 불러올건지
-- 처음부터 시작해서 100개 Row 불러오기
SELECT * FROM table LIMIT 100;
SELECT * FROM table LIMIT 100 OFFSET 0;
-- 101번째부터 시작해서 5개 ROW 반환
SELECT * FROM table LIMIT 5 OFFSET 100;
---참고---
Python 코드에서는 이를 f-string + for loop 통해 활용 가능 (Data chunking)
# Python
import awswrangler as wr
import boto3
def get_df(query):
# Anyway, connect to AWS Database through boto3 or awswrangler.
db_con = wr.postgresql.connect("postgreSQL") # 자세한 것은 또 다른 포스팅 참고
df = db.read_sql_query(query, db_con)
return df
total_count = 1000
chunk_size = 99
iteration = int(total_count/chunk_size) if (total_count % chunk_size) == 0 else int(total_count/chunk_size) +1
for iter in range(iteration):
query = f'''
SELECT * FROM table LIMIT {chunk_size} OFFSET {iter*chunk_size};
'''
print(query)
df = get_df(query=query)
# do something
'''
output
SELECT * FROM table LIMIT 99 OFFSET 0;
SELECT * FROM table LIMIT 99 OFFSET 99;
SELECT * FROM table LIMIT 99 OFFSET 198;
SELECT * FROM table LIMIT 99 OFFSET 297;
SELECT * FROM table LIMIT 99 OFFSET 396;
SELECT * FROM table LIMIT 99 OFFSET 495;
SELECT * FROM table LIMIT 99 OFFSET 594;
SELECT * FROM table LIMIT 99 OFFSET 693;
SELECT * FROM table LIMIT 99 OFFSET 792;
SELECT * FROM table LIMIT 99 OFFSET 891;
SELECT * FROM table LIMIT 99 OFFSET 990;
마지막은 1000을 초과하더라도 DB에 있는 만큼만 불러오게 됨
PostgreSQL에서 table의 count가 1000이라고 가정 했을 때
마지막 query를 실행한다면 991부터 1000까지의 데이터만 불러옴
'''
댓글