你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:使用 Visual Studio Code 创建流分析作业

本快速入门介绍如何在本地计算机上使用用于 Visual Studio Code 的 Azure 流分析 (ASA) 工具扩展创建、运行和提交 ASA 作业。 了解如何生成一个 ASA 作业,该作业从 IoT 中心读取实时流数据,并筛选温度高于 27° 的事件。 输出结果将发送到 Blob 存储中的文件。 在本快速入门中使用的输入数据由 Raspberry Pi 联机模拟器生成。

注意

Visual Studio Code 工具不支持“中国东部”、“中国北部”、“德国中部”和“德国东北部”区域中的作业。

先决条件

安装 Azure 流分析工具扩展

  1. 打开 Visual Studio Code (VS Code)。

  2. 在左窗格上的“扩展”中搜索“流分析”,然后选择“Azure 流分析工具”扩展对应的“安装”。

    该屏幕截图显示了 Visual Studio Code 的“扩展”页,其中包含安装流分析扩展的选项。

  3. 安装后,在活动栏上选择 Azure 图标,并登录到 Azure。

    该屏幕截图显示了如何登录到 Azure。

  4. 登录后,可以在 Azure 帐户下看到订阅。

注意

每次打开 VS Code 时,ASA 工具扩展都会自动登录。 如果你的帐户已启用双重身份验证,则我们建议使用手机身份验证,而不要使用 PIN 码。 若要注销 Azure 帐户,请按 Ctrl + Shift + P 并输入 Azure: Sign Out

对输入数据进行准备

在定义流分析作业之前,应该准备输入数据。 实时传感器数据将引入到 IoT 中心,随后配置为作业输入。 若要准备作业所需的输入数据,请执行以下步骤:

  1. 登录 Azure 门户

  2. 选择“创建资源”>“物联网”>“IoT 中心”。

    该屏幕截图显示了 Iot 中心的“创建资源”页。

  3. 在“IoT 中心”页中,输入以下信息:

    • 订阅 - 选择 Azure 订阅。
    • 资源组 - 选择现有资源组或创建新资源组。
    • IoT 中心名称 - 输入你的 IoT 中心的名称。
    • 区域 - 选择离你最近的区域。

    该屏幕截图显示了要用于创建的“IoT 中心”页。

  4. 转到“管理”页,对于“定价和缩放层”,请选择“F1: 免费层”(如果在订阅中仍可用)。 有关详细信息,请参阅 Azure IoT 中心定价

    屏幕截图显示了 IoT 中心管理页。

  5. 选择“查看 + 创建”。 查看 IoT 中心信息,然后选择“创建”。 此过程可能需要几分钟时间来部署 IoT 中心。

  6. 创建 IoT 中心后,选择“转到资源”以导航到“IoT 中心”页。 '

  7. 在“IoT 中心”页中,选择左侧菜单中的“设备”,然后选择“+ 添加设备”。

    该屏幕截图显示了“设备”页上的“添加设备”按钮。

  8. 输入设备 ID,然后选择“保存”。

    该屏幕截图显示了“添加设备”页。

  9. 创建设备后,应该会在“IoT 设备”列表中看到该设备。 如果未看到,请选择页面上的“刷新”按钮。

    该屏幕截图显示了“设备”页上的设备选择。

  10. 从列表中选择自己的设备。 复制主要连接字符串,并将其保存到记事本,供稍后使用。

    该屏幕截图显示了所创建设备的连接字符串。

运行 IoT 模拟器

  1. 在新的浏览器选项卡中打开 Raspberry Pi Azure IoT 联机模拟器

  2. 将第 15 行的占位符替换为之前保存的 IoT 中心设备连接字符串。

  3. 选择“运行”。 输出会显示传感器数据和发送到 IoT 中心的消息。

    该屏幕截图显示了 Raspberry Pi Azure IoT 联机模拟器(带输出)

创建 Blob 存储

  1. 从 Azure 门户的左上角选择“创建资源”>“存储”>“存储帐户”

    该屏幕截图显示了“创建存储帐户”菜单。

  2. 在“创建存储帐户”窗格中,输入存储帐户名称、位置和资源组。 选择与创建的 IoT 中心相同的位置和资源组。 然后选择“查看并创建”以创建存储帐户。

    该屏幕截图显示了“创建存储帐户”页。

  3. 在“存储帐户”页上,选择左侧菜单中的“容器”,然后在命令栏上选择“+ 容器”。

    该屏幕截图显示了“容器”页。

  4. 在“新建容器”页中,提供容器的名称,将“公共访问级别”保留为“专用(无匿名访问)”,然后选择“确定”。

    该屏幕截图显示了 blob 容器创建页。

