Run KQL queries and stored functions with SQL Server emulation
Azure Data Explorer provides a Tabular Data Stream (TDS) endpoint that allows you to query data in a way similar to how you would query data in SQL Server. The endpoint supports TDS versions 7.x and 8.0.
In this article, you'll learn how to run stored functions and Kusto Query Language (KQL) queries from an SQL compatible client.
Note
The information in this article applies to running parameterized calls over the TDS protocol, also known as RPC calls.
For more information, see the overview on SQL Server emulation in Azure Data Explorer.
Run KQL queries
The SQL stored procedure sp_execute_kql
can be used to run KQL queries, including parameterized queries. The procedure is similar to the sp_executesql
stored procedure.
Note
The sp_execute_kql
procedure can only be called via an RPC call as shown in the following example and not from within a regular SQL query.
The first parameter of sp_execute_kql
is the KQL query, and any other parameters are treated as query parameters. The following example shows how to use sp_execute_kql
.
using (var connection = new SqlConnection(csb.ToString()))
{
await connection.OpenAsync();
using (var command = new SqlCommand("sp_execute_kql", connection))
{
command.CommandType = CommandType.StoredProcedure;
var query = new SqlParameter("@kql_query", SqlDbType.NVarChar);
command.Parameters.Add(query);
var parameter = new SqlParameter("mylimit", SqlDbType.Int);
command.Parameters.Add(parameter);
query.Value = "StormEvents | take myLimit";
parameter.Value = 3;
using (var reader = await command.ExecuteReaderAsync())
{
// Read the response.
}
}
}
Note
When calling sp_execute_kql
via TDS, parameter types are set by the protocol and don't need to be declared.
Call stored functions
You can create and call stored functions like SQL stored procedures. For example, if you have a stored function as described in the following table, you can call it as shown in the code example.
Name | Parameters | Body | Folder | DocString |
---|---|---|---|---|
MyFunction | (myLimit: long) | {StormEvents | take myLimit} | MyFolder | Demo function with parameter |
using (var connection = new SqlConnection(csb.ToString()))
{
await connection.OpenAsync();
using (var command = new SqlCommand("kusto.MyFunction", connection))
{
command.CommandType = CommandType.StoredProcedure;
var parameter = new SqlParameter("mylimit", SqlDbType.Int);
command.Parameters.Add(parameter);
parameter.Value = 3;
using (var reader = await command.ExecuteReaderAsync())
{
// Read the response.
}
}
}
Note
To distinguish between stored functions and emulated SQL system stored procedures, call stored functions with an explicit reference to the kusto
schema. In the example, the stored function is called using kusto.Myfunction
.