Hive:如何分解嵌入在 CSV 文件中的 JSON 列?
Posted
技术标签:
【中文标题】Hive:如何分解嵌入在 CSV 文件中的 JSON 列?【英文标题】:Hive : How to explode a JSON column embedded in a CSV file? 【发布时间】:2018-04-06 17:04:19 【问题描述】:从一个 CSV 文件(带有标题和管道分隔符)我得到以下两个内容,其中包含一个 JSON 列(里面有一个集合),如下所示:
第一种情况(使用没有名称的 JSON 集合):
ProductId|IngestTime|ProductOrders
9180|20171025145034|["OrderId":"299","Location":"NY","OrderId":"499","Location":"LA"]
8251|20171026114034|["OrderId":"1799","Location":"London"]
第二种情况(使用名为“Orders”的 JSON 集合):
ProductId|IngestTime|ProductOrders
9180|20171025145034|"Orders":["OrderId":"299","Location":"NY","OrderId":"499","Location":"LA"]
8251|20171026114034|"Orders":["OrderId":"1799","Location":"London"]
首先,我像这样创建我的“原始”表:
DROP TABLE IF EXISTS Product;
CREATE EXTERNAL TABLE Product (
ProductId STRING,
IngestTime STRING,
ProductOrders STRING
)
COMMENT "Product raw table"
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\|'
STORED AS TEXTFILE
LOCATION
'/data/product'
TBLPROPERTIES ("skip.header.line.count"="1");
当我查询我的表时:
SELECT * FROM Product
我得到了以下答案:
第一种情况(使用没有名称的 JSON 集合):
ProductId IngestTime ProductOrders
9180 20171025145034 ["OrderId":"299","Location":"NY","OrderId":"499","Location":"LA"]
8251 20171026114034 ["OrderId":"1799","Location":"London"]
第二种情况(使用名为“Orders”的 JSON 集合):
ProductId IngestTime ProductOrders
9180 20171025145034 "Orders":["OrderId":"299","Location":"NY","OrderId":"499","Location":"LA"]
8251 20171026114034 "Orders":["OrderId":"1799","Location":"London"]
好的,非常好,到目前为止效果很好!
但我现在需要的是创建一个返回的 SELECT 查询:
ProductId IngestTime ProductOrderId ProductLocation
9180 20171025145034 299 NY
9180 20171025145034 499 LA
8251 20171026114034 1799 London
我真的需要一个可移植的 SQL 查询,它适用于我的两种情况(有或没有标签“OrderId”)。
到目前为止,我尝试了很多组合,使用了 'explode'、'get_json_object' 等,但仍然没有找到合适的 SQL 查询。
非常感谢您的帮助:-)
【问题讨论】:
嘿,您知道如何实现这一目标吗? 我也有同样的情况。你找到解决办法了吗? 【参考方案1】:你可以试试
CREATE EXTERNAL TABLE product(productid String,ingesttime String, productorders array<struct<orderid:String,location:string>> )
select productid,ingesttime, productorders.orderid[0] as orderid , productorders.location[0] as location from product
【讨论】:
您好,抱歉,您的解决方案不起作用!你真的在回答之前测试过你的代码吗?以上是关于Hive:如何分解嵌入在 CSV 文件中的 JSON 列?的主要内容,如果未能解决你的问题,请参考以下文章
如何在使用 EMR/Hive 将数据从 S3 导入 DynamoDB 时处理包含在引号 (CSV) 中的字段