0

SQL にエクスポートできるテーブルに変換したい次のスキーマ データセットがあります。を使用してHIVEいます。次のように入力します

call_id,stat1,stat2,stat3
1,a,b,c,
2,x,y,z,
3,d,e,f,
1,j,k,l,

出力テーブルはcall_id主キーとして持つ必要があるため、一意である必要があります。出力スキーマは

call_id,stat2,stat3,
1,b,c, or (1,k,l)
2,y,z,
3,e,f,

DISTINCT問題は、HIVEクエリでキーワードを使用するDISTINCTと、結合されたすべての列に適用されることです。のみに DISTINCT 操作を適用したいcall_id。ライン上の何か

SELECT DISTINCT(call_id), stat2,stat3 from intable;

ただし、これは有効ではありませんHIVE(私はSQLにも精通していません)。

唯一の法的な質問は

SELECT DISTINCT call_id, stat2,stat3 from intable; 

しかし、これは他の列と同じ複数の行を返しcall_id、行全体が異なります。

注: a、b、c、x、y、z などの間に算術関係はありません。そのため、平均化や合計のトリックは実行できません。

どうすればこれを行うことができますか?

4

2 に答える 2

2

1つの簡単なアイデア、最良のアイデアではありませんが、作業を行います-

hive> create table temp1(a int、b string);

ハイブ>上書きテーブルtemp1を挿入

call_idによって不安定なグループからcall_id、max(concat(stat1、'|'、stat2、'|'、stat3))を選択します。

ハイブ>上書きテーブルを挿入できません

temp1からa、split(b、'|')[0]、split(b、'|')[1]、split(b、'|')[2]を選択します。

于 2013-02-24T08:37:27.113 に答える
1

,,call_idのみにDISTINCT演算を適用したい"

しかし、Hive はどの行を削除する必要があるかをどのように判断するのでしょうか?

データの量/統計フィールドのサイズを知らなくても、次のクエリを実行できます。

select distinct i1.call_id, i1.stat2, i1.stat3 from (
  select call_id, MIN(concat(stat1, stat2, stat3)) as smin 
  from intable group by call_id
) i2 join intable i1 on i1.call_id = i2.call_id 
  AND concat(i1.stat1, i1.stat2, i1.stat3) = i2.smin;
于 2013-02-22T23:08:45.697 に答える