inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Từ cơ bản đến nâng cao Python do kỹ sư Silicon Valley giảng dạy

파이썬 data insert to table

Đã giải quyết

221

hunter

18 câu hỏi đã được viết

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 알고리즘

Câu trả lời 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

90

2

DataFrame groupby 사용관련 질문

1

91

2

pylint shell 사용법

0

71

2

자막오류 수정가능한가요?

0

79

1

복합 조건절 관련 궁금증

0

79

2

49.행맨 프로그램 - 재시도 횟수 관련.

1

76

1

64. 파이썬 입문자가 쉽게 빠지기 쉬운 몇가지 에러(혹은 로직)에 대해 알아보기

0

103

2

Replit UI가 업데이트 되서 강의 진행이 멈췄어요

2

178

3

Replit을 사용해보려고 하는데 영상처럼 진행이 안되네요

3

405

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