curl --request POST \
--url http://localhost:8080/api/v1/query/sqlserver \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"pipeline": "<string>",
"sql": "<string>",
"limit": 100
}
'import requests
url = "http://localhost:8080/api/v1/query/sqlserver"
payload = {
"pipeline": "<string>",
"sql": "<string>",
"limit": 100
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({pipeline: '<string>', sql: '<string>', limit: 100})
};
fetch('http://localhost:8080/api/v1/query/sqlserver', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/api/v1/query/sqlserver",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'pipeline' => '<string>',
'sql' => '<string>',
'limit' => 100
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:8080/api/v1/query/sqlserver"
payload := strings.NewReader("{\n \"pipeline\": \"<string>\",\n \"sql\": \"<string>\",\n \"limit\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:8080/api/v1/query/sqlserver")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"pipeline\": \"<string>\",\n \"sql\": \"<string>\",\n \"limit\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/api/v1/query/sqlserver")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"pipeline\": \"<string>\",\n \"sql\": \"<string>\",\n \"limit\": 100\n}"
response = http.request(request)
puts response.read_body{
"pipeline": "<string>",
"sql": "<string>",
"results": [
{}
],
"count": 123
}{
"error": "<string>"
}Query SQL Server
Execute a read-only T-SQL query (SELECT or WITH; metadata through INFORMATION_SCHEMA views) against the SQL Server or Azure SQL destination of a pipeline. Connection credentials come from the pipeline’s configured credentialsSecret, for every authMethod. Rows are capped with OFFSET 0 ROWS FETCH NEXT <limit> ROWS ONLY when the statement has a top-level ORDER BY and no TOP, left as written when it already has OFFSET, otherwise by wrapping it in SELECT TOP (<limit>) * FROM (...) q (for a WITH statement only the final SELECT is wrapped). When SQL Server rejects the wrapper (an unnamed or duplicate column name, FOR JSON / FOR XML) the query runs unwrapped with the same row cap. Write, exec and session keywords (INSERT, UPDATE, DELETE, INTO, EXEC, USE, OPENROWSET and others) are rejected anywhere in the statement, string literals included. Requires the query:sqlserver capability.
curl --request POST \
--url http://localhost:8080/api/v1/query/sqlserver \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"pipeline": "<string>",
"sql": "<string>",
"limit": 100
}
'import requests
url = "http://localhost:8080/api/v1/query/sqlserver"
payload = {
"pipeline": "<string>",
"sql": "<string>",
"limit": 100
}
headers = {
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-api-key': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({pipeline: '<string>', sql: '<string>', limit: 100})
};
fetch('http://localhost:8080/api/v1/query/sqlserver', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_PORT => "8080",
CURLOPT_URL => "http://localhost:8080/api/v1/query/sqlserver",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'pipeline' => '<string>',
'sql' => '<string>',
'limit' => 100
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-api-key: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "http://localhost:8080/api/v1/query/sqlserver"
payload := strings.NewReader("{\n \"pipeline\": \"<string>\",\n \"sql\": \"<string>\",\n \"limit\": 100\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-api-key", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("http://localhost:8080/api/v1/query/sqlserver")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"pipeline\": \"<string>\",\n \"sql\": \"<string>\",\n \"limit\": 100\n}")
.asString();require 'uri'
require 'net/http'
url = URI("http://localhost:8080/api/v1/query/sqlserver")
http = Net::HTTP.new(url.host, url.port)
request = Net::HTTP::Post.new(url)
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"pipeline\": \"<string>\",\n \"sql\": \"<string>\",\n \"limit\": 100\n}"
response = http.request(request)
puts response.read_body{
"pipeline": "<string>",
"sql": "<string>",
"results": [
{}
],
"count": 123
}{
"error": "<string>"
}Authorizations
Optional API key for authentication (enabled via application.yaml)
Body
Name of a pipeline with a SQL Server destination
Read-only T-SQL to execute (SELECT or WITH, no semicolons or comments). Omit to preview the pipeline's destination table.
Maximum rows to return. 0 means the default; there is no upper bound. Pass -1 for unlimited (also disables the 30-second query timeout).
