Planning Analytics

Planning Analytics

Get AI-infused integrated business planning

 View Only
  • 1.  ExecuteHttpRequest - Inspect Request

    Posted Wed February 05, 2025 09:38 AM

    I'm trying to generate a call to Databrick REST API, long story short, I can successfully make any GET request including auth + headers, and parse response as expected. However when I try any POST request I get a 500 error from  Databricks. The same request made via postman works as expected. 

    The hypothesis is that the request is malformed, is there any way I can inspect the actual request made via PA logs or similar to confirm the content?

    Version: 12.4.5 PAaaS

    TIA

     



    ------------------------------
    Josh Robinson
    ------------------------------


  • 2.  RE: ExecuteHttpRequest - Inspect Request

    Posted Thu February 06, 2025 08:39 AM
    Hi Josh,
    It just so happens that I can provide a working TI code example of a POST (used to send a SQL query to DataBrick).  Hope this helps.
     
    vProcessName = GetProcessName();
    vNow         = TIMST (NOW(), '\Y_\m_\d_\h_\i_\s' );
    vLogFile     = '/Process Logs/' | vProcessName | '_' | vNow | '.log';
     
    vDataBricksWorkspaceURL     = ATTRS ( '}Clients', TM1User, 'DataBricksWorkspaceURL' );
    vDataBricksPAT = ATTRS ( '}Clients', TM1User, 'DataBricksPAT' );
     
    vDataBricksWarehouseID = 'xxxxxxxxxxxxxxxxx';
    vDataBricksCatalog = 'xxxxxxxxxx';
    vDataBricksSchema = 'xxxxxxxxxx';
    vDataBricksStatement = 'SELECT * FROM branch';
     
    vAuthorization = Base64Encode ( TM1User () | ':' | vDataBricksPAT );
    vURL  = vDataBricksWorkspaceURL | '/api/2.0/sql/statements?format=CSV&disposition=EXTERNAL_LINKS'; 
    vBody = '{"warehouse_id": "' | vDataBricksWarehouseID | '",  "catalog": "' | vDataBricksCatalog | '",  "schema": "' | vDataBricksSchema | '",  "statement": "' | vDataBricksStatement | '"}';
     
    ASCIIOUTPUT ( vLogFile, 'vAuthorization: ' | vAuthorization );
    ASCIIOUTPUT ( vLogFile, 'vURL: ' | vURL );
    ASCIIOUTPUT ( vLogFile, 'vBody: ' | vBody );
     
    ExecuteHttpRequest ( 'POST', vURL, '-h Authorization: Basic ' | vAuthorization, '-h Expect: ',  '-h Content-Type: application/json', '-d ' | vBody );
     
    vResponseCode = HttpResponseGetStatusCode ();
    vResponseBody = HttpResponseGetBody ();
    IF ( vResponseCode <> 200);
        ASCIIOUTPUT ( vLogFile, NumberToString ( vResponseCode ) | ' ' | vResponseBody );
        ProcessQuit;
    ELSE;
        vStatement_id   = JsonToString ( vResponseBody, 'statement_id' );
        vStatus = JsonToString ( vResponseBody, 'status' );
        vState = JsonToString ( vStatus, 'state' );
        IF ( vState @= 'SUCCEEDED' );
            vManifest   = JsonToString ( vResponseBody, 'manifest' );
            vSchema  = JsonToString ( vManifest, 'schema' );
            vColumn_count   = JsonToString ( vSchema, 'column_count' );
            vTotal_chunk_count = JsonToString ( vManifest, 'total_chunk_count' );
            vResult   = JsonToString ( vResponseBody, 'result' );
            vExternalLinkCount = JsonSize( vResult, 'external_links' );
            vExternalLinks = JsonToString ( vResult, 'external_links' );
            vExternalLinkIndex = 0;
            WHILE ( vExternalLinkIndex <vExternalLinkCount );
                vExternalLink     = JsonGet ( vExternalLinks, vExternalLinkIndex  );
                vLink = JsonToString( vExternalLink, 'external_link' );
                ASCIIOUTPUT ( vLogFile, 'vExternalLink: ' | vLink );
                ExecuteProcess( 'DataBricks.ReadExternalLink', 'pLink', vLink );
                vExternalLinkIndex = vExternalLinkIndex + 1;                
            END;
        ELSE;
        ENDIF;
    ENDIF;


    ------------------------------
    Stuart King
    Product Manager
    IBM Planning Analytics
    ------------------------------



  • 3.  RE: ExecuteHttpRequest - Inspect Request

    Posted Thu February 06, 2025 03:49 PM
    Edited by Josh Robinson Thu February 06, 2025 04:04 PM

    Hi Stuart,

    This is very helpful, thanks. I'll work through and see if I can determine exactly where I went wrong.

    Could I be cheeky and get a look at 'DataBricks.ReadExternalLink' as well? It was on my to-do list :)

    Appreciate the (massive) pointer.



    ------------------------------
    Josh Robinson
    ------------------------------