2
CREATE TABLE IF NOT EXISTS Table2
(
USER_ID BIGINT,
PURCHASED_ITEM ARRAY<STRUCT<PRODUCT_ID: BIGINT,TIMESTAMPS:STRING>>
) ROW FORMAT
 DELIMITED FIELDS TERMINATED BY '-'
 collection items terminated by ','
 map keys terminated by ':'
 LINES TERMINATED BY '\n'
 STORED AS TEXTFILE
 LOCATION '/user/rj/output2';

以下は表2のデータです

1345653-110909316904:1341894546,221065796761:1341887508

この以下のクエリを使用して上記のデータを展開できます。上記のデータに対しては正常に機能します-

SELECT  * FROM (select user_id, prod_and_ts.product_id as product_id,
prod_and_ts.timestamps as timestamps FROM table2 LATERAL VIEW
explode(purchased_item) exploded_table as prod_and_ts) prod_and_ts;

そして、このような出力が得られますが、これは問題ありません-

1345653                                110909316904     1341894546
1345653                                221065796761     1341887508

しかし、場合によっては、以下の表のようなデータがあり、複数のタイムスタンプが同じ product_id に対してシャープ記号で追加されています。

1345653-110909316904:1341894546#1341885695,221065796761:1341887508#1341885453

そして、HiveQLクエリを使用して上記のデータに対してこのような出力が必要です-

1345653                                110909316904     1341894546
1345653                                110909316904    1341885695
1345653                                221065796761     1341887508
1345653                                221065796761    1341885453

これはどういうわけかこれを行うことは可能ですか?

? 何か提案をいただければ幸いです。

PS私は数日前にこの質問をしますが、その場合、データは異なり、現在はデータがまったく異なるため、同様の出力が必要です.

4

1 に答える 1

4

関数 regexp_replace または regex_extract を使用して、製品 ID のみを取得できます。これを試して:

SELECT  * FROM (select user_id, prod_and_ts.product_id as product_id,
regex_replace(prod_and_ts.timestamps, "#\\d*", "")  as timestamps FROM table2 LATERAL VIEW
explode(purchased_item) exploded_table as prod_and_ts) prod_and_ts;
于 2013-09-26T12:52:42.463 に答える