0

BigQuery에서 스프레드 시트로 가져 오는 과정을 자동화하기 위해 Google 앱 스크립트를 사용하고 있습니다. 그러나 응용 프로그램 스크립트는이 내 코드의 샘플입니다 나를App 스크립트 : bigquery에 너무 큰 응답

Error 413: Message: response too large 

에게 반환하고, 오류가

1 var projectId = projectid; 
2 var request = { 
3 query: 'My Query' 
4 }; 
5 var queryResults = BigQuery.Jobs.query(request, projectId); 

몇 가지 가능한 해결책은 무엇인가 라인 (5)에? BigQuery 비용을 증가시키지 않는 솔루션이 있습니까?

PS : 결과는 약 16MB의 데이터입니다. 즉 약 300,000 행.

검색어 : 여기

SELECT 
    ORDER.addedon AS date, 
    ORDER.display_order_id AS order_id, 
    OrderSkuDetails.pid AS pid, 
    OrderSkuDetails.price AS price, 
    OrderSkuDetails.saleprice AS saleprice, 
    OrderSkuDetails.subtotal AS subtotal, 
    OrderSkuDetails.shippingcharge AS shippingcharge, 
    OrderSkuDetails.codcharge AS codcharge, 
    User.email AS email, 
    ORDER.order_id AS payment_id, 
    ORDER.payment_mode AS payment_mode, 
    ORDER.source AS source, 
    ORDER.user_id AS user_id, 
    Payments.payment_status AS payment_status, 
    User.profileJson.text, 
    OrderStatus.sub_status_id AS sub_status_id, 
    NProduct.featured AS featured 
FROM 
    FLATTEN([Mixpanel_Import.Order],payment_mode) AS ORDER 
INNER JOIN 
    [Mixpanel_Import.OrderSkuDetails] AS OrderSkuDetails 
ON 
    ORDER.order_id=OrderSkuDetails.order_id 
INNER JOIN 
    [Mixpanel_Import.OrderStatus] AS OrderStatus 
ON 
    ORDER.order_id=OrderStatus.order_id 
INNER JOIN 
    [Mixpanel_Import.User] AS User 
ON 
    ORDER.user_id=User.__key__.id 
INNER JOIN 
    [Mixpanel_Import.Payments] AS Payments 
ON 
    ORDER.order_id=Payments.order_id 
INNER JOIN 
    [Mixpanel_Import.NProduct] AS NProduct 
ON 
    OrderSkuDetails.pid=NProduct.pid 

코드

function bigQuery(tableName) { 
    var projectId = 'project'; 
    var request = { 
    query: The Query 
    }; 
    var queryResults = BigQuery.Jobs.query(request, projectId); //Error on this line 
    var jobId = queryResults.jobReference.jobId; 
    Logger.log(jobId); 
    var sleepTimeMs = 500; 
    while (!queryResults.jobComplete) { 
    Utilities.sleep(sleepTimeMs); 
    sleepTimeMs *= 2; 
    queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId); 
    } 
    while (queryResults.pageToken) { 
    queryResults.concat(BigQuery.Jobs.getQueryResults(projectId, jobId, {pageToken: queryResults.pageToken})); 
    } 
    return queryResults; 
} 
+0

아마 와이어 위로 300K 행을 가져 와서 솔루션에 표시하려고하면 안됩니다. 웹 프론트 엔드를 구축하고 있다고 가정하고 있습니까? –

+0

@polleyg 기본적으로 데이터 분석을위한 것입니다. 너무 많은 데이터를 가져와야 할 것입니다.이를 수행 할 수있는 방법이 있습니까 –

+0

결과를 10000으로 제한하더라도 오류는 동일하게 유지됩니다. –

답변

1

작업 구성에 true 설정 값 allowLargeResults을 추가하는 시도하십시오입니다.

큰 결과가 결과 세트가 작은 경우에도 실행하는 데 시간이 더 걸릴 반환 및 추가 제한 될 수 있습니다 그 Returning large query results

쿼리에서 설명하고있는 바와 같이 :

  • 대상을 지정해야합니다 표.
  • 최상위 레벨 ORDER BY, TOP 또는 LIMIT 절을 지정할 수 없습니다. 이렇게하면 쿼리 출력을 더 이상 병렬로 계산할 수 없기 때문에 allowLargeResults을 사용하는 이점이 없어집니다.
  • PARTITION BY 절과 함께 사용하는 경우에만 창 함수가 큰 쿼리 결과를 반환 할 수 있습니다. - HTTP Error 413 Request Entity Too Large

역시 도움이 될 다음에 주어진 문제를 해결 얻을 수 있습니다 솔루션과 아이디어를 제안

그 외에도 BigQuery를 사용할 때 발생하는 오류에 대한 정보는 Troubleshooting Errors에서 찾을 수 있습니다.