cancel
Showing results for 
Search instead for 
Did you mean: 
Get Started Discussions
Start your journey with Databricks by joining discussions on getting started guides, tutorials, and introductory topics. Connect with beginners and experts alike to kickstart your Databricks experience.
cancel
Showing results for 
Search instead for 
Did you mean: 

SQL Statement Execution API w/ Javascript (REST)

Mehdi-LAMRANI
New Contributor II

I need to use Databricks SQL Statement Execution API w/ Javascript (see example post )

For some reason, Curl Works, Python works, but Javascript fails.

This works : 
(curl)
______________________________

curl --request POST \
https://adb-5750xxxxxxx.azuredatabricks.net/api/2.0/sql/statements/ \
--header "Authorization: Bearer dapi5c3xxxxxxx" \
--header "Content-Type: application/json" \
--data '{
"warehouse_id": "368axxxxxxx",
"catalog": "main",
"schema": "myschema",
"statement": "SELECT * FROM mytable LIMIT 1"
}'


This works : 
(python)
____________________________

import os
import requests
import json

 
# set databricks host
host = "https://"+DATABRICKS_HOST+"/api/2.0/sql/statements"

# sql query
warehouse_id = DATABRICKS_WAREHOUSE_ID
query = "SELECT * from mytable limit 1"

query_resp = requests.post(url=host, headers={"Authorization": "Bearer " + DATABRICKS_API_TOKEN}, data=json.dumps({"statement": query, "warehouse_id": warehouse_id, "catalog": "main","schema": "myschema"}))

print(query_resp.status_code)
print(query_resp.json())

This does NOT work : 
(javascript)
______________________________

displayHTML(f"""
<!DOCTYPE html>
<html>
<body>

<h3>Log</h3>
<textarea id="log" rows="10" cols="200" readonly></textarea>

<script>

const warehouseId = "368xxxxx";
const token = "dapixxxxxx";
const catalog = "main";
const schema = "ocealia";
const statement = "SELECT * FROM cereales LIMIT 1";

const fetchData = async () => {{
const url = `${{baseUrl}}`;
const data = {{
warehouse_id: warehouseId,
catalog: catalog,
schema: schema,
statement: statement,
}};

const options = {{
method: "POST",
headers: {{
Authorization: `Bearer ${{token}}`,
"Content-Type": "application/json",
}},
body: JSON.stringify(data),
}};

try {{
const response = await fetch(url, options);
if (!response.ok) {{
throw new Error(`Error fetching data: ${{response.status}}`);
}}
const jsonData = await response.json();
logMessage("Results:", jsonData);
}} catch (error) {{
logMessage( error);
}}
}};
 
function logMessage(message) {{
var logArea = document.getElementById('log');
logArea.value += message + "\\n";
logArea.scrollTop = logArea.scrollHeight; // Scroll to the bottom
}}

fetchData();
</script>

</body>
</html>
""")
 
____________________________
For some obscure reason it throws : 
TypeError: Failed to fetch
 
It is interesting to note that when calling the clusters list GET request, it DOES succeed.
let url = `https://${{DATABRICKS_HOST}}/api/2.0/clusters/list`
For some reason this one works but the POST sql statement fails
 
Any help is truly appreciated.
 
0 REPLIES 0

Join Us as a Local Community Builder!

Passionate about hosting events and connecting people? Help us grow a vibrant local community—sign up today to get started!

Sign Up Now