web-dev-qa-db-ja.com

ハイブで区切り文字を使用して複数の行を連結する

文字列値を区切り文字として「〜」で行ごとに連結する必要があります。次のデータがあります。

enter image description here

「〜」を区切り文字として、「row_id」の昇順で各「id」の「Comment」列を連結する必要があります。

予想される出力は次のとおりです。

enter image description here

GROUP_CONCATは、私のHiveバージョンでは認識されないため、オプションではありません。 collect_setまたはcollect_listを使用できますが、間に区切り文字を挿入することはできません。

回避策はありますか?

12
Vaishak

collect_listは、文字列ではなく配列を返します。
配列はconcat_wsを使用して区切り文字列に変換できます。


これは、特定の順序のコメントなしで機能します。

select      id
           ,concat_ws('~',collect_list(comment)) as comments

from        mytable 

group by    id
;

+----+-------------+
| id |  comments   |
+----+-------------+
|  1 | ABC~PRQ~XYZ |
|  2 | LMN~OPQ     |
+----+-------------+