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

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

在需要实现引入和查询之间的低延迟时,流式引入对于加载数据非常有用。 对于以下情况,请考虑使用流式引入:

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

如果引入每个表的数据流很达(每小时超过 4 GB),请考虑使用批量引入

若要详细了解各种引入方法,请参阅数据引入概述

选择适当的流式引入类型

支持两种流式引入类型:

引入类型 说明
事件中心或 IoT 中心 中心配置为表流数据源。
有关如何进行这些设置的信息,请参阅事件中心
自定义引入 自定义引入要求编写一个使用 Azure Synapse 数据资源管理器客户端库之一的应用程序。
使用本主题中的信息配置自定义引入。 你可能还会发现 C# 流引入示例应用程序很有帮助。

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

条件 事件中心/IoT 中心 自定义引入
启动引入之后、数据可供查询之前的数据延迟 延迟更长 延迟更短
开发开销 快速轻松的设置,不产生开发开销 创建应用程序引入数据、处理错误和确保数据一致性的开发开销较高

注意

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

先决条件

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

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

  • 创建数据资源管理器数据库。

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

    2. 选择“+”(添加新资源)>“数据资源管理器池”,并使用以下信息:

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

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

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

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

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

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

性能和操作注意事项

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

  • 计算规范:流式引入性能和容量随数据资源管理器池大小的增加而扩展。 并发引入请求数量限制为每个核心六个。 例如,对于计算优化(大型)和存储优化(大型)等 16 核工作负载类型,支持的最大负载是 96 个并发引入请求。 对于计算优化(特小)等双核工作负载类型,支持的最大负载是 12 个并发引入请求。
  • 数据大小限制:流式引入请求的数据大小限制为 4 MB。
  • 架构更新:对流式引入服务进行架构更新(例如创建和修改表与引入映射)最长可能需要花费 5 分钟时间。 有关详细信息,请参阅流式引入和架构更改
  • 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 的数据提供程序。

后续步骤