2014-05-20 2 views
1

저는 큰 쿼리를 큰 쿼리에로드하는 데 어려움을 겪고 있습니다. Google의 문서에서는 insertAll 메서드가 제대로 작동하는 것으로 보이지만 JSON에서 약 100,000 개 이상의 데이터를 보내려고하면 413 개의 Entity too large 오류가 발생합니다. Per Google's docs, I should be able to send up to 1TB of uncompressed data in JSON. 뭐라 구요? 이전 페이지의 예제에서는 insertAll을 사용하는 대신 직접 수동으로 요청 본문을 작성했습니다.이 경우에는 못 생기고 오류가 발생하기 쉽습니다. 또한 어떤 경우에 데이터가 있어야하는지 잘 모르겠습니다.Python에서 Google Bigquery로 많은 데이터로드

그렇다면 Bigquery에 많은 양의 데이터를로드하는 깨끗하고 올바른 방법은 무엇입니까? 데이터가있는 예가 좋습니다. 가능하다면 직접 요청 본문을 작성하지 않을 것입니다.

+0

원본 데이터의 형식은 무엇입니까? – Rohit

+0

@Rohit 중요하지 않습니다. 그냥 데이터를 bigquery에 삽입하고 있습니다. 어떤 데이터라도 삽입하는 것은 괜찮을 것입니다. – Eli

답변

5

BQ로 데이터를 스트리밍하는 경우 anything above 10k rows/sec은 영업 담당자와 대화해야합니다.

큰 청크를 BQ로 직접 보내려면 send it via POST을 사용할 수 있습니다. 클라이언트 라이브러리를 사용하는 경우 업로드를 다시 시작할 수 있도록 처리해야합니다. 이렇게하려면 tabledata.insertAll() 대신 jobs.insert()으로 전화를 걸어 load job에 대한 설명을 제공해야합니다. 실제로 파이썬 클라이언트를 사용하여 바이트를 푸시 (push)하려면 MediaFileUpload 또는 MediaInMemoryUpload을 작성하고 media_body 매개 변수로 전달하십시오.

다른 옵션은 Google Cloud Storage 및 load it from there에서 데이터를 스테이지하는 것입니다.

+0

데이터를 스트리밍하고 싶지 않습니다. 내가 이상적으로 몇 덩어리로 그것을로드합니다. Cloud Storage를 사용하지 않고이 작업을 수행 할 수있는 방법이 있습니까? 우리 회사는 현재 Cloud Storage를 아무 것도 사용하지 않고 있습니다. 처음에는 거기에로드하는 것이 매우 불필요한 단계입니다. – Eli

+0

물론 - 'POST'를 통해 직접 보낼 수 있습니다. 그래도 파일이 이미 어딘가에 있다면,'gsutil'은 이것을 매우 쉽게 만들어줍니다 (그들은 당신의 작업없이 병렬 업로드 같은 것을 처리합니다). –

+0

클라이언트 라이브러리가 있습니다. 저는 파이썬을 사용하고 있습니다 만, 제가 알 수있는 한, 이것을하기위한 유일한 방법은 insertAll입니다. https://developers.google.com/resources/api-libraries/documentation/bigquery/v2/python/latest/을보고 있습니다. 이것은 초기 질문의 출처입니다. – Eli

1

here은 재개 가능한 업로드를 사용하여 CSV 파일을 업로드합니다. 사용되는 파일은 작지만 강력한 미디어 업로드 프로토콜을 사용하기 때문에 거의 모든 크기의 업로드에 사용할 수 있습니다. json을 원하는 것처럼 들리 겠지만, 이는 json에 대한 코드를 약간 조정해야한다는 것을 의미합니다 (json의 예제는 동일한 디렉토리의 load_json.py 예제에 있음). 파일 대신 업로드 할 스트림이있는 경우이 예제에 사용 된 MediaFileUpload 대신 MediaInMemoryUpload을 사용할 수 있습니다.

BTW ... Craig의 대답은 정확합니다. 샘플 코드에 대한 링크가있는 것으로 생각했습니다.

+0

예제가 이동 된 것처럼 보입니다. 답변을 업데이트 할 수 있습니까? –

+0

미디어 링크가 모두 끊어졌으며 MediaInMemoryUpload는 더 이상 사용되지 않습니다. – Praxiteles

관련 문제