ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SQL Assessment API 数据变换 nameValuePairs:将键值对行集转置为列

SQL Assessment API 数据变换 nameValuePairs:将键值对行集转置为列 示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载SQL Assessment API 通过探针Probe采集 SQL Server 配置与运行数据而探针返回的行集并不总能直接满足检查Check条件的计算需求。nameValuePairs正是为此设计的一种数据变换Data transformation它从探针或上一个变换返回的所有数据行中取出两列把这张“两列表”整体转置为一行一列的结果表从而把键值对形态的原始数据整理成易于引用的列。读完本文你将掌握nameValuePairs的三个参数、转置与重命名的确切语义并能直接复用仓库默认规则集中SysConfiguration探针的真实配置把sys.configurations的行集结果变成可被条件表达式引用的配置变量。一、nameValuePairs在数据变换管线中的位置SQL Assessment API 的数据流是一条可组合的管线探针Probe返回原始行集检查通过 ProbeReference 引用探针并在引用上通过transform属性声明一个或多个数据变换变换后的数据才进入条件表达式计算。正如 DataTransformation.md 所强调的Sometimes data needs to go through series of transformations.当数据以不方便的形态返回时可以在探针实现里套用变换。以sys.dm_os_host_info返回的host_release字符串为例用parse变换比在 T-SQL 里手写解析更清晰、更易维护。同样的道理也适用于键值对数据许多 DMV 和配置查询返回的是“一行一个指标、两列名称 值”的结构而检查条件需要的是“一行一个对象、每列一个指标”的结构。nameValuePairs就是完成这种行列转置的专用变换其官方定义是From all data rows returned from probes or previous transformations takes two columns and transposes this two-column table.即从探针或先前变换返回的所有数据行中取两列并把这张两列表转置。它是 数据变换参考目录 中与aggregate、defaultValue、noData、parse、performance、rename、toString并列的一种独立变换类型。二、参数详解nameValuePairs的全部参数如下表所示摘自 nameValuePairs.md| 参数 | 是否必填 | 类型 | 说明 | | - | - | - | - | |keyColumn| 必填 | String | 用作转换依据的键列名 | |valueColumn| 必填 | String | 用作转换取值来源的值列名 | |map| 必填 | Map | 将keyColumn的取值映射为结果列名 |三个参数的分工非常明确keyColumn指定哪一列充当“键”键的每个取值最终都会成为结果表的一个列名或经map重命名后的列名valueColumn指定哪一列充当“值”键所在行的这一列取值会被填入新列对应的单元格map是一个对象以“键列取值 → 新列名”的形式提供重命名规则只作用于keyColumn中出现的值。transform属性既可以是一个变换对象也可以是一个变换数组。仓库默认规则集SysConfiguration探针中就以数组形式串联了两个变换见下文第五节这说明nameValuePairs完全可以作为多级变换管线中的一环。三、转置与重命名的确切语义依据官方说明nameValuePairs的行为可拆解为三条规则键列取值生成列名从keyColumn中取出一个名称用它创建一列该列的值取自同一行valueColumn的对应值map 参与重命名当提供了map时keyColumn的取值被当作查找键在map中找到的新名字才是最终列名未命中 map 的键保持原名map中没有出现过的键列取值直接以原始值作为列名保留而两列之外的其他列如示例中的Description被完全丢弃。换句话说map是白名单式的重命名字典而不是过滤器——映射表只负责“改名”不负责“剔除”。凡是map未覆盖的键其列照常生成只是列名保持原样。四、完整示例从源表到结果表官方文档给出了一个端到端示例先看源表MetricMeasuredValueDescriptionCPU Utilization0.65Average CPU utilizationNOPM120Number of new orders per minuteDisk Free Space15Disk free spaceTPM11236Number of transactions per minute对应的变换配置transform: { type: nameValuePairs, keyColumn: Metric, valueColumn: MeasuredValue, map: { CPU Utilization: cpu_utilization, Disk Free Space: disk_space } }得到的结果表cpu_utilizationNOPMdisk_spaceTPM0.651201511236对照三条语义规则可以清晰看到源表 4 行 × 3 列变换后变为 1 行 × 4 列行与列发生了对调CPU Utilization与Disk Free Space被map分别重命名为cpu_utilization与disk_spaceNOPM与TPM未出现在map中列名保持原样Description列既不是keyColumn也不是valueColumn因此被整体省略。变换后检查的条件表达式就可以直接引用cpu_utilization、disk_space这类变量了。五、仓库中的真实应用SysConfiguration探针nameValuePairs最典型的生产级用例就在默认规则集 ruleset.json 的SysConfiguration探针中ruleset.json。该探针面向 Windows/Linux 平台、SqlServer与ManagedInstance引擎版本、SQL Server 11.0 及以上版本其 SQL 实现直接查询sys.configurationsSELECT [name], [value] FROM sys.configurations WITH(NOLOCK)sys.configurations返回的正是典型的键值对行集每行一个配置项name附带其当前值value。探针实现中随后套用了nameValuePairs变换把上百个配置项从“行”转成“列”并用map统一规范为下划线命名风格implementation: { query: SELECT [name], [value] FROM sys.configurations WITH(NOLOCK), transform: [ { type: nameValuePairs, keyColumn: name, valueColumn: value, map: { allow updates: allow_updates, Ad Hoc Distributed Queries: ad_hoc_distributed_queries, affinity mask: affinity_mask, affinity I/O mask: affinity_io_mask, affinity64 mask: affinity64_mask, affinity64 I/O mask: affinity64_io_mask, automatic soft-NUMA disabled: automatic_soft_NUMA_disabled, backup compression default: backup_compression, blocked process threshold (s): block_threshold, clr enabled: clr_enabled, cost threshold for parallelism: cost_threshold_for_parallelism, cross db ownership chaining: cross_db_ownership_chaining, default trace enabled: default_trace_enabled, index create memory (KB): index_create_memory, lightweight pooling: lightweight_pooling, locks: locks, max worker threads: max_worker_threads, max degree of parallelism: max_dop, max server memory (MB): max_server_memory, min memory per query (KB): min_memory_per_query, min server memory (MB): min_server_memory, network packet size (B): network_packet_size, Ole Automation Procedures: ole_automation_procedures, optimize for ad hoc workloads: optimize_for_ad_hoc_workloads, priority boost: priority_boost, query wait (s): query_wait, recovery interval (min): recovery_interval, remote access: remote_access, remote admin connections: remote_admin_connections, remote login timeout (s): remote_login_timeout, remote query timeout (s): remote_query_timeout, scan for startup procs: startup_stored_procedures, xp_cmdshell: xp_cmdshell, fill factor (%): fill_factor, disallow results from triggers: disallow_results_from_triggers, nested triggers: nested_triggers, server trigger recursion: server_trigger_recursion, open objects: open_objects, user connections: user_connections, max full-text crawl range: max_full_text_crawl_range, ft crawl bandwidth (max): ft_crawl_bandwidth_max, ft crawl bandwidth (min): ft_crawl_bandwidth_min, ft notify bandwidth (max): ft_notify_bandwidth_max, ft notify bandwidth (min): ft_notify_bandwidth_min, show advanced options: show_advanced_options, cursor threshold: cursor_threshold, set working set size: set_working_set_size, user options: user_options, max text repl size (B): max_text_repl_size, media retention: media_retention, query governor cost limit: query_governor_cost_limit, transform noise words: transform_noise_words, precompute rank: precompute_rank, PH timeout (s): PH_timeout, in-doubt xact resolution: in_doubt_xact_resolution, common criteria compliance enabled: common_criteria_compliance_enabled, EKM provider enabled: EKM_provider_enabled, filestream access level: filestream_access_level, access check cache bucket count: access_check_cache_bucket_count, access check cache quota: access_check_cache_quota, Agent XPs: Agent_XPs, Database Mail XPs: Database_Mail_XPs, SMO and DMO XPs: SMO_and_DMO_XPs, Replication XPs: Replication_XPs, contained database authentication: contained_database_authentication, remote proc trans: remote_proc_trans, c2 audit mode: c2_audit_mode, default language: default_language, default full-text language: default_full_text_language, two digit year cutoff: two_digit_year_cutoff } }, { type: defaultValue, map: { automatic_soft_NUMA_disabled: 0 } } ] }这个真实案例传递了几个关键信息map命名规范源列名sys.configurations.name的取值大多是带空格的英文短语甚至包含括号与单位如(s)、(MB)、(B)、(%)直接作为变量名既不美观也容易出错map统一把它们映射为snake_case形式max degree of parallelism→max_dop、max server memory (MB)→max_server_memory便于在条件表达式中以变量名引用与后续变换串联transform是数组时按顺序执行nameValuePairs转置后紧跟着一个 defaultValue 变换为automatic_soft_NUMA_disabled在缺失时补默认值0——说明转置产物可以继续被其他变换消费未映射键兜底映射表覆盖了绝大多数常见配置项未列出的配置项仍会以原始名称为列保留不会导致数据丢失。六、使用建议与边界结合官方文档语义与仓库实践使用nameValuePairs时有几点值得注意确保键列取值唯一变换的语义是把每个键值变成一列官方文档未规定keyColumn出现重复值时的行为。因此探针查询应保证键列唯一如sys.configurations的name天然唯一若原始行集可能存在重复键可考虑先用 aggregate 变换按键分组归并再做转置。map只重命名、不裁剪未命中map的键仍会保留为列若希望丢弃某些键需要在变换管线中另行处理如配合aggregate的“仅保留指定列”特性或rename类操作。在探针引用层面复用正如 ProbeReference.md 所述变换可以加在探针引用probe reference上以提升探针复用率——同一个探针被多个检查引用时每个检查可以套用各自的变换。nameValuePairs同样适用于这种场景探针只负责返回键值对原始数据转置成哪种列布局由各检查的引用决定。配置文件的整体位置transform是探针实现的implementation对象中的属性见 JSONConfiguration.md也出现在检查的探针引用中默认规则集文件 ruleset.json 是查看全部真实变换配置的最佳入口配套的 DefaultRuleset.csv 提供了可读的规则说明。七、相关数据变换一览nameValuePairs并非孤立的工具它与同目录下的其他变换共同构成完整的数据整形能力数据变换参考变换用途aggregate对指定列做聚合count、min、max、sum、join等支持按列分组类似 T-SQLGROUP BYdefaultValue为缺失列填充默认值parse用正则表达式从字符串列中提取命名捕获组performance从性能计数器样本中计算派生值平均、速率、比率等rename重命名结果列toString将值转为字符串noData处理无数据返回的情况nameValuePairs将两列表转置为一行多列本文主题实际编写自定义规则时这些变换可以像SysConfiguration探针那样任意组合形成“采集 → 转置 → 补默认值 → 计算条件”的完整评估链路。若想从零了解规则与探针的编写方式可参考 CreatingCustomRules 教程 与 Rules and Probes 说明。赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐es-toolkit/compat 的 fromPairs 函数将键值对数组转换为对象es toolkit/compat 的 fromPairs 函数将键值对数组转换为对象 fromPairs 是 es toolkit 兼容层 es tool前端后端CSRedis在ASP.NET Core中的应用集成IDistributedCache的快速指南CSRedis在ASP.NET Core中的应用集成IDistributedCache的快速指南 CSRedis是一款功能强大的.NET Redis客户端支Hap QuickTime视频编码器实现10倍性能提升的硬件加速视频编解码架构设计指南Hap QuickTime视频编码器实现10倍性能提升的硬件加速视频编解码架构设计指南 Hap QuickTime视频编码器是一款专为现代图形硬件优化的开源视示例工程数据库教程后端上一篇3种突破性方案彻底解决Buzz离线语音转录模型下载难题下一篇Stacks一站式全栈开发框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表