在 Azure Synapse 数据资源管理器池(预览版)上配置流式引入

重要

Azure Synapse Analytics 数据资源管理器(预览版)将于 2025 年 10 月 7 日停用。 在此日期之后,Synapse 数据资源管理器上运行的工作负荷将被删除,关联的应用程序数据将丢失。 强烈建议迁移到 Microsoft Fabric 中的 Eventhouse

Microsoft云迁移工厂(CMF)计划旨在帮助客户迁移到 Fabric。 该计划向客户免费提供动手键盘资源。 这些资源在 6-8 周内分配,并具有预定义和同意的范围。 客户提名可以通过 Microsoft 帐户团队接受,或者直接提交《帮助请求》给 CMF 团队。

引入和查询之间需要低延迟时,流式引入可用于加载数据。 请考虑在以下方案中使用流式引入:

  • 需要小于一秒的延迟。
  • 需要优化多个表的操作处理,其中进入每个表的数据流相对较小(每秒几条记录),但总体数据引入量较大(每秒成千上万条记录)。

如果每个表中的数据流较高(每小时超过 4 GB),请考虑使用 批处理引入

若要详细了解不同的引入方法,请参阅 数据引入概述

选择适当的流式引入类型

支持两种流式引入类型:

引入类型 Description
事件中心IoT 中心 中心配置为表流数据源。
有关设置这些设置的信息,请参阅 事件中心
自定义导入 自定义引入要求编写使用其中一个 Azure Synapse 数据资源管理器 客户端库的应用程序。
使用本主题中的信息配置自定义数据导入。 还可以发现 C# 流式引入示例应用程序 很有用。

使用下表可帮助你选择适合你的环境的引入类型:

标准 事件中心/IoT 中心 自定义引入
引入启动与可用于查询的数据之间的数据延迟 延迟更长 更短的延迟
开发成本 快速而简单的设置,无需开发开销 建立应用程序以引入数据、确保数据一致性和处理错误需要高昂的开发开销

注释

如果 Synapse 工作区在启用了数据外泄保护的情况下适用托管虚拟网络,则将数据从事件中心引入数据资源管理器池将不起作用。

先决条件

  • 一份 Azure 订阅。 创建免费 Azure 帐户

  • 使用 Synapse StudioAzure 门户创建数据资源管理器池

  • 创建“Data Explorer”数据库。

    1. 在 Synapse Studio 的左窗格中,选择“数据”。

    2. 选择+(添加新资源)>数据探索池,并使用以下信息:

      设置 建议值 Description
      池名称 contosodataexplorer 要使用的数据资源管理器池的名称
      Name TestDatabase 该数据库名称在群集中必须是唯一的。
      默认保留期 365 保证数据可供查询的时间跨度(以天为单位)。 时间跨度从引入数据时算起。
      默认缓存期 31 将频繁查询的数据保存在 SSD 存储或 RAM 中(而不是长期存储)的时间跨度(以天为单位)。
    3. 选择“创建”以创建数据库。 创建过程通常需要不到一分钟的时间。

  • 获取查询和数据引入终结点。
    1. 在 Synapse Studio 的左侧窗格中,选择管理>数据资源管理器池

    2. 选择要用于查看其详细信息的数据资源管理器池。

      数据资源管理器池屏幕的屏幕截图,其中显示了现有池的列表。

    3. 记下查询和数据引入终结点。 在配置到数据资源管理器池的连接时,请使用查询终结点作为群集。 为数据引入配置 SDK 时,请使用数据引入终结点。

      “数据资源管理器池属性”窗格的屏幕截图,其中显示了“查询和数据引入 URI 地址”。

性能和操作注意事项

