[HADOOP] 하이브 : CSV 파일에 포함 된 JSON 열을 분해하는 방법은 무엇입니까?
HADOOP하이브 : CSV 파일에 포함 된 JSON 열을 분해하는 방법은 무엇입니까?
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
실제로 두 가지 경우 ( "OrderId"태그가 있거나없는)에 적합한 휴대용 SQL 쿼리가 필요합니다.
지금까지 '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
from https://stackoverflow.com/questions/46935265/hive-how-to-explode-a-json-column-embedded-in-a-csv-file by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] HDFS에서 다른 블록 배치 정책을 가질 수 있습니까? (0) | 2019.09.15 |
---|---|
[HADOOP] http : // localhost : 50070 /의 hadoop 웹 UI가 작동하지 않습니다 (0) | 2019.09.15 |
[HADOOP] Pyspark 응용 프로그램은 부분적으로 dataproc 클러스터 리소스를 이용합니다 (0) | 2019.09.14 |
[HADOOP] 하이브 추가 파티션 문은 선행 0을 무시합니다. (0) | 2019.09.14 |
[HADOOP] 하이브에서 외부 테이블에 파티션 만들기 (0) | 2019.09.14 |