2016-09-05 3 views

答えて

0

配列は、構造を命じている、

concat_ws(<separator> , <array>) 

この機能は、セパレータを使用して文字列にすべての配列要素に参加します。

create table arrayDemo(id bigint, list array<String>); 
create table dummy(a int); 
insert into table dummy values (1) ; 
insert into arraydemo select 1, array("Paperino", "Topolino") from dummy; 
insert into arraydemo select 2, array("Pippo", "Pluto") from dummy; 
insert into arraydemo select 1, array("Pippo", "Pluto") from dummy; 

select * from arraydemo; 
+---------------+--------------------------+--+ 
| arraydemo.id |  arraydemo.list  | 
+---------------+--------------------------+--+ 
| 1    | ["Paperino","Topolino"] | 
| 2    | ["Pippo","Pluto"]  | 
| 1    | ["Pippo","Pluto"]  | 
+---------------+--------------------------+--+ 

select * 
    from arraydemo as a1 
      inner join arraydemo as a2 
      on concat_ws("|", a1.list) = concat_ws("|", a2.list); 

+--------+--------------------------+--------+--------------------------+--+ 
| a1.id |   a1.list   | a2.id |   a2.list   | 
+--------+--------------------------+--------+--------------------------+--+ 
| 1  | ["Paperino","Topolino"] | 1  | ["Paperino","Topolino"] | 
| 2  | ["Pippo","Pluto"]  | 2  | ["Pippo","Pluto"]  | 
| 1  | ["Pippo","Pluto"]  | 2  | ["Pippo","Pluto"]  | 
| 2  | ["Pippo","Pluto"]  | 1  | ["Pippo","Pluto"]  | 
| 1  | ["Pippo","Pluto"]  | 1  | ["Pippo","Pluto"]  | 
+--------+--------------------------+--------+--------------------------+--+ 

私はこの例では "toString()"形式で使用しています。場合によっては、配列の重要な部分だけを比較することが最も良い場合もあります。

select * 
     from arraydemo as a1 
     inner join arraydemo as a2 
     on a1.list[0] = a2.list[0]; 

希望する場合があります。

+0

関数名に型があります。それは 'concat_ws'です –

+1

ポインタroman-romanありがとう、私はそれを修正しました。 – ozw1z5rd

0

ある

Select a.xyz, b.abc from a left join b on a.C=b.D

array1のエントリはpreseではない配列2または配列3のnt

0

hive-third-functionsを使用できます。便利なjson、配列、マップ関数を提供します。この質問のために、あなたは次のように使用することができます:

Select a.xyz, b.abc from a left join b on array_equals(a.C,b.D)