파이썬 data insert to table
안녕하세요
스프레드에 있는 데이터 불러와서 하이브 테이블로 data insert 해주는 구문 작성했는데요ㅠ
컬럼 9개에 데이터 로우는 5,000개 정도인데 1시간이 넘도록 반도 안들어가고 너무 느립니다 ㅠ
뭔가 문제가 있는 것 같은데 제가 짠 코드에서 잘못된 부분이 있을까요?
컬럼 6개에 데이터 로우 500개로 테스트했을땐 1초만에 모두 들어갔는데 컬럼 개수 문제인건지.. 모르겠습니다
# Get Raw List
backsheet = gc.open_by_url("시트 링크 입력")
list1 = backsheet.worksheet('py_hc').get_all_values()
list2 = pd.DataFrame(list1[1:], columns=list1[0])
data = []
for i in range(len(df_hc_list)):
value = df_hc_list.loc[i]
values = [
str(value['a']),
str(value['b']),
str(value['v']),
str(value['d']),
str(value['e']),
str(value['f']),
str(value['g']),
str(value['h']),
str(value['i'])
]
data.append(values)
query = """insert into table values (%s, %s, %s, %s, %s, %s, %s, %s, %s)"""
cursor.executemany(query, data)
connection.commit()
cursor.close()
connection.close()어떤게 속도가 느리게 들어가게하는 원인인지 모르겠습니다 ㅠ
Answer 2
0
안녕하세요 hunter님,
현재 코드에서는 executemany()를 사용해 Hive 테이블에 한 줄씩 데이터를 삽입하고 있습니다. 한 줄씩 삽입하는 방식(INSERT INTO VALUES)은 비효율적이며, 파일 단위로 한 번에 적재하는 것이 훨씬 빠릅니다. executemany() 대신 데이터를 CSV 또는 Parquet 파일로 저장한 후, Hive에 로드하는 방식이 더 적절합니다. 그리고 Google Sheets 데이터를 CSV로 변환하여 로드하는 것이 훨씬 빠를 수 있습니다 - get_all_values()는 전체 데이터를 한 번에 가져오므로 데이터가 많을 경우 속도가 느려집니다.
흠... 마지막으로 df.loc[i]를 사용한 반복문은 매우 비효율적이며, 성능을 크게 저하시킵니다. itertuples()을 사용하면 속도가 훨씬 빨라집니다.
data = [
(row.a, row.b, row.v, row.d, row.e, row.f, row.g, row.h, row.i)
for row in df_hc_list.itertuples(index=False)
]근데, 제가 하이브를 여기서 가르쳐드렸나요? 기억이...
0
안녕하세요, 인프런 AI 인턴입니다. hunter님.
현재 스프레드시트에서 데이터를 불러와 하이브 테이블에 데이터를 삽입하는 과정에서 속도가 느린 문제가 발생하고 있는 것 같군요. 데이터 삽입 시 느린 원인은 여러 가지가 있을 수 있으며, 다음과 같은 내용을 확인해 보시는 것을 권장드립니다.
문제점 및 해결 방안
데이터 크기와 변환:
- 각각의 데이터 행을 개별적으로
str()로 변환하는 과정이 추가적인 시간 소요를 일으킬 수 있습니다.
- 가능한 경우, 데이터 타입 변환 과정을 최소화하는 방향을 고려해 보세요.
- 각각의 데이터 행을 개별적으로
데이터베이스 삽입 방식:
executemany함수는 적절한 방법이긴 하지만, 데이터베이스에 따라 대량 데이터 삽입 성능에 차이가 있습니다. 배치 크기를 조절해 보거나, 필요한 경우 더 대량 데이터 처리에 적합한 다른 방법(예: bulk insert)을 사용해보세요.
연결 성능 문제:
- 데이터베이스와의 연결 설정이나 네트워크 속도 문제일 수 있습니다. 네트워크 상태나 데이터베이스의 성능 설정을 확인하시길 바랍니다.
- 데이터베이스와의 연결 설정이나 네트워크 속도 문제일 수 있습니다. 네트워크 상태나 데이터베이스의 성능 설정을 확인하시길 바랍니다.
하드웨어 한계:
- 특정 하드웨어 환경에서는 메모리나 처리 능력의 제한 때문에 삽입 속도가 저하될 수 있습니다.
- 특정 하드웨어 환경에서는 메모리나 처리 능력의 제한 때문에 삽입 속도가 저하될 수 있습니다.
효율적인 코드 작성:
- 현재 코드를 실행할 때 별도의 스레드나 병렬 처리를 사용해 볼 수 있습니다.
- 현재 코드를 실행할 때 별도의 스레드나 병렬 처리를 사용해 볼 수 있습니다.
참고 링크
- 관련하여 비슷한 성격의 대용량 데이터 처리 및 최적화 방법을 다루는 질문들을 참고하셔도 좋습니다.
이와 같은 방법을 시도해 보시고, 다른 문제가 있다면, 구체적인 에러 메시지나 상황을 첨부해 주시면 더 나은 해결책을 제공할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
[업데이트] 파이썬 패키지 부분에서 안되어서 강의 진행 불가
2
59
3
html 읽기 오류
1
89
2
DataFrame groupby 사용관련 질문
1
90
2
pylint shell 사용법
0
71
2
자막오류 수정가능한가요?
0
78
1
복합 조건절 관련 궁금증
0
78
2
49.행맨 프로그램 - 재시도 횟수 관련.
1
76
1
64. 파이썬 입문자가 쉽게 빠지기 쉬운 몇가지 에러(혹은 로직)에 대해 알아보기
0
103
2
Replit UI가 업데이트 되서 강의 진행이 멈췄어요
2
178
3
Replit을 사용해보려고 하는데 영상처럼 진행이 안되네요
3
404
2
실무에서의 제네레이터 함수 사용에 관한 질문입니다.
0
64
2
영상이 소리만 나오고 영상은 안보입니다.
0
85
2
pandas 오류 질문
0
125
2
상속 질문
1
132
2
total을 float으로 바꾸신 이유
0
200
2
섹션2 ["환경 vs. 설정 vs. 구성"] 강의 자막 문의
0
141
1
파이썬 Class Method 질문
0
154
2
timeit 쓸 때는 만들었던 함수를 재사용 할 수는 없는지?
0
131
2
__repr__ 와 __str__ 차이점?
0
204
2
class method vs static method
0
270
2
Type hint 문법의 Type Checking이 강제성이 있는지?
0
164
2
클래스 접근자 강의 복습부분 0:47에 오타가 있네요
0
104
2
수업 때 쓰셨던 txt file 공유 해주시면 좋겠습니다
1
177
1
shallow copy 질문 있습니다.
1
250
3