创建流分析项目

  1. 在 Visual Studio Code 中,按 Ctrl+Shift+P 并输入“ASA: 创建新项目”。

    该屏幕截图显示了在命令面板中选择“ASA: 创建新项目”。

  2. 输入项目名称(例如 myASAproj),然后选择项目的文件夹

    该屏幕截图显示了输入 ASA 项目名称。

  3. ASA 项目将添加到你的工作区中。 该项目由以下三个文件夹组成:“输入”、“输出”和“函数”。 它还具有查询脚本 (*.asaql)、JobConfig.json 文件和 asaproj.json 配置文件

    该屏幕截图显示了 Visual Studio Code 中的流分析项目文件。

    asaproj.json 文件包含用于将流分析作业提交到 Azure 的输入、输出和作业配置设置。

    注意

    从命令面板添加输入和输出时,相应路径将自动添加到 asaproj.json 中。 如果直接在磁盘上添加或者删除输入或输出,则需要在 asaproj.json 中手动添加或删除。 可以选择将输入和输出放在一个放置,然后通过在每个 asaproj.json 文件中指定路径,在不同的作业中引用这些输入和输出

定义转换查询

  1. 打开 myASAproj.asaql 文件并添加以下查询:

    SELECT *
    INTO Output
    FROM Input
    WHERE Temperature > 27
    

    该屏幕截图显示了转换查询。

配置作业输入

  1. 右键单击流分析项目中的“输入”文件夹。 然后从上下文菜单中选择“ASA:添加输入”。

    该屏幕截图显示了 Visual Studio Code 中的“ASA: 添加输入”菜单。

    或按 Ctrl+Shift+P 打开命令面板,然后输入“ASA: 添加输入”。

  2. 选择“IoT 中心”作为输入类型。

    该屏幕截图显示了在 VS Code 命令面板中选择 IoT 中心。

  3. 从下拉菜单中选择 ASA 脚本 *.asaql 和“Azure 订阅”,然后按 Enter。

  4. 在 “输入”文件夹下,可以看到已创建 IoTHub1.json 文件。 将设置替换为以下建议值,并保留此处未提到的字段的默认值。

    设置 建议的值 说明
    名称 输入 此输入名称用于查询中的 FROM 语句。
    IotHubNamespace spiothub IoT 中心的名称。 如果选择“从订阅中选择”,则会自动检测 IoT 中心名称。
    SharedAccessPolicyName iothubowner

    屏幕截图显示了 VS Code 中的 IoT 中心配置。

  5. 选择“预览数据”以查看是否已为作业成功配置输入数据。 此操作将提取 IoT 中心的示例并在预览窗口中显示。

    该屏幕截图显示了 IoT 中心中输入数据的预览版。

配置作业输出

  1. 或按 Ctrl+Shift+P 打开命令面板,然后输入“ASA: 添加输出”。

  2. 选择“Data Lake Storage Gen2/Blob 存储”作为接收器类型。

  3. 使用此输出选择查询脚本。

  4. 输入 BlobStorage1 作为输出文件名。

  5. 使用以下值编辑设置。 对于下面未提到的字段,请保留默认值。

    设置 建议的值 说明
    名称 输出 此输出名称用于查询中的 INTO 语句。
    存储帐户 spstorageaccount0901 选择或输入存储帐户的名称。 如果在同一订阅中创建存储帐户名称,则会自动将其删除。
    容器 spcontainer 选择你在存储帐户中创建的现有容器。

该屏幕截图显示了流分析作业的输出配置。

编译脚本并提交到 Azure

脚本编译检查语法并生成 Azure 资源管理器模板,以便自动部署。

  1. 右键单击脚本,然后选择“ASA:Compile Script

    该屏幕截图显示了 VS Code 中的流分析资源管理器中的脚本编译选项。

  2. 编译完成后,可以在项目下看到一个 Deploy 文件夹,其中包含两个 Azure 资源管理器模板。 这两个文件用于自动部署。

    该屏幕截图显示了项目文件夹中生成的部署模板。

  3. 在查询编辑器中,选择“提交到 Azure”。

    屏幕截图显示了用于将流分析作业提交到 Azure 的“提交作业”按钮。

    然后按照说明完成该过程:选择订阅>选择作业>创建新作业>输入作业名称>选择资源组和区域。

  4. 选择“发布到 Azure”,完成相应步骤。 等待它打开新选项卡“云作业视图”,其中显示作业状态。

    屏幕截图显示了 VS Code 中的“发布到 Azure”按钮。

