Nanda
Nanda

Reputation: 189

code returns Error when reading JSON and a referred section is not Present in JSON Structure in BigQuery SQL

I have the code, which reads perfectly fine, when the referred sections are present in JSON and it erros out when referred section is not present. Trying to workaround to still read that section and return NULL values when not found.

Input data: { "ProjectId": "P.2001850", "OperationId": "O.2001850.01", "ActivityId": "A.2001850.01.04", "Description": "", "Combos": [ { "ComboId": "28632", "Demands": { "DownHoleTools": { "PrimaryTools": [

      ],
      "BackupTools": [

      ]
    },
    "SurfaceTools": {
      "PrimaryTools": [

      ],
      "BackupTools": [

      ]
    },
    "Techniques": {
      "PrimaryTools": [

      ],
      "BackupTools": [

      ]
    },
    "Services": [

    ],
    "Tools": ""
  },
  "ComboType": 0,
  "HashCode": "",
  "SequenceNumber": "",
  "ConveyanceInfo": "",
  "CreatedDate": "0001-01-01T00:00:00",
  "CreatedBy": "",
  "LastModifiedDate": "0001-01-01T00:00:00",
  "LastModifiedBy": "",
  "Id": "0f987389-f724-4954-94fb-fd9b8f981951"
},
{
  "ComboId": "28631",
  "Demands": {
    "DownHoleTools": "",
    "SurfaceTools": "",
    "Techniques": {
      "PrimaryTools": [

      ],
      "BackupTools": [

      ]
    },
    "Services": [

    ],
    "Tools": {
      "PrimaryTools": [
        {
          "ToolCode": "ToolName",
          "ToolDescription": "WDIS9",
          "ToolSize": "900",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-04-02T05:00:00",
            "EndDate": "2020-04-05T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "WDP"
          },
          "BrandInfo": {
            "Code": "DM-WDP",
            "Description": "WDP",
            "WkId": "6:DM-WDP"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "d5c2d518-e6b0-4b1f-b490-5d22f14efd9e"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "TeleScope 825",
          "ToolSize": "825",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-25T05:00:00",
            "EndDate": "2020-03-31T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Mud Pulse"
          },
          "BrandInfo": {
            "Code": "DM-TEL",
            "Description": "[DM-TEL] TELESCOPE",
            "WkId": "6:DM-TEL"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "b6fd7582-6850-4ea4-a1ab-2caa69a956c2"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "SDNSC 475 - TOOL ASSY",
          "ToolSize": "475",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-25T05:00:00",
            "EndDate": "2020-03-31T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Logging While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Nuclear"
          },
          "BrandInfo": {
            "Code": "DM-IDNSC",
            "Description": "[DM-IDNSC] IDNSC",
            "WkId": "6:DM-IDNSC"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "4aeb2a19-6dfd-43ab-8dbb-ee79f607d326"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "IDNSC 675 - TOOL ASSY",
          "ToolSize": "675",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-25T05:00:00",
            "EndDate": "2020-03-31T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Logging While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Nuclear"
          },
          "BrandInfo": {
            "Code": "DM-IDNSC",
            "Description": "[DM-IDNSC] IDNSC",
            "WkId": "6:DM-IDNSC"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "1ab693cd-61ff-490b-9dff-6b8a77a8727c"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "CTD-MWD",
          "ToolSize": "",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-18T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Directional Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Coil Tubing Drilling"
          },
          "BrandInfo": {
            "Code": "DM-FD",
            "Description": "COIL TUBING DRILLING",
            "WkId": "6:DM-FD"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "c06a357b-6c8c-44e3-83cf-8c4d40cad1e4"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "FUSION Cycle Disconnect",
          "ToolSize": "",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-18T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Directional Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Coil Tubing Drilling"
          },
          "BrandInfo": {
            "Code": "DM-FD",
            "Description": "COIL TUBING DRILLING",
            "WkId": "6:DM-FD"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "7c434710-63c4-4a84-8221-63a53682019f"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "DMM675",
          "ToolSize": "675",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-18T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Drilling Mechanics"
          },
          "BrandInfo": {
            "Code": "DM-DMM",
            "Description": "OPTIDRILL",
            "WkId": "6:DM-DMM"
          },
          "Comments": "test",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "2045d05f-ac3c-40a5-aca4-714da606f844"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "DMM900",
          "ToolSize": "900",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-18T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Drilling Mechanics"
          },
          "BrandInfo": {
            "Code": "DM-DMM",
            "Description": "OPTIDRILL",
            "WkId": "6:DM-DMM"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "890dae1e-8204-47d7-9335-9fb5604e7ca3"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "FUSION Orienting Tool",
          "ToolSize": "",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-18T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Directional Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Coil Tubing Drilling"
          },
          "BrandInfo": {
            "Code": "DM-FD",
            "Description": "[DM-FD] COIL TUBING DRILLING",
            "WkId": "6:DM-FD"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "b89c973a-d9fc-4241-8e77-f1651b80a4e4"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "GRPI8",
          "ToolSize": "825",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-19T05:00:00",
            "EndDate": "2020-03-28T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "WDP"
          },
          "BrandInfo": {
            "Code": "DM-WDP",
            "Description": "[DM-WDP] WDP",
            "WkId": "6:DM-WDP"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "881abae1-3e3c-4df7-9663-afeff5b5eb11"
        }
      ],
      "BackupTools": [
        {
          "ToolCode": "ToolName",
          "ToolDescription": "ShortPulse 475",
          "ToolSize": "475",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-04-01T05:00:00",
            "EndDate": "2020-04-05T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Mud Pulse"
          },
          "BrandInfo": {
            "Code": "DM-BMP",
            "Description": "SHORTPULSE",
            "WkId": "6:DM-BMP"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "637a4465-0045-49f5-963d-ee65b93478b1"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "TeleScope 900",
          "ToolSize": "900",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-16T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Mud Pulse"
          },
          "BrandInfo": {
            "Code": "DM-TEL",
            "Description": "[DM-TEL] TELESCOPE",
            "WkId": "6:DM-TEL"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "dcf0fbef-05af-44af-bde1-2acdd09d2b85"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "IDNSC 675 - TOOL ASSY",
          "ToolSize": "675",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-16T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Logging While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Nuclear"
          },
          "BrandInfo": {
            "Code": "DM-IDNSC",
            "Description": "[DM-IDNSC] IDNSC",
            "WkId": "6:DM-IDNSC"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "401f8e09-6591-4f6b-92ca-e207b1679eed"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "SONICPACER 675 - TOOL ASSY",
          "ToolSize": "675",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-16T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Logging While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Sonic"
          },
          "BrandInfo": {
            "Code": "DM-SONP",
            "Description": "SONICPACER",
            "WkId": "6:DM-SONP"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "91feada7-807e-46dd-9fe8-17e255dbf87f"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "GDIS 900",
          "ToolSize": "900",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-16T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Gyro"
          },
          "BrandInfo": {
            "Code": "DM-GDIS",
            "Description": "GDIS",
            "WkId": "6:DM-GDIS"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "446a1535-848d-49f6-a6a3-53c2102aee46"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "WDIS9",
          "ToolSize": "900",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-04-01T05:00:00",
            "EndDate": "2020-04-05T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "WDP"
          },
          "BrandInfo": {
            "Code": "DM-WDP",
            "Description": "WDP",
            "WkId": "6:DM-WDP"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "70b21610-ff2f-4c87-9132-1b2d6dd59fa0"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "DMM675",
          "ToolSize": "675",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-04-01T05:00:00",
            "EndDate": "2020-04-05T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Drilling Mechanics"
          },
          "BrandInfo": {
            "Code": "DM-DMM",
            "Description": "OPTIDRILL",
            "WkId": "6:DM-DMM"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "aa0aa23c-d3f6-4920-897d-ecd3a10cde59"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "DMM900",
          "ToolSize": "900",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-12T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Drilling Mechanics"
          },
          "BrandInfo": {
            "Code": "DM-DMM",
            "Description": "OPTIDRILL",
            "WkId": "6:DM-DMM"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "f9f5fb49-7ec5-40fe-a737-9b145ae800a6"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "DMM675",
          "ToolSize": "675",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-12T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Drilling Mechanics"
          },
          "BrandInfo": {
            "Code": "DM-DMM",
            "Description": "OPTIDRILL",
            "WkId": "6:DM-DMM"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "b68c5c40-8cca-4ed0-a82c-a11a04a216a3"
        },
        {
          "ToolCode": "ToolName",
          "ToolDescription": "DMM900",
          "ToolSize": "900",
          "Source": "A",
          "DemandDurationInfo": {
            "StartDate": "2020-03-12T05:00:00",
            "EndDate": "2020-03-20T05:00:00"
          },
          "ToolGroupInfo": {
            "Code": "ToolGroup",
            "Description": "Measurements While Drilling"
          },
          "ToolTypeInfo": {
            "Code": "ToolType",
            "Description": "Drilling Mechanics"
          },
          "BrandInfo": {
            "Code": "DM-DMM",
            "Description": "OPTIDRILL",
            "WkId": "6:DM-DMM"
          },
          "Comments": "",
          "CreatedDate": "0001-01-01T00:00:00",
          "CreatedBy": "",
          "LastModifiedDate": "0001-01-01T00:00:00",
          "LastModifiedBy": "",
          "Id": "41eb924d-fe79-4743-a981-b9af73e272cb"
        }
      ]
    }
  },
  "ComboType": 1,
  "HashCode": "",
  "SequenceNumber": "",
  "ConveyanceInfo": "",
  "CreatedDate": "0001-01-01T00:00:00",
  "CreatedBy": "",
  "LastModifiedDate": "0001-01-01T00:00:00",
  "LastModifiedBy": "",
  "Id": "20b7a14b-b038-40a0-9da3-d13708838332"
}

], "FmpEdpId": "5e7ae62757b51d0001cbf6b5", "CreatedDate": "2020-03-13T20:28:27.539", "CreatedBy": "FDPSystemUser", "LastModifiedDate": "2020-03-26T11:38:28.621", "LastModifiedBy": "RNighot", "Id": "5e6beceb3d6a2f7154aaed9f" }

