Create an IoT Hub data connection for Azure Data Explorer by using C# (Preview)
Azure Data Explorer is a fast and highly scalable data exploration service for log and telemetry data. Azure Data Explorer offers ingestion (data loading) from event hubs, IoT hubs, and blobs written to blob containers.
In this article, you create an IoT Hub data connection for Azure Data Explorer by using C#.
Prerequisites
- Visual Studio 2019, download and use the free Visual Studio 2019 Community Edition. Enable Azure development during the Visual Studio setup.
- An Azure subscription. Create a free Azure account.
- Create a cluster and database.
- Create table and column mapping.
- Set database and table policies (optional).
- Create an IoT Hub with a shared access policy configured.
Install C# NuGet
- Install the Microsoft.Azure.Management.Kusto NuGet package.
Authentication
To run the following example, you need an Azure Active Directory (Azure AD) application and service principal that can access resources. To create a free Azure AD application and add role assignment at the subscription level, see Create an Azure AD application. You also need the directory (tenant) ID, application ID, and client secret.
Add an IoT Hub data connection
The following example shows you how to add an IoT Hub data connection programmatically. See connect Azure Data Explorer table to IoT Hub for adding an Iot Hub data connection using the Azure portal.
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";//Application ID
var clientSecret = "xxxxxxxxxxxxxx";//Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var authenticationContext = new AuthenticationContext($"https://login.windows.net/{tenantId}");
var credential = new ClientCredential(clientId, clientSecret);
var result = await authenticationContext.AcquireTokenAsync(resource: "https://management.core.windows.net/", clientCredential: credential);
var credentials = new TokenCredentials(result.AccessToken, result.AccessTokenType);
var kustoManagementClient = new KustoManagementClient(credentials)
{
SubscriptionId = subscriptionId
};
var resourceGroupName = "testrg";
//The cluster and database that are created as part of the Prerequisites
var clusterName = "mykustocluster";
var databaseName = "mykustodatabase";
var dataConnectionName = "myeventhubconnect";
//The IoT hub that is created as part of the Prerequisites
var iotHubResourceId = "/subscriptions/xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx/resourceGroups/xxxxxx/providers/Microsoft.Devices/IotHubs/xxxxxx";
var sharedAccessPolicyName = "iothubforread";
var consumerGroup = "$Default";
var location = "Central US";
//The table and column mapping are created as part of the Prerequisites
var tableName = "StormEvents";
var mappingRuleName = "StormEvents_CSV_Mapping";
var dataFormat = DataFormat.CSV;
await kustoManagementClient.DataConnections.CreateOrUpdate(resourceGroupName, clusterName, databaseName, dataConnectionName,
new IotHubDataConnection(iotHubResourceId, consumerGroup, sharedAccessPolicyName, tableName: tableName, location: location, mappingRuleName: mappingRuleName, dataFormat: dataFormat));
| Setting | Suggested value | Field description |
|---|---|---|
| tenantId | xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx | Your tenant ID. Also known as directory ID. |
| subscriptionId | xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx | The subscription ID that you use for resource creation. |
| clientId | xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx | The client ID of the application that can access resources in your tenant. |
| clientSecret | xxxxxxxxxxxxxx | The client secret of the application that can access resources in your tenant. |
| resourceGroupName | testrg | The name of the resource group containing your cluster. |
| clusterName | mykustocluster | The name of your cluster. |
| databaseName | mykustodatabase | The name of the target database in your cluster. |
| dataConnectionName | myeventhubconnect | The desired name of your data connection. |
| tableName | StormEvents | The name of the target table in the target database. |
| mappingRuleName | StormEvents_CSV_Mapping | The name of your column mapping related to the target table. |
| dataFormat | csv | The data format of the message. |
| iotHubResourceId | Resource ID | The resource ID of your IoT hub that holds the data for ingestion. |
| sharedAccessPolicyName | iothubforread | The name of the shared access policy that defines the permissions for devices and services to connect to IoT Hub. |
| consumerGroup | $Default | The consumer group of your event hub. |
| location | Central US | The location of the data connection resource. |
Clean up resources
To delete the data connection, use the following command:
kustoManagementClient.DataConnections.Delete(resourceGroupName, clusterName, databaseName, dataConnectionName);