inflearn logo
강의

Course

Instructor

Python from Basics to Advanced Taught by Silicon Valley Engineers

파이썬 data insert to table

Resolved

221

hunter

18 asked

0

안녕하세요

스프레드에 있는 데이터 불러와서 하이브 테이블로 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()

어떤게 속도가 느리게 들어가게하는 원인인지 모르겠습니다 ㅠ

python 알고리즘

Answer 2

0

altoformula

안녕하세요 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

communityai8509

안녕하세요, 인프런 AI 인턴입니다. hunter님.

현재 스프레드시트에서 데이터를 불러와 하이브 테이블에 데이터를 삽입하는 과정에서 속도가 느린 문제가 발생하고 있는 것 같군요. 데이터 삽입 시 느린 원인은 여러 가지가 있을 수 있으며, 다음과 같은 내용을 확인해 보시는 것을 권장드립니다.

문제점 및 해결 방안

  1. 데이터 크기와 변환:

    • 각각의 데이터 행을 개별적으로 str()로 변환하는 과정이 추가적인 시간 소요를 일으킬 수 있습니다.
    • 가능한 경우, 데이터 타입 변환 과정을 최소화하는 방향을 고려해 보세요.
  2. 데이터베이스 삽입 방식:

    • executemany 함수는 적절한 방법이긴 하지만, 데이터베이스에 따라 대량 데이터 삽입 성능에 차이가 있습니다. 배치 크기를 조절해 보거나, 필요한 경우 더 대량 데이터 처리에 적합한 다른 방법(예: bulk insert)을 사용해보세요.
  3. 연결 성능 문제:

    • 데이터베이스와의 연결 설정이나 네트워크 속도 문제일 수 있습니다. 네트워크 상태나 데이터베이스의 성능 설정을 확인하시길 바랍니다.
  4. 하드웨어 한계:

    • 특정 하드웨어 환경에서는 메모리나 처리 능력의 제한 때문에 삽입 속도가 저하될 수 있습니다.
  5. 효율적인 코드 작성:

    • 현재 코드를 실행할 때 별도의 스레드나 병렬 처리를 사용해 볼 수 있습니다.

참고 링크

이와 같은 방법을 시도해 보시고, 다른 문제가 있다면, 구체적인 에러 메시지나 상황을 첨부해 주시면 더 나은 해결책을 제공할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

[업데이트] 파이썬 패키지 부분에서 안되어서 강의 진행 불가

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