2016-08-16 1 views
6

커다란 csv 파일과 엑셀 파일을 읽었으며 필요한 필드와 유형에 따라 필요한 create create table 스크립트를 만듭니다. 그런 다음 생성 된 테이블에 데이터를 삽입하십시오.bigquery-python 라이브러리를 통해 BigQuery에 많은 양의 데이터를 삽입하십시오.

나는 this을 읽고 많은 양의 데이터를 tabledata.insertAll() 대신 jobs.insert()으로 보내야한다는 것을 알았습니다.

작은 크기의 파일은 큰 파일이 아닙니다.

result = client.push_rows(datasetname,table_name,insertObject) # insertObject is a list of dictionaries 

라이브러리의 push_rows을 사용하면이 오류가 발생합니다.

[Errno 10054] An existing connection was forcibly closed by the remote host 

우분투에서. 내가 BigQuery-Python 코드를 갔을 때

[Errno 32] Broken pipe 

는 그래서 table_data.insertAll()을 사용합니다.

어떻게이 라이브러리로이 작업을 수행 할 수 있습니까? Google 저장 용량을 통해 업로드 할 수는 있지만 직접 업로드 방법이 필요합니다.

답변

2

대용량 파일을 처리 할 때 스트리밍을 사용하지는 않지만 일괄 처리로드 : 스트리밍은 초당 최대 100,000 개의 행을 쉽게 처리합니다. 스트리밍에는 좋지만 큰 파일은로드하지 않는 것이 좋습니다.

링크 된 샘플 코드는 스트리밍 대신 일괄 처리를 수행하므로 다른 문제가 있습니다.이 샘플 코드는이 모든 데이터를 BigQuery로 곧바로로드하려고 시도하지만 POST 부분을 통한 업로드가 실패합니다. . gsutil은 일반 POST보다 더 강력한 업로드 알고리즘을 제공합니다.

해결책 : POST를 통해 대량의 데이터를로드하는 대신 먼저 Google 클라우드 저장소에서 데이터를 스테이지 한 다음 BigQuery에 GCS의 파일을 읽도록 지시합니다.

BigQuery script failing for large file

+0

은 그냥 OP에 대한 링크를 추가 했 참조! –

+1

oops, 재귀 수정 중! –

+0

@FelipeHoffa gsutil 내부에서 파이썬 코드를 사용할 수 있습니까? 직접 csv 파일 경로를 지정하고 업로드 할 때 일부 열 유형 문제가있었습니다. 그래서 나는 csv를 읽고 그에 따라 필드를 캐스팅 할 수 있습니다. 내가 그들을 캐스팅 한 후에 표에 객체를 삽입하는 방법이 없다 (사전 목록 일 수 있음)? –

관련 문제