可能会影响流式引入的主要因素包括:

  • 计算规范:流式引入性能和容量随数据资源管理器池大小的增加而扩展。 并发引入请求数限制为每个核心 6 个。 例如,对于 16 个核心工作负荷类型(例如计算优化(大型)和存储优化(大型),最大支持的负载为 96 个并发引入请求。 对于两种核心工作负荷类型,例如计算优化(特小),支持的最大负载是 12 个并发引入请求。
  • 数据大小限制:流式引入请求的数据大小限制为 4 MB。
  • 架构更新:流式引入服务可能需要长达五分钟才能进行架构更新,例如创建和修改表和引入映射。 有关详细信息,请参阅 流式引入和架构更改
  • SSD 容量:在数据资源管理器池上启用流式引入,即使数据未通过流式引入,也会使用数据资源管理器池计算机的本地 SSD 磁盘的一部分进行流式引入数据,并减少可用于热缓存的存储。

在数据资源管理器池上启用流式引入

在使用流式引入之前,必须在数据资源管理器池上启用该功能并定义 流式引入策略。 可以在 创建数据资源管理器池时启用该功能,或 将其添加到现有的数据资源管理器池

警告

在启用流式引入之前查看 限制

创建新的数据资源管理器池时启用流式引入

使用 Azure Synapse Studio 或 Azure 门户创建新的数据资源管理器池时,可以启用流式引入。

使用 Synapse Studio 创建数据资源管理器池中的步骤创建数据资源管理器池时,在“其他设置”选项卡中,选择“已启用>”。

在 Azure Synapse 数据资源管理器中创建数据资源管理器池时启用流式引入。

在现有数据探索者池上启用流式引入

如果有一个现成的数据资源管理器池,可以使用 Azure 门户启用流式引入。

  1. 在 Azure 门户中,转到数据资源管理器池。
  2. “设置”中,选择“ 配置”。
  3. “配置 ”窗格中,选择 “打开 ”以启用 流式引入
  4. 选择“保存”

创建目标表并定义策略

创建一个表来接收流式引入数据,并使用 Azure Synapse Studio 或 Azure 门户定义其相关策略。

  1. 在 Synapse Studio 的左侧窗格中,选择“开发”。

  2. KQL 脚本下,选择+(添加新资源)>KQL 脚本。 可在右侧窗格中命名脚本。

  3. 在“连接到”菜单中,选择“contosodataexplorer”。

  4. 在“使用数据库”菜单中,选择“TestDatabase”。

  5. 粘贴以下命令,然后选择“运行”以创建表。

    .create table TestTable (TimeStamp: datetime, Name: string, Metric: int, Source:string)
    
  6. 将以下命令之一复制到 “查询”窗格中 ,然后选择“ 运行”。 这会定义对创建的表或包含表的数据库的 流式引入策略

    小窍门

    在数据库级别定义的策略适用于数据库中的所有现有表和将来表。

    • 若要在创建的表上定义策略,请使用:

      .alter table TestTable policy streamingingestion enable
      
    • 若要在包含所创建表的数据库上定义策略,请使用:

      .alter database StreamingTestDb policy streamingingestion enable
      

创建流式引入应用程序,以将数据引入数据资源管理器池

使用首选语言创建用于将数据引入到数据资源管理器池的应用程序。 对于 poolPath 变量,请使用在 先决条件中记下的查询终结点。

using Kusto.Data;
using Kusto.Ingest;
using System.IO;
using Kusto.Data.Common;

namespace StreamingIngestion
{
    class Program
    {
        static void Main(string[] args)
        {
            string poolPath = "https://<Poolname>.<WorkspaceName>.kusto.windows.net";
            string appId = "<appId>";
            string appKey = "<appKey>";
            string appTenant = "<appTenant>";
            string dbName = "<dbName>";
            string tableName = "<tableName>";

            // Create Kusto connection string with App Authentication
            var csb =
                new KustoConnectionStringBuilder(poolPath)
                    .WithAadApplicationKeyAuthentication(
                        applicationClientId: appId,
                        applicationKey: appKey,
                        authority: appTenant
                    );

            // Create a disposable client that will execute the ingestion
            using (IKustoIngestClient client = KustoIngestFactory.CreateStreamingIngestClient(csb))
            {
                // Initialize client properties
                var ingestionProperties =
                    new KustoIngestionProperties(
                        databaseName: dbName,
                        tableName: tableName
                    );

                // Ingest from a compressed file
                var fileStream = File.Open("MyFile.gz", FileMode.Open);
                // Create source options
                var sourceOptions = new StreamSourceOptions()
                {
                    CompressionType = DataSourceCompressionType.GZip,
                };
                // Ingest from stream
                var status = client.IngestFromStreamAsync(fileStream, ingestionProperties, sourceOptions).GetAwaiter().GetResult();
            }
        }
    }
}

在数据资源管理器池上禁用流式引入

警告

禁用流式引入可能需要几个小时。

在数据资源管理器池上禁用流式引入之前,请从所有相关表和数据库中删除 流式引入策略 。 删除流式引入策略会触发数据资源管理器池中的数据重新排列。 流式引入数据将从初始存储移到列存储中的永久存储(盘区或分片)。 此过程可能需要几秒钟到几个小时,具体取决于初始存储中的数据量。

删除流式引入策略

可以使用 Azure Synapse Studio 或 Azure 门户删除流式引入策略。

  1. 在 Synapse Studio 的左侧窗格中,选择“开发”。

  2. KQL 脚本下,选择+(添加新资源)>KQL 脚本。 可在右侧窗格中命名脚本。

  3. 在“连接到”菜单中,选择“contosodataexplorer”。

  4. 在“使用数据库”菜单中,选择“TestDatabase”。

  5. 粘贴以下命令,然后选择“运行”以创建表。

    .delete table TestTable policy streamingingestion
    
  6. 在 Azure 门户中,转到数据资源管理器池。

  7. “设置”中,选择“ 配置”。

  8. “配置 ”窗格中,选择 “打开 ”以启用 流式引入

  9. 选择“保存”

局限性

  • 如果数据库本身或其任何表已定义并启用流式引入策略,则数据库不支持数据库游标
  • 必须预先创建数据映射,以便在流式引入中使用。 单个流式引入请求不能容纳内联数据映射。
  • 盘区标记不能在流式引入数据上设置。
  • 更新策略。 更新策略只能引用源表中新引入的数据,而不能引用数据库中的任何其他数据或表。
  • 如果对数据库的任何表使用流式引入,则不能将此数据库用作关注者数据库的领导者,也不能用作 Azure Synapse Analytics Data Share 的数据提供程序。

后续步骤