Support Questions

Find answers, ask questions, and share your expertise

I have a HIVE table which contains JSON as a column. I need to extract a struct in this JSON .But Lateral explode is not helping.

avatar

The JSON is example is :

{
"app": {
"Id": "123",
"apply": [
{
"flag": "1",
"Product": [
{
"Code": "DZ9e",
"Line": "10000",
"status": "C",
}
{
"Code": "EZ9e",
"Line": "19000",
"status": "C",
}
]
}
}

I need output like

IDFlagCodeLineStatus
1231DZ9e10000C
1231EZ9e19000C

 

I have used lateral explode/lalteral inline explode . But it is not giving value in separate rows.

Anybody has any solution

1 ACCEPTED SOLUTION

avatar
Master Collaborator

ahh 
@Rich_Learner please use the following query. I just tested. It should work.

WITH json_extract AS (
  SELECT 
    get_json_object(xml_data, '$.app.Id') AS ID,
    get_json_object(xml_data, '$.app.apply[0].flag') AS Flag,
    regexp_replace(regexp_replace(get_json_object(xml_data, '$.app.apply[0].Product'), '\\[|\\]', ''), '\\}\\,\\{', '\\}\\;\\{') AS products
  FROM check
)
SELECT 
  ID,
  Flag,
  get_json_object(product_data, '$.Code') AS Code,
  get_json_object(product_data, '$.Line') AS Line,
  get_json_object(product_data, '$.status') AS Status
FROM json_extract
LATERAL VIEW explode(split(products, ';')) p AS product_data;

View solution in original post

10 REPLIES 10

avatar

Thanks a lot.. It worked like magic 😄