2013-05-16 5 views
12

2つの大きなデータセットを結合するクエリを実行しようとしていますが、クエリの実行中にリソースが超過しています。 Join EachとGroupを使用すると回避策がありますが、回避策はありません。リソースクエリの実行中に超過しました

SELECT 
    year(users.firstseen) as first_year, 
    month(users.firstseen) as first_month, 
    DATEDIFF(orders.timestamp,users.firstseen) as days_elapsed, 
    count(orders.user_key) as count_orders 
FROM 
    [project.orders] as orders 
JOIN EACH 
    [project.users] AS users 
ON 
    orders.user_key = users.user_key 
WHERE orders.store = 'ios' 
GROUP EACH BY 1,2,3 

編集:次は働いた:

SELECT 
    year(users.firstseen) as firstyear, 
    month(users.firstseen) as firstmonth, 
    DATEDIFF(orders.timestamp, users.firstseen) as days_elapsed, 
    COUNT(users.firstseen) AS count_orders FROM [project.orders] as orders 
JOIN EACH(SELECT user_key, firstseen FROM [project.users] 
WHERE store_key = 'ios') as users ON orders.user_key = users.user_key 
GROUP BY firstyear, firstmonth, days_elapsed 
ORDER BY firstyear, firstmonth, days_elapsed 
+1

これは、 月firstyearとして SELECT年(users.firstseenを)働くことになりました( users.firstseen)firstmonth、days_elapsedとして DATEDIFF(orders.timestamp、users.firstseen)、 COUNT(users.firstseen)としてcount_orders FROM firstseen、注文ごと( SELECT user_keyをJOIN ようproject.orders] FROM AS [project.users] WHERE store_key = 'ios')ユーザーとしてorders.user_key = users.user_key GROUP BY firstyear、firstmonth、days_elapsed ORDER BY firstyear、firstmonth、days_elapsed – user2388120

答えて

12

あなたが鍵に参加した場合、それぞれが失敗することのJOIN(この場合は、user_key)偏在しています。たとえば、user_keyが異常に頻繁に表示される場合、そのキーを処理するノードから「リソース超過」エラーが発生します。または、結合前にユーザーキーの一部を除外して、より小さなユーザーキーセットでクエリを実行してみることもできます。

個別のグループキーが多すぎると、GROUP EACH BYが失敗する可能性があります。この場合、いくつかのWHERE句を追加して結合出力を減らしてみることもできます。

基本的には、クエリを機能させるまで、入力をジョイナッチまたはグループごとに切り替えることをお勧めします。そのことが分かれば、クエリを構造化して(うまくいけば)利用可能なリソースを最大限に活用することができます。

は(ところで、私たちは、あなたが打つこともできる限界の一部を削除するためにチューニングするために、近い将来、これらの操作を期待して!)

+0

0と一致するJOIN EACHを持つようにも見えますが、このエラーがトリガーされます(2百万左のジョインでテストされ、1億8000万の権利がテストされます)。 – moin

+0

マッチがゼロのEOを単独で犯人にすることはまずありません。おそらく、特定のワーカー・ノードで使用可能なリソースを超えているJOIN EACHの前または後に、問合せに他の句がいくつか存在する可能性があります。 [email protected]にジョブIDを送信すると、より詳しく見ることができます。 –

+0

@ JeremyCondit制約についての更新はありますか? –

関連する問題