Code:

CREATE TEMPORARY FUNCTION CUSTOM_JSON_EXTRACT(json STRING, json_path STRING) 
RETURNS ARRAY<STRING> LANGUAGE js AS '''
  var result = jsonPath(JSON.parse(json), json_path);
  if(result){return result;} 
  else {return [];}
'''
OPTIONS (library='gs://slb-it-op-dev-temp-dev-workspace/json_temp/jsonpath-0.8.0.js');

CREATE TEMP FUNCTION jsonparse(input STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS """
  var result= JSON.parse(input).map(x=>JSON.stringify(x));
   if(result){return result;} 
  else {return [];}
"""
OPTIONS (
    library="gs://slb-it-op-dev-temp-dev-workspace/json_temp/jsonpath-0.8.0.js"
);

SELECT 
  job_id,
  combo_id,
  JSON_EXTRACT_SCALAR(combo, '$.ComboType') Combo_Type,
  JSON_EXTRACT_SCALAR(combo, '$.HashCode') Combo_Hash_code,
  JSON_EXTRACT_SCALAR(combo, '$.Id') Combos_Id,
  JSON_EXTRACT_SCALAR(primary_tools, '$.ToolDescription') tool_name,
  JSON_EXTRACT_SCALAR(primary_tools, '$.ToolSize') tool_size,
   JSON_EXTRACT_SCALAR(primary_tools, '$.Source') Source,
   JSON_EXTRACT_SCALAR(primary_tools, '$.BrandInfo.Code') Brand_Info_Code,
  JSON_EXTRACT_SCALAR(primary_tools, '$.BrandInfo.Description') Brand_Info_Description,
   JSON_EXTRACT_SCALAR(primary_tools, '$.BrandInfo.WkId') Brand_Info_WKID,
 FROM temp_db.eqp_temp,
UNNEST(jsonparse(JSON_EXTRACT(conv_column, '$.Combos'))) combo
LEFT JOIN UNNEST(CUSTOM_JSON_EXTRACT(combo, '$.ComboId')) combo_id
LEFT JOIN UNNEST(jsonparse(JSON_EXTRACT(combo, '$.Demands.Tools.PrimaryTools'))) primary_tools

Output:

we need to read the comboid "28632" for '$.Demands.Tools.PrimaryTools', catch here is "Tools" section doesnt have "PrimaryTools" section for this combo.

Upvotes: 0

Views: 26

Answers (1)

Mikhail Berlyant
Mikhail Berlyant

Reputation: 172944

The only minor fix was required in TEMP FUNCTION jsonparse(input STRING) as in below code

#standardSQL
CREATE TEMPORARY FUNCTION CUSTOM_JSON_EXTRACT(json STRING, json_path STRING) 
RETURNS ARRAY<STRING> LANGUAGE js AS '''
  var result = jsonPath(JSON.parse(json), json_path);
  if(result){return result;} 
  else {return [];}
'''
OPTIONS (library='gs://slb-it-op-dev-temp-dev-workspace/json_temp/jsonpath-0.8.0.js');

CREATE TEMP FUNCTION jsonparse(input STRING)
RETURNS ARRAY<STRING>
LANGUAGE js AS '''
  if(input){return JSON.parse(input).map(x => JSON.stringify(x));} 
  else {return [];}
'''
OPTIONS (library='gs://slb-it-op-dev-temp-dev-workspace/json_temp/jsonpath-0.8.0.js');

SELECT 
  job_id,
  combo_id,
  JSON_EXTRACT_SCALAR(combo, '$.ComboType') Combo_Type,
  JSON_EXTRACT_SCALAR(combo, '$.HashCode') Combo_Hash_code,
  JSON_EXTRACT_SCALAR(combo, '$.Id') Combos_Id,
  JSON_EXTRACT_SCALAR(primary_tools, '$.ToolDescription') tool_name,
  JSON_EXTRACT_SCALAR(primary_tools, '$.ToolSize') tool_size,
  JSON_EXTRACT_SCALAR(primary_tools, '$.Source') Source,
  JSON_EXTRACT_SCALAR(primary_tools, '$.BrandInfo.Code') Brand_Info_Code,
  JSON_EXTRACT_SCALAR(primary_tools, '$.BrandInfo.Description') Brand_Info_Description,
  JSON_EXTRACT_SCALAR(primary_tools, '$.BrandInfo.WkId') Brand_Info_WKID,
FROM `temp_db.eqp_temp`,
UNNEST(jsonparse(JSON_EXTRACT(conv_column, '$.Combos'))) combo
LEFT JOIN UNNEST(CUSTOM_JSON_EXTRACT(combo, '$.ComboId')) combo_id
LEFT JOIN UNNEST(jsonparse(JSON_EXTRACT(combo, '$.Demands.Tools.PrimaryTools'))) primary_tools    

with output

Row job_id  combo_id    Combo_Type  Combo_Hash_code Combos_Id   tool_name   tool_size   Source  Brand_Info_Code Brand_Info_Description  Brand_Info_WKID  
1   1   28632   0       0f987389-f724-4954-94fb-fd9b8f981951    null    null    null    null    null    null     
2   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    WDIS9   900 A   DM-WDP  WDP 6:DM-WDP     
3   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    TeleScope 825   825 A   DM-TEL  [DM-TEL] TELESCOPE  6:DM-TEL     
4   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    SDNSC 475 - TOOL ASSY   475 A   DM-IDNSC    [DM-IDNSC] IDNSC    6:DM-IDNSC   
5   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    IDNSC 675 - TOOL ASSY   675 A   DM-IDNSC    [DM-IDNSC] IDNSC    6:DM-IDNSC   
6   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    CTD-MWD     A   DM-FD   COIL TUBING DRILLING    6:DM-FD  
7   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    FUSION Cycle Disconnect     A   DM-FD   COIL TUBING DRILLING    6:DM-FD  
8   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    DMM675  675 A   DM-DMM  OPTIDRILL   6:DM-DMM     
9   1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    DMM900  900 A   DM-DMM  OPTIDRILL   6:DM-DMM     
10  1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    FUSION Orienting Tool       A   DM-FD   [DM-FD] COIL TUBING DRILLING    6:DM-FD  
11  1   28631   1       20b7a14b-b038-40a0-9da3-d13708838332    GRPI8   825 A   DM-WDP  [DM-WDP] WDP    6:DM-WDP     

Upvotes: 1

Related Questions