启动流分析作业并检查输出

  1. 在“云作业视图”选项卡上,选择“启动”以在云中运行作业。 此过程可能需要几分钟才能完成。

    该屏幕截图显示了“云视图”页中的“启动作业”按钮。

  2. 如果作业成功启动,作业状态将更改为“正在运行”。 可以看到显示 ASA 作业运行情况的逻辑图。

    显示 VS Code 中作业运行状态的屏幕截图。

  3. 若要查看输出结果,可以在 Visual Studio Code 扩展或 Azure 门户中打开 Blob 存储。

    该屏幕截图显示了 Blob 容器中的输出文件。

    下载并打开该文件以查看输出。

    {"messageId":11,"deviceId":"Raspberry Pi Web Client","temperature":28.165519323167562,"humidity":76.875393581654379,"EventProcessedUtcTime":"2022-09-01T22:53:58.1015921Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:52:57.6250000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:52:57.6290000Z"}}
    {"messageId":14,"deviceId":"Raspberry Pi Web Client","temperature":29.014941877871451,"humidity":64.93477299527828,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:03.6100000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:03.6140000Z"}}
    {"messageId":17,"deviceId":"Raspberry Pi Web Client","temperature":28.032846241745975,"humidity":66.146114343897338,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:19.5960000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:19.5830000Z"}}
    {"messageId":18,"deviceId":"Raspberry Pi Web Client","temperature":30.176185593576143,"humidity":72.697359909427419,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:21.6120000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:21.6140000Z"}}
    {"messageId":20,"deviceId":"Raspberry Pi Web Client","temperature":27.851894248213021,"humidity":71.610229530268214,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:25.6270000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:25.6140000Z"}}
    {"messageId":21,"deviceId":"Raspberry Pi Web Client","temperature":27.718624694772238,"humidity":66.540445035685153,"EventProcessedUtcTime":"2022-09-01T22:53:58.2421545Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:53:48.0820000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:53:48.0830000Z"}}
    {"messageId":22,"deviceId":"Raspberry Pi Web Client","temperature":27.7849054424326,"humidity":74.300662748167085,"EventProcessedUtcTime":"2022-09-01T22:54:09.3393532Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:09.2390000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:09.2400000Z"}}
    {"messageId":28,"deviceId":"Raspberry Pi Web Client","temperature":30.839892925680324,"humidity":76.237611741451786,"EventProcessedUtcTime":"2022-09-01T22:54:47.8053253Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:47.6180000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:47.6150000Z"}}
    {"messageId":29,"deviceId":"Raspberry Pi Web Client","temperature":30.561040300759053,"humidity":78.3845172058103,"EventProcessedUtcTime":"2022-09-01T22:54:49.8070489Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:54:49.6030000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:54:49.5990000Z"}}
    {"messageId":31,"deviceId":"Raspberry Pi Web Client","temperature":28.163585438418679,"humidity":60.0511571297096,"EventProcessedUtcTime":"2022-09-01T22:55:25.1528729Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:24.9050000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:24.9120000Z"}}
    {"messageId":32,"deviceId":"Raspberry Pi Web Client","temperature":31.00503387156985,"humidity":78.68821066044552,"EventProcessedUtcTime":"2022-09-01T22:55:43.2652127Z","PartitionId":3,"EventEnqueuedUtcTime":"2022-09-01T22:55:43.0480000Z","IoTHub":{"MessageId":null,"CorrelationId":null,"ConnectionDeviceId":"MyASAIoTDevice","ConnectionDeviceGenerationId":"637976642928634103","EnqueuedTime":"2022-09-01T22:55:43.0520000Z"}}
    

清理资源

若不再需要资源组、流分析作业以及所有相关资源,请将其删除。 删除作业可避免对作业使用的流单元进行计费。 如果计划在将来使用该作业,可以先停止它,等到以后需要时再重启它。 如果不打算继续使用该作业,请按照以下步骤删除本快速入门创建的所有资源:

  1. 在 Azure 门户的左侧菜单中选择“资源组”,然后选择已创建资源的名称

  2. 在资源组页上,选择“删除”。 在文本框中输入要删除的资源的名称,然后选择“删除”

后续步骤

若要了解用于 Visual Studio Code 的 ASA 工具扩展,请继续阅读以下文章: