2016-08-08 12 views
2

非常に単純なクエリを実行しようとしていますが、Resources exceededエラーで失敗しています。
in another postは、ミキサーの数を割り当てるために使用されたヒューリスティックが時々失敗する可能性があると読んでいます。ARRAY_AGG to OOM

SELECT 
    response.auctionId, 
    response.scenarioId, 
    ARRAY_AGG(response) AS responses 
FROM 
    rtb_response_logs.2016080515 
GROUP BY 
    response.auctionId, 
    response.scenarioId 

ことを知っている私のクエリを修正する方法があります:

  • responseは単一responsemax(count())が一種である38のフィールド(それらのほとんどは、短い文字列である)
  • で構成されているが低い(165)

クエリは
を失敗しました。エラー:クエリ実行中にリソースが超過しました。
ジョブID:teads-1307:bquijob_257ce97b_1566a6a3f27

答えて

1

それは(ARRAY_AGGまたは他の手段によって生成される)のアレイが単一のマシンのメモリに収まらなければならない電流制限です。しかし、このようなクエリに必要なリソースを減らすために、最近いくつかの改良が加えられました。これが問題であるかどうかを確認するには、次のようなクエリを試みることができる:

SELECT 
    SUM(LENGTH(FORMAT("%t", response))) AS total_response_size 
FROM 
    rtb_response_logs.2016080515 
GROUP BY 
    response.auctionId, 
    response.scenarioId 
ORDER BY total_response_size DESC LIMIT 1; 

は、これは、彼らが表現するためにかかるだろうどのくらいのメモリのラフなヒューリスティックとして文字列として構造体をフォーマットします。結果が非常に大きい場合は、メモリを少なくするようにクエリを再構成できます。結果がそれほど大きくない場合は、他の問題もあります。