次の方法で共有


SQL Server エミュレーションを使用して KQL クエリとストアド関数を実行する

Azure Data Explorer には、SQL Server のデータに対してクエリを実行する方法と同様の方法でデータのクエリを実行できる、表形式データ ストリーム (TDS) エンドポイントが用意されています。 このエンドポイントでは、TDS バージョン 7.x と 8.0 がサポートされます。

この記事では、SQL 互換クライアントからストアド関数 Kusto 照会言語 (KQL) クエリを実行する方法について説明します。

Note

この記事の情報は、TDS プロトコル (RPC 呼び出しとも呼ばれます) でパラメーター化された呼び出しを実行する場合に適用されます。

詳細については、Azure Data Explorer の SQL Server エミュレーションオーバービューを参照してください。

KQL クエリを実行する

SQL ストアド プロシージャ sp_execute_kql を使用して、パラメーター化されたクエリを含む KQL クエリを実行できます。 プロシージャは sp_executesql ストアド プロシージャに似ています。

Note

sp_execute_kql プロシージャは、通常の SQL クエリ内からではなく、次の例に示すように RPC 呼び出しを介してのみ呼び出すことができます。

sp_execute_kqlの最初のパラメーターは KQL クエリであり、その他のパラメーターはすべて query パラメーターとして扱われます。 次の例は、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

TDS を使用して sp_execute_kql を呼び出す場合、パラメーターの型はプロトコルによって設定されるため、宣言する必要はありません。

ストアド関数を呼び出す

SQL ストアド プロシージャのようにストアド関数を作成して呼び出すことができます。 たとえば、次の表に示すようにストアド関数がある場合は、コード例に示すように呼び出すことができます。

Name パラメーター 本文​​ フォルダー DocString
MyFunction (myLimit: long) {StormEvents | take myLimit} MyFolder パラメーターを使用したデモ関数
  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

ストアド関数とエミュレートされた SQL システム ストアド プロシージャを区別するには、 kusto スキーマへの明示的な参照を使用してストアド関数を呼び出します。 この例では、ストアド関数は kusto.Myfunction を使用して呼び出されます。