从CSV文件(带有标题和管道分隔符)中,我得到了以下内容,其中包含一个JSON列(内部有一个集合),如下所示:
ProductId|IngestTime|ProductOrders
9180|20171025145034|[{"OrderId":"299","Location":"NY"},{"OrderId":"499","Location":"LA"}]
8251|20171026114034|[{"OrderId":"1799","Location":"London"}]
我需要的是创建一个返回以下内容的 SELECT Hive 查询:
ProductId IngestTime OrderId OrderLocation
9180 20171025145034 299 NY
9180 20171025145034 499 LA
8251 20171026114034 1799 London
到目前为止,我通过使用"爆炸","get_json_object"等尝试了许多组合,但我仍然没有找到正确的SQL查询。
你有解决方案吗?
非常感谢您的帮助:-)
我也有类似的要求。这个链接的解决方案帮助我解决了它。顺便说一句,下面是针对您要求的查询,假设DB_TABLE中的所有列都属于"字符串"类型。
SELECT ProductId,
IngestTime,
split(split(results,",")[0],':')[1] AS OrderId,
regexp_replace(split(split(results,",")[1],':')[1], "[\]|}]", "") AS OrderLocation
FROM
(SELECT ProductId,
IngestTime,
split(translate(ProductOrders, '"\[|]|""',''), "},") AS r
FROM DB_TABLE) t1 LATERAL VIEW explode(r) rr AS results