2017-02-10 11 views
0

Apache Impalaをテストしており、GROUP BYとLIKEを併用すると非常にゆっくりと動作することに気づきました。ここでは2つの例です:Group By and Likeを使用したImpalaクエリのパフォーマンスが遅い

# 1.37s 1.08s 1.35s 

SELECT * FROM hive.default.pcopy1B where 
    (lower("by") like '%part%' and lower("by") like '%and%' and lower("by") like '%the%') 
    or (lower(title) like '%part%' and lower(title) like '%and%' and lower(title) like '%the%') 
    or (lower(url) like '%part%' and lower(url) like '%and%' and lower(url) like '%the%') 
    or (lower(text) like '%part%' and lower(text) like '%and%' and lower(text) like '%the%') 
limit 100; 

# 156.64s 155.63s 

select "by", type, ranking, count(*) from pcopy where 
    (lower("by") like '%part%' and lower("by") like '%and%' and lower("by") like '%the%') 
    or (lower(title) like '%part%' and lower(title) like '%and%' and lower(title) like '%the%') 
    or (lower(url) like '%part%' and lower(url) like '%and%' and lower(url) like '%the%') 
    or (lower(text) like '%part%' and lower(text) like '%and%' and lower(text) like '%the%') 
group by "by", type, ranking 
order by 4 desc limit 10; 

は、この問題が発生する理由を誰かが説明してください、そして任意の回避策があるかどうか?

+0

2つのクエリは私と非常に異なるようです。最初のレコードはレコードを選択し、カーソルが1つだけ必要です.2番目のレコードはすべてのレコードを取得し、GROUPとSORTの両方を実行する必要があります。返されるレコードが非常に多い場合、これは時間の違いを説明するかもしれません。それとも私は何かが恋しい? – LSerni

答えて

1

2つのクエリには基本的な違いがあります。

第一クエリ

主なポイント:

  • のみ100行が選択されています。
  • WHERE句を満たす100行が取得されるとすぐに、完了とマークされ、100レコードが返されます。
  • マッパーステップは1つだけです。マッパーの数は、データサイズに依存します。

第二クエリ

主なポイント:

  • わずか10行が選択されています。
  • 10行しか選択されていない場合でも、GROUP BY句に基づいて結果を生成するには、プロセスは完全なデータをスキャンする必要があります。
  • 3つのマッパーレデューサーステップが必要です。各ステップのマッパーレデューサーの数はデータサイズに依存します。
    • 第一MPは、データを読み取り、第二MRがGROUP BY句のためになりWHERE
    • を適用します。
    • 第3回MRはORDER BY句です。

だからにより提供されるクエリは同じように見えるかもしれないが、彼らは全く異なっており、すべて一緒に別の目的を解決します。

私はこれがあなたに役立つことを願っています。

関連する問題