You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: articles/iot-operations/connect-to-cloud/howto-configure-data-lake.md
+165-9Lines changed: 165 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ ms.author: patricka
7
7
ms.topic: how-to
8
8
ms.custom:
9
9
- ignite-2023
10
-
ms.date: 04/15/2024
10
+
ms.date: 05/01/2024
11
11
12
12
#CustomerIntent: As an operator, I want to understand how to configure Azure IoT MQ so that I can send data from Azure IoT MQ to Data Lake Storage.
13
13
---
@@ -45,14 +45,16 @@ You can use the data lake connector to send data from Azure IoT MQ Preview broke
45
45
46
46
- An IoT MQ MQTT broker. For more information on how to deploy an IoT MQ MQTT broker, see [Quickstart: Deploy Azure IoT Operations Preview to an Arc-enabled Kubernetes cluster](../get-started/quickstart-deploy.md).
47
47
48
-
## Configure the data lake connector to send data to Microsoft Fabric OneLake using managed identity
48
+
## Configure to send data to Microsoft Fabric OneLake using managed identity
49
49
50
50
Configure a data lake connector to connect to Microsoft Fabric OneLake using managed identity.
51
51
52
52
1. Ensure that the steps in prerequisites are met, including a Microsoft Fabric workspace and lakehouse. The default *my workspace* can't be used.
53
53
54
54
1. Ensure that IoT MQ Arc extension is installed and configured with managed identity.
55
55
56
+
1. In Azure portal, go to the Arc-connected Kubernetes cluster and select **Settings** > **Extensions**. In the extension list, look for your IoT MQ extension name. The name begins with `mq-` followed by five random characters. For example, *mq-4jgjs*.
57
+
56
58
1. Get the *app ID* associated to the IoT MQ Arc extension managed identity, and note down the GUID value. The *app ID* is different than the object or principal ID. You can use the Azure CLI by finding the object ID of the managed identity and then querying the app ID of the service principal associated to the managed identity. For example:
57
59
58
60
```bash
@@ -90,7 +92,7 @@ Configure a data lake connector to connect to Microsoft Fabric OneLake using man
@@ -139,7 +141,7 @@ If your data shows in the *Unidentified* table:
139
141
140
142
The cause might be unsupported characters in the table name. The table name must be a valid Azure Storage container name that means it can contain any English letter, upper or lower case, and underbar `_`, with length up to 256 characters. No dashes `-` or space characters are allowed.
141
143
142
-
## Configure the data lake connector to send data to Azure Data Lake Storage Gen2 using SAS token
144
+
## Configure to send data to Azure Data Lake Storage Gen2 using SAS token
143
145
144
146
Configure a data lake connector to connect to an Azure Data Lake Storage Gen2 (ADLS Gen2) account using a shared access signature (SAS) token.
145
147
@@ -176,7 +178,7 @@ Configure a data lake connector to connect to an Azure Data Lake Storage Gen2 (A
## Configure to send data to Azure Data Explorer using managed identity
225
+
226
+
Configure the data lake connector to send data to an Azure Data Explorer endpoint using managed identity.
227
+
228
+
1. To deploy an Azure Data Explorer cluster, follow the **Full cluster** steps in the [Quickstart: Create an Azure Data Explorer cluster and database](/azure/data-explorer/create-cluster-and-database?tabs=full).
229
+
230
+
1. After the cluster is created, create a database to store your data.
231
+
232
+
1. You can create a table for given data via the Azure portal and create columns manually, or you can use [KQL](/azure/data-explorer/kusto/management/create-table-command) in the query tab.
233
+
234
+
For example:
235
+
.create table thermostat (
236
+
externalAssetId: string,
237
+
assetName: string,
238
+
CurrentTemperature: real,
239
+
Pressure: real,
240
+
MqttTopic: string,
241
+
Timestamp: datetime
242
+
)
243
+
timestamp: datetime
244
+
)
245
+
```
246
+
247
+
### Enable streaming ingestion
248
+
249
+
Enable streaming ingestion on your table and database. In the query tab, run the following command, substituting `<DATABASE_NAME>` with your database name:
### Add the managed identity to the Azure Data Explorer cluster
262
+
263
+
In order for the connector to authenticate to Azure Data Explorer, you must add the managed identity to the Azure Data Explorer cluster.
264
+
265
+
1. In Azure portal, go to the Arc-connected Kubernetes cluster and select **Settings** > **Extensions**. In the extension list, look for the name of your IoT MQ extension. The name begins with `mq-` followed by five random characters. For example, *mq-4jgjs*. The IoT MQ extension name is the same as the MQ managed identity name.
266
+
1. In your Azure Data Explorer database, select **Permissions** > **Add** > **Ingestor**. Search for the MQ managed identity name and add it.
267
+
268
+
For more information on adding permissions, see [Manage Azure Data Explorer cluster permissions](/azure/data-explorer/manage-cluster-permissions).
269
+
270
+
Now, you're ready to deploy the connector and send data to Azure Data Explorer.
271
+
272
+
### Example deployment file
273
+
274
+
Example deployment file for the Azure Data Explorer connector. Comments that beginning with `TODO` require you to replace placeholder settings with your information.
A *DataLakeConnector* is a Kubernetes custom resource that defines the configuration and properties of a data lake connector instance. A data lake connector ingests data from MQTT topics into Delta tables in a Data Lake Storage account.
@@ -233,7 +386,7 @@ The spec field of a *DataLakeConnector* resource contains the following subfield
233
386
- `instances`: The number of replicas of the data lake connector to run.
234
387
- `logLevel`: The log level for the data lake connector module. It can be one of `trace`, `debug`, `info`, `warn`, `error`, or `fatal`.
235
388
- `databaseFormat`: The format of the data to ingest into the Data Lake Storage. It can be one of `delta` or `parquet`.
236
-
- `target`: The target field specifies the destination of the data ingestion. It can be `datalakeStorage`, `fabricOneLake`, or `localStorage`.
389
+
- `target`: The target field specifies the destination of the data ingestion. It can be `datalakeStorage`, `fabricOneLake`, `adx`, or `localStorage`.
237
390
- `datalakeStorage`: Specifies the configuration and properties of the local storage Storage account. It has the following subfields:
238
391
- `endpoint`: The URL of the Data Lake Storage account endpoint. Don't include any trailing slash `/`.
239
392
- `authentication`: The authentication field specifies the type and credentials for accessing the Data Lake Storage account. It can be one of the following.
@@ -276,7 +429,8 @@ The specification field of a DataLakeConnectorTopicMap resource contains the fol
276
429
- `name`: The name of the column in the Delta table.
277
430
- `format`: The data type of the column in the Delta table. It can be one of `boolean`, `int8`, `int16`, `int32`, `int64`, `uInt8`, `uInt16`, `uInt32`, `uInt64`, `float16`, `float32`, `float64`, `date32`, `timestamp`, `binary`, or `utf8`. Unsigned types, like `uInt8`, aren't fully supported, and are treated as signed types if specified here.
278
431
- `optional`: A boolean value that indicates whether the column is optional or required. This field is optional and defaults to false.
279
-
- `mapping`: JSON path expression that defines how to extract the value of the column from the MQTT message payload. Built-in mappings `$client_id`, `$topic`, and `$received_time` are available to use as columns to enrich the JSON in MQTT message body. This field is required.
432
+
- `mapping`: JSON path expression that defines how to extract the value of the column from the MQTT message payload. Built-in mappings `$client_id`, `$topic`, `$properties`, and `$received_time` are available to use as columns to enrich the JSON in MQTT message body. This field is required.
433
+
Use $propertiesfor MQTT user properties. For example, $properties.assetId represents the value of the assetId property from the MQTT message.
280
434
281
435
Here's an example of a *DataLakeConnectorTopicMap* resource:
282
436
@@ -320,7 +474,9 @@ spec:
320
474
mapping: $received_time
321
475
```
322
476
323
-
Stringified JSON like `"{\"SequenceNumber\": 4697, \"Timestamp\": \"2024-04-02T22:36:03.1827681Z\", \"DataSetWriterName\": \"thermostat-de\", \"MessageType\": \"ua-deltaframe\", \"Payload\": {\"temperature\": {\"SourceTimestamp\": \"2024-04-02T22:36:02.6949717Z\", \"Value\": 5506}, \"Tag 10\": {\"SourceTimestamp\": \"2024-04-02T22:36:02.6949888Z\", \"Value\": 5506}}}"` isn't supported and causes the connector to throw a *convertor found a null value* error. An example message for the `dlc` topic that works with this schema:
477
+
Stringified JSON like `"{\"SequenceNumber\": 4697, \"Timestamp\": \"2024-04-02T22:36:03.1827681Z\", \"DataSetWriterName\": \"thermostat-de\", \"MessageType\": \"ua-deltaframe\", \"Payload\": {\"temperature\": {\"SourceTimestamp\": \"2024-04-02T22:36:02.6949717Z\", \"Value\": 5506}, \"Tag 10\": {\"SourceTimestamp\": \"2024-04-02T22:36:02.6949888Z\", \"Value\": 5506}}}"` isn't supported and causes the connector to throw a *convertor found a null value* error.
478
+
479
+
An example message for the `dlc` topic that works with this schema:
> If the data schema is updated, for example a data type is changed or a name is changed, transformation of incoming data might stop working. You need to change the data table name if a schema change occurs.
Copy file name to clipboardExpand all lines: articles/iot-operations/connect-to-cloud/howto-configure-mqtt-bridge.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@ ms.subservice: mq
7
7
ms.topic: how-to
8
8
ms.custom:
9
9
- ignite-2023
10
-
ms.date: 11/15/2023
10
+
ms.date: 04/22/2024
11
11
12
12
#CustomerIntent: As an operator, I want to bridge Azure IoT MQ to another MQTT broker so that I can integrate Azure IoT MQ with other messaging systems.
Copy file name to clipboardExpand all lines: articles/iot-operations/connect-to-cloud/tutorial-connect-event-grid.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,7 +6,7 @@ ms.subservice: mq
6
6
ms.custom: devx-track-azurecli
7
7
ms.author: patricka
8
8
ms.topic: tutorial
9
-
ms.date: 02/28/2024
9
+
ms.date: 04/22/2024
10
10
11
11
#CustomerIntent: As an operator, I want to configure IoT MQ to bridge to Azure Event Grid MQTT broker PaaS so that I can process my IoT data at the edge and in the cloud.
0 commit comments