2017-11-24 7 views
1

以下のクエリを実行しています。これは、ハイブで約2百万回あります。パフォーマンスを改善する方法はありますか?ソースハイブテーブルあなたは参加せずにそれを行うことができますcreated_dateハイブのパフォーマンスを向上させる方法

select t.id, 
    case when t.amt_1_rank < 0.3*f.amt_1_count then t.amt_1 else null end as amt_1, 
    case when t.amt_2_rank < 0.3*f.amt_2_count then t.amt_2 else null end as amt_2, 
.. 
.. 
.. -- Like wise 30 columns e.g. amt_3,amt_3... 
    from (
    select a.id, 
    a.amt_1, 
    row_number() over (ORDER BY cast(a.amt_1 AS DECIMAL(8,7)) DESC) AS amt_1_rank, 
    a.amt_2, 
    row_number() over (ORDER BY cast(a.amt_2 AS DECIMAL(8,7)) DESC) AS amt_2_rank 
    from source_table a WHERE created_date='2017-10-15')t 
    join 
    ( 
    SELECT count(case when amt_1='.' then null else 1 end) AS amt_1_count, 
    count(case when amt_2='.' then null else 1 end) AS amt_2_count, 
.. 
.. 

    FROM source_table 
    WHERE created_date='2017-10-15' 
    ) f 
+0

これは、あなたはそれが動作することを考えてどのようにはるかに少ない時間 – sk7979

答えて

0

のパーティション列です:

select t.id, 
    case when t.amt_1_rank < 0.3*t.amt_1_count then t.amt_1 else null end as amt_1, 
    case when t.amt_2_rank < 0.3*t.amt_2_count then t.amt_2 else null end as amt_2, 
.. 
.. 
.. -- Like wise 30 columns e.g. amt_3,amt_3... 
    from (
    select a.id, 
      a.amt_1, 
      row_number() over (ORDER BY cast(a.amt_1 AS DECIMAL(8,7)) DESC) AS amt_1_rank, 
      a.amt_2, 
      row_number() over (ORDER BY cast(a.amt_2 AS DECIMAL(8,7)) DESC) AS amt_2_rank, 
      count(amt_1_flag) over()          AS amt_1_count, 
      count(amt_2_flag) over()          AS amt_2_count 
     from 
      (select a.*, 
        case when amt_1='.' then null else 1 end as amt_1_flag, 
        case when amt_2='.' then null else 1 end as amt_2_flag 
       from source_table a WHERE created_date='2017-10-15' 
      )a 

      )t 
+0

がかかりますテーブルの上に圧縮コーデックを適用このような約20-30列の場合 – user2672739

+0

@ user2672739なぜそうではありませんか?あなたのことを説明してください、私は完全に理解していません。私はちょうど結合と1つの不要なテーブルのスキャンを削除することを提案しました – leftjoin

+0

ここでの問題は、各列のby節のrow_numberは私が推測する時間がかかります。そのような柱は約30個あるので – user2672739

関連する問題