This is very helpful, thanks. I'll work through and see if I can determine exactly where I went wrong.
Appreciate the (massive) pointer.
Original Message:
Sent: Thu February 06, 2025 08:38 AM
From: STUART KING
Subject: ExecuteHttpRequest - Inspect Request
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
Original Message:
Sent: Tue February 04, 2025 06:07 PM
From: Josh Robinson
Subject: ExecuteHttpRequest - Inspect Request
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
------------------------------