1 关注者 · 508 帖子

SQL 是在关系数据库中存储、操作和检索数据的标准语言。

新增
文章 Nicky Zhu · 八月 29 3m read

IRIS数据建模的决策框架。

关于选用哪种模型的决策涉及多方面因素。 我建议分别对每个维度进行评分,然后将结果相乘。 根据您偏好的评分方式,得分最高或最低的模型胜出。 我看到了这些维度,但具体方面可能会使列表进一步扩展。

  • 开发人员在 SQL、面向对象和Globals方面的技能
  • 维护人员和运维人员在 SQL、面向对象和Globals方面的技能
  • 与 SQL、面向对象、Globals相关的数据文化
    • 我曾遇到过完全拒绝使用SQL的客户
  • 开发和测试所需的时间
  • 需存储在SQL、面向对象和Globals中的结构复杂度
  • 访问速度
  • 存储消耗
  • 数据类型和质量检查
  • 对变更和增强的灵活性…… 
  • 更多

SQL的技术维度

  • 若仅包含简单列,生成 CREATE TABLE 语句的速度会很快

    • 但添加外键或引用其他表可能会带来挑战
  • 访问速度仅对大型表重要,且受以下因素影响

  • 存储空间消耗

    • 您可以将其完全交给代码生成器处理,几乎无需干预
    • 在后台,每张表都对应一个 Object 类
    • 以及一组可供使用的Globals
  • 要提高访问速度,需要巧妙地建立索引

  • 您可以对标准数据类型进行全面检查

  • 灵活性

    • 仅需添加一列便十分简单
    • 更复杂的更改可能会让人头疼不已

对象的技术维度

  • 利用现有的工具,创建一个对象类是一件轻而易举的事。

0
0 13
新增
文章 Lilian Huang · 八月 28 10m read

本系列的第一部分。第二部分将介绍完整的工具目录。第三部分将介绍 ObjectScript 技能。第四部分将介绍基准测试以及如何衡量实际的改进效果。


隐藏在注释中的问题

托马斯·马祖尔(Thomas Mazur)关于 VS Code 生产力——Peacock、作用域工作区文件、Copilot 代理模式——的 博文《青蛙、鸡、AI 和 VS Code》 在评论区揭示了一个更尖锐的问题。皮耶特罗·迪·莱奥(Pietro Di Leo)和 Mike.W 指出,当你在 VS Code 中进行服务器端开发时, isfs:// 大多数 IRIS 生产环境所使用的“工作区”中,Copilot 只能看到编辑器中打开的文件,无法对虚拟文件系统进行索引。对于拥有数千个类的成熟 IRIS 应用程序而言,AI 的工作效果就像是透过钥匙孔观察一样。

John Murray 向大家推荐了我正在开发的项目——iris-agentic-dev——并指出目前开发者社区中尚无相关文章。因此,本文将阐述:该问题产生的原因、该工具如何解决该问题,以及如何在约五分钟内完成部署。


为什么 AI 无法“看到”你的命名空间

当你打开一个 isfs:// 工作区时,你的 IRIS 类存储在服务器上,而非本地磁盘。

0
0 15
文章 Nicky Zhu · 八月 19 17m read

处理遗留代码时的差异与注意事项

刚开始接触 ObjectScript 时,我编写的大部分代码都遵循了 InterSystems 的现代编程模式。我使用类、方法、REST 服务、互操作性生产、JSON 对象以及 %Status 值。

与此同时,我负责维护的生产系统中,很大一部分代码采用的编写风格却截然不同。

该系统使用了例程、标签、global、缩写命令、“点-do”语法、共享局部变量以及错误处理模式——这些在基于类的 ObjectScript 普及之前就已经存在了。

起初,我曾以为这仅仅是旧语法与新语法的区别。随着时间的推移,我意识到最大的差异并非表面上的。传统的MUMPS风格代码与现代ObjectScript在变量作用域、执行层级、数据流和错误处理方面往往基于不同的假设。这种区别至关重要,因为旧代码很容易被误读。

某个例程看似未接收任何参数,却依赖于调用者创建的多个变量;某个标签在某处表现得像一个过程,在另一处却表现得像一个函数;一个点块(dot block)虽然会创建另一个执行层级,却可能看起来像缩进;一段代码在移入类后虽然能编译通过,但在运行时却可能表现得截然不同。

代码看起来依然很熟悉。语言依然是 ObjectScript。然而,它可能已经发生了变化。

本文介绍了我在处理遗留代码并将其与更现代的 ObjectScript 应用程序集成时所遇到的一些最重要的差异。

1.

0
0 34
文章 Kelly Huang · 八月 13 7m read

如果你在开发者社区待过一段时间,就会发现许多问题以不同形式反复出现:如何将持久化对象转换为 JSON?如何遍历一个结构未知的 JSON 有效载荷? 为什么 Required 对我的 %DynamicArray 属性 没有任何作用 ?为什么我的日期会被返回为 31390 

注意到这一点后,我们决定撰写一篇文章,总结所有那些仅凭文档无法解答的问题:实践。

让我们从基础开始

InterSystems IRIS 为无模式数据提供了两个类:%DynamicObject%DynamicArray。它们都继承自 %DynamicAbstractObject,两者的实例均被称为动态实体。 它们与 JSON 映射得非常自然:对象是一组键值对,数组是有序列表。与持久化类或注册类不同,动态对象不保留预定义的有效属性名列表——任何字符串键都是合法的,并且可以在运行时添加或移除成员。

最令人愉悦的部分是字面量语法,对于来自 JavaScript 背景的开发者来说,这看起来会很熟悉:

你也可以逐个字段构建它们。 会返回其修改后的实体,因此可以进行调用链:

Set obj = {}.%Set("a",1).%Set("b",2) // now obj is {"a":1,"b":2}

Do scores.%Push(100)          		 // now scores is [90, 85, 77, 100]

Set last = scores.%Pop()      		 // now scores is [90, 85, 77] and last is 100
0
0 54
文章 Lilian Huang · 七月 26 12m read
  1. 引言

流行病学监测是公共卫生的基石之一。 Régis Júnior等人(2026)将其定义为一个针对健康事件的持续性数据收集、分析、解读和传播系统——该功能的有效性在很大程度上取决于信息系统的质量、数据分析能力以及不同医疗层级之间的协调。 在新冠疫情期间,这一职能的战略重要性已毋庸置疑:世界卫生组织(2021)的记录显示,拥有更健全监测系统的国家始终表现得更好,而监测能力方面的区域差异则直接导致了应对措施的不一致,并在发病率和死亡率方面产生了可测量的差异。

尽管医疗系统如今能够收集海量的标准化临床数据,但挑战在于如何将这些数据转化为及时且可付诸行动的洞见。传统的流行病学报告往往依赖于人工分析和定制数据库查询,由此产生的延迟可能会阻碍公共卫生部门的快速响应。

EpInsights通过整合 InterSystems IRIS for Health、嵌入式 Python 临床向量化技术、IRIS Vector Search 以及 LangChain4j 对话式智能助手,填补了这一空白。 该平台使流行病学家和卫生管理者能够提出自然语言问题,并即时获得基于真实FHIR数据的地理空间热力图、区域排名、相似聚类检测以及AI生成的建议,所有结果均在数秒内呈现。


  •  
  1. 架构概述

EpInsights 采用三层架构,各层职责划分明确。

0
0 38
文章 Lilian Huang · 七月 10 8m read

大多数“AI 代理 + FHIR”项目最终都呈现出相同的架构:这边是一个 FHIR 服务器,那边是一个向量数据库,中间则是一个 Python 服务,其职责是调用嵌入 API、在两端之间转换浮点数数组,并保持两个数据存储库的同步。 三个活动组件、两次网络跳转,以及一个你从此永久拥有的嵌入式客户端。

Triage Park:我们 提交给InterSystems 编程大赛:FHIR AI Agent的参赛作品完全没有这些复杂结构。该代理从不计算嵌入向量,也从未导入过 OpenAI 嵌入向量客户端。 没有向量数据库。它将原始文本发送给 IRIS,剩下的工作由 IRIS 完成:它在服务器端计算嵌入向量,并通过针对与 FHIR 存储库位于同一数据库*中的表执行单条 VECTOR_COSINE SQL 语句来响应检索请求。

这就是 IRIS for Health 的“AI Hub”模式,一旦我采用该模式,我自己的代码中整整一层就消失了。以下是它的具体工作原理。

问题在于:分诊人员需要快速获得指导方针

Triage Park 是一款对话式分诊助手。患者描述症状(“我上楼梯时胸口发紧”),由大型语言模型(LLM)支持的助手会读取患者的真实 FHIR 病历,并生成分诊决策:自我护理 / 看全科医生 / 急诊护理 / 急诊科,同时附上依据说明。

“引用依据”(Cited rationale)是关键所在。

0
0 58
文章 Kelly Huang · 七月 9 5m read

在开始开发“智能出院导航器(Smart Discharge Navigator)”时,我遇到了一个常见的难题:FHIR 数据以 JSON 数据包的形式存储,但我所需的分析需要将多个资源进行关联,而这正是 SQL 所擅长的领域。

InterSystems FHIR SQL Builder 彻底解决了这一问题。我无需在应用程序代码中解析 JSON 数据包,而是能够直接在 IRIS for Health 中针对 FHIR 资源投影编写纯 SQL 语句。本文将详细介绍我如何利用该工具构建了该应用程序核心——基于人群的再入院风险评分引擎。


临床问题

30 天内的医院再入院是医疗保健领域成本最高且本可预防的问题之一,每年给美国医疗系统造成 170 亿美元的损失。挑战并不在于事后识别风险因素,而在于在恰当的时机——即患者出院前——及时发现这些风险因素。

为了评估再入院风险,我需要针对每位患者同时回答以下五个问题:

  • 该患者近期住院过几次?
  • 该患者是否患有多种活动性慢性病?
  • 该患者目前是否正在服用五种或更多种药物(多药联用)?
  • 病历中是否有任何异常实验室检查结果?
  • 是否有缺席随访的情况?

如果通过 Python 解析 FHIR 数据包来回答这五个问题,不仅速度慢,而且容易出错。而 FHIR SQL Builder 则让这一切变得简单明了。


0
0 113
文章 Claire Zheng · 七月 8 12m read

摘要

常见表表达式(CTE)为在SQL语句中定义可重用的中间结果集提供了一个结构化的框架。InterSystems IRIS通过WITH子句实现CTE,在与IRIS基于成本的优化器完全集成的情况下,能实现更清晰的查询构建,又能支持模块化的分析处理

本文探讨了 InterSystems IRIS 中 CTE 的语义,解释了其与查询优化的交互关系,讨论了合适的部署场景,并提供了可执行的示例,以说明生产环境中的实用模式。


  1. 引言

复杂的 SQL 工作负载通常需要多个逻辑处理阶段(例如过滤、聚合、数据增强和投影)。如果没有抽象机制,这些操作往往会导致查询结构深度嵌套,难以理解和维护。

常见表表达式(CTE)通过允许开发人员定义可在单个 SQL 语句中求值的命名查询组件,解决了这一问题。

在 InterSystems IRIS 中,CTE 通过 SQL 的 WITH 子句实现,并作为逻辑查询表达式运行,与周围的语句一同进行优化 [1]。


  1. InterSystems IRIS 中的常见表表达式

2.1 定义

公共表表达式(Common Table Expression)是在 SELECT 语句之前声明的命名子查询:

WITH PersonSubset AS (
  SELECT ID, Name, Age
  FROM Sample.Person
)
SELECT Name
FROM PersonSubset
0
0 71
文章 Claire Zheng · 七月 6 15m read

太长不读版(TL;DR:):本文演示了如何利用iris-vector-graph包,完全在 InterSystems IRIS 环境中实现 GraphRAG 风格的混合检索——该方法结合了向量相似度、图遍历和全文搜索。 我们通过一个欺诈检测场景,展示了图模式如何揭示仅靠向量搜索无法发现的问题。


为何欺诈检测需要图技术

每年,企业和消费者因欺诈损失数十亿美元。仅在2024年,消费者报告的损失就达125亿美元——同比增幅达25%。 现代欺诈之所以难以被发现,是因为欺诈者很少单独行动。他们通过有组织的网络运作,实施协调一致的骗局,利用我们无法察觉看似无关的交易之间存在关联这一弱点。

举个简单的例子:从账户 A 转账至账户 B 的单笔交易看起来完全正常。金额合理,时间点符合常规,且两个账户均未被标记为可疑。传统的基于规则的系统,甚至那些孤立分析交易的机器学习模型,都会毫不犹豫地批准这笔交易。

但如果我们能看到全局呢?

image

同一笔交易其实是环形模式的一部分——资金在循环流动,每一步都会被截留一小部分。这是一种典型的洗钱结构,对于任何不分析交易关联性的系统来说,都是隐形的。

这一洞见——即欺诈隐藏在关联关系中,而非单个记录中——正是图数据库成为欺诈检测不可或缺工具的原因。

0
0 79
文章 Nicky Zhu · 六月 17 8m read

在上一篇文章中,我们探讨了 IRIS 中单元测试的基础知识以及将其应用于 REST API 的方法。我们甚至还了解了如何在最终确定网络配置和身份验证之前测试逻辑,从而使我们能够专注于测试 API 内容。

今天,我们将在此基础上使用另一个工具来提升我们的单元测试策略:%Populate

乍一看,%Populate类似乎非常简单。你可以创建一个同时扩展了 %Persistent%Populate的类,并继承一个用于生成随机记录的 方法。该工具可识别某些字段名称(如 "Name"、"SSN" 和 "Phone"),并应用专门的逻辑来确保数据的真实性。如果某个字段名称没有被识别为特殊字段名称,就会按照其指定的数据类型填充随机值。

假设我们开发了这样一个具有以下属性的类,用来跟踪商店中一些基本的客户信息(我们的类还扩展了 ,这在后面会派上用场):

Class User.CustomerList Extends (%Persistent, %Populate, %JSON.Adaptor)
{
    Property Name As %String;
    Property DOB As %Date;
    Property Age As %Numeric(SCALE = 0);
    Property IsMember As %Boolean;
    Property MemberID As %String(POPSPEC = ".GenID()");
}
0
0 137
文章 Claire Zheng · 六月 16 7m read

大家好,

你是否曾希望你的电子健康记录(EHR)能具备思考能力?不仅仅是显示数据,也不仅仅是触发警报。而是能够真正阅读病历、综合临床指南进行分析,并根据临床医生的单条信息,向系统生成结构化的转诊医嘱。

在本文中,我将向大家展示如何创建您自己的定制临床AI助手。


🏥 关于 iris-fhir-agents 应用

iris-fhir-agents是一个完全基于 InterSystems IRIS for Health 构建的多智能体临床 AI 平台

0
0 69
文章 Jeff Liu · 五月 28 28m read

表分区演示 (Table Partitioning Demo)

本演示将带你体验 IRIS SQL 全新的表分区(Table Partitioning)功能,并沿途讲解其作用与工作原理。

 

为了验证概念,我们仅使用几十条数据进行演示。但显而易见,该功能的真正威力在于应对体量高出数个数量级的海量数据集。

💡 想要更简短、高屋建瓴的介绍?

不妨查看在线学习模块:Managing Tables with Partitioning in InterSystems IRIS

 

ℹ️ 表分区(Table Partitioning)功能已作为实验性功能包含在 IRIS 2026.1 中。

为了获得最佳的表分区体验,请注册 InterSystems Early Access Program (EAP)。加入 EAP 后,你将获得:许可证密钥、更新说明、与表分区团队更直接高效的沟通渠道。你的反馈对我们至关重要:我们越了解你希望如何使用表分区,就越能针对性地改进它。在注册Early Access Programs 的同时,也欢迎关注涵盖其他激动人心新功能的早期访问计划!

 

什么是表分区 (Table Partitioning)?

表分区允许用户依据特定的逻辑规则,将大表中的数据拆分存储到多个数据库中,从而实现高效的管理。

0
0 53
文章 Nicky Zhu · 五月 22 3m read

从 Oracle、MSSQL 或其他纯关系型数据库系统迁移到多模型 InterSystems IRIS 是一项战略决策,需要认真规划和执行。虽然这种过渡具有显著的优势,包括增强性能、可扩展性和对现代架构的支持,但它也伴随着挑战。在本文中,我将重点介绍与编码相关的一些注意事项,以确保成功迁移。与结构和数据的实际迁移相关的所有事项都不在本文讨论范围之内。


首先,当你考虑迁移到不同的数据库系统时,你需要了解你的业务逻辑,无论是在应用程序(应用服务器)还是数据库服务器端。基本上,你需要重写的 SQL 语句在哪里

0
0 43
文章 姚 鑫 · 四月 26 3m read

在这里插入图片描述

📘新书发布|《IRIS(数据平台)编程技术指南》正式发售!

大家好,我是姚鑫

最近一段时间,我把自己过去几年在 InterSystems IRIS 项目中的开发经验,系统整理成了一本书—— 📕 《IRIS(数据平台)编程技术指南》 现已由 北京航空航天大学出版社 正式出版发行。

说实话,写书的过程比我想象中要难很多。 如果说写博客是“随手记录”,那么写书就是一次真正的“工程项目”:要保证结构完整、逻辑严谨、内容能从入门一路带到实战。


🚀这本书写了什么?

本书围绕 InterSystems IRIS 的核心开发语言 ObjectScript 展开,内容不仅讲语法,更注重“工程实践”。

主要包括:

✅ IRIS 平台介绍与开发环境搭建 ✅ ObjectScript 语法规则、变量体系、全局变量机制 ✅ 常用数据类型、表达式、系统命令、系统函数 ✅ 函数与方法、面向对象编程基础 ✅ %Persistent 持久类(ORM 与 SQL 映射) ✅ Storage 存储策略、懒加载机制、并发分析 ✅ 嵌入式数据结构、常见性能问题与技术难点解析

整体内容更偏向“项目实战型”,不是纯概念堆砌。


🎯适合哪些人?

0
0 410
文章 Claire Zheng · 四月 23 1m read

InterSystems Ready 2026 大会即将召开——这是您在参加现场认证考试之前进行准备和检查知识的大好时机。

InterSystems 认证并非易事:您需要根据真实考试目标进行试题练习。

exam-prep.es正是为实现这一目标而建立的免费平台:练习、找出薄弱环节并做好充分准备

你会发现

* 1200 多道与官方认证目标一致的练习题 * 带有 InterSystems 文档链接的详细解释 * 涵盖每个考试知识点的学习材料 * 进度跟踪

涵盖的认证

* HL7 接口专家 * IRIS SQL 专家 * IRIS 系统管理专家 * IRIS 开发专家

学习材料+互动测验的组合使其特别适用于在考试前验证您的水平。

https://exam-prep.es

:exam-prep.es 与 InterSystems 无关。它是一个补充练习资源。

0
0 81
InterSystems 官方 Claire Zheng · 四月 16

InterSystems IRIS® 数据平台、InterSystems IRIS® for HealthTMHealthShare® Health Connect 2025.1.4 2024.1.6维护版本现已全面上市 (GA)。这些版本包括对最近发布的一些警报和建议的修复,其中包括以下内容:

请通过Ideas Portal使用 "发布后反馈"类别分享您的反馈意见,以便我们共同打造更好的产品。

文档

您可以在这些页面上找到详细的变更列表和升级检查列表:

早期使用计划 (EAP)

现在有许多 EAP 可用。请查看此页面并注册您感兴趣的项目。

如何获取软件?

0
0 85
文章 Nicky Zhu · 四月 1 7m read

您熟悉 SQL 数据库,但不熟悉 IRIS 吗? 请继续阅读...

大约一年前,我加入了 InterSystems,IRIS 就这样进入了我的视线。 我使用数据库已经有 40 多年了,其中大部分时间都是为数据库供应商工作,我以为 IRIS 与我所知道的其他数据库大致相同。 然而,我惊讶地发现,IRIS 在很多方面都与其他数据库截然不同,而且往往要好得多。 这是我在 Dev Community 上发表的第一篇文章,我将为已经熟悉 Oracle、SQL Server、Snowflake、PostgeSQL 等其他数据库的人提供 IRIS 的高级概述。 希望我的介绍能让您更清楚、更简单,并节省您的入门时间。

首先,IRIS 支持 ANSI 标准 SQL 命令和语法。它有表格、列、数据类型、存储过程、函数......所有关系型的东西。 你还可以使用 ODBC、JDBC 和 DBeaver 或任何你喜欢的数据库浏览器。 因此,是的,您在其他数据库中知道和做的大多数事情都可以在 IRIS 上正常运行。 耶!

但我提到的那些不同之处又是怎么回事呢? 好了,系好安全带:

多模型(Multi-Model)IRIS 是一个关系数据库,但同时也是一个面向对象的数据库,还是文档存储,支持向量和立方体/MDX,以及.你知道我要说什么。

0
0 188
文章 Kelly Huang · 三月 23 6m read

供应链是指由公司业务领域及其供应商和合作伙伴(利益相关者)执行的一系列流程和活动,从原材料采购、生产到交付给最终消费者。利用 InterSystems IRIS 的协调功能,供应链管理解决方案可以更好地管理供应链:

0
0 80
文章 Claire Zheng · 三月 23 4m read

大家好。好久不见。我想再次与大家分享我最近学习的内容 通过 JDBC 使用 SQL 创建外来表。

因为我同时也在学习 IRIS BI,所以我从这个 Sample-BI docker 环境开始。

https://github.com/intersystems/Samples-BI

启动环境后,以超级用户身份登录管理门户http://localhost:52773/csp/sys/UtilHome.csp。

将命名空间切换为IRISAPP

 

我们会发现所有样本数据都存储在IRISAPP 命名空间中。让我们找一张简单的表来测试外来表功能 🤣

System Explorer > SQL

 

让我们通过在 "执行查询(Execute Query tab) "选项卡中执行以下 SQL 查询来试试表HoleFoods.Outlet

SELECT
ID, City, Country, Latitude, Longitude, Population, Type
FROM HoleFoods.Outlet

 

太棒了!😉 表中有 35 个条目。

0
0 54
文章 Nicky Zhu · 三月 20 10m read

陷入困境

直到今年年初,我几乎没怎么做过编程工作——我已经厌倦了它。

在担任多年一线软件工程师和数据科学家后,我在2015年左右陷入了职业倦怠。我转而从事以“外部创新”为主的业务拓展角色,并于2019年加入InterSystems担任产品经理。我怀念编程的创造性,但并不怀念其中的枯燥乏味。无休止的样板代码编写、调试和上下文切换让我创意枯竭。就像电影《好好先生》(Yes Man)中金·凯瑞饰演的角色一样,我发现自己对新项目总是说“不”——以至于我换了职业!

然后,AI编程助手出现了。而我,成了对机器人说“好”的“好好先生”。

第一幕:狂热(“对一切都说好!”)

当我刚开始使用AI编程助手(先是Windsurf,然后是Cline,接着是Roo Code,现在是Claude Code,还尝试过opencode)时,感觉就像变魔术一样。自然语言 → 可运行的代码。我对每个建议、每个重构、几乎每个疯狂的想法都说“好”。

我第一个主要的AI辅助项目是几个月前启动的一个内部项目——为IRIS开发的一系列Python脚本和管道。我兴奋不已,让机器人尽情发挥: “添加这个功能!”——好!“重构那个模块!”——好!“让它可配置!”——好!“添加更多集成!”——好!

创意的能量回来了。代码如泉涌。我又感到自己高效了起来。

然后,我的实习生——一名软件工程专业的学生——查看了代码库。

他并不满意。

0
0 307
文章 Kelly Huang · 三月 13 4m read

大家好! 👋
欢迎来到IRIS IO 工具系列的第二部分。这个扩展是我提交给InterSystems 2025 年 "将想法变为现实 "竞赛的作品,它为您提供了一个直观而强大的界面,可直接在 VS 代码中导入和导出数据

如果你觉得这个扩展有用,请考虑在竞赛中为我投票!


在上一篇文章中,我们介绍了

  • 扩展概述
  • ODBC 驱动程序配置
  • 导出功能

现在是时候深入了解导入引擎(Import Engin)了_它旨在支持

  • CSV
  • TXT(任意分隔符)
  • JSON
  • XLSX

该扩展具有智能推理层,可分析输入文件并自动建议最佳的 IRIS 表格数据格式,提供有指导的辅助数据建模。


导入模式--两种不同的工作流程

该扩展支持两种不同的方案

  • 创建新表
  • 加载到现有表格

选项 A - 导入新表

在以下情况下,这是理想的选择

  • 加载新数据集
  • 您希望从头开始,使用全新的表和模式
  • 处于原型设计或探索阶段

会发生什么?

0
0 56
文章 Jeff Liu · 一月 26 6m read

InterSystems IRIS 提供广泛的可配置安全选项,但许多开发人员主要使用角色和资源来保护整个表或例程。今天,我们将深入探讨。我们也可以分别确保单个列和行的安全,但这两种机制的操作方式截然不同。让我们从列开始。

列安全

为便于测试和演示,我们将保持表结构简洁明了。我们在 USER 名称空间中有一个名为 "Person "的表,其中包含 ID 列、出生日期列 (DOB)、名和姓。

0
0 303
文章 Nicky Zhu · 十二月 26, 2025 9m read

大家好!
在本文中,我们将在 InterSystems IRIS 的背景下探讨动态 SQL(Dynamic SQL嵌入式 SQL(Embedded SQL ) 的概念,提供实际示例, 研究 它们的区别 ,以帮助您了解如何在应用程序中利用它们。

InterSystems SQL 提供全套标准关系功能,包括定义表模式、执行查询、定义和执行存储过程。您可以通过管理门户交互式地执行 InterSystems SQL,也可以使用 SQL shell 界面以编程方式执行 InterSystems SQL。嵌入式 SQL 使您可以在 ObjectScript 代码中嵌入 SQL 语句,而动态 SQL 使您可以在运行时从 ObjectScript 执行动态 SQL 语句。 静态 SQL 查询提供可预测的性能,而动态和嵌入式 SQL 则分别提供灵活性和集成性。

0
0 145
文章 Lilian Huang · 十二月 11, 2025 2m read

在当今的医疗数据领域,FHIR 已成为结构化临床数据交换的标准。然而,虽然 FHIR 擅长互操作性,但其 JSON 格式却给分析带来了挑战——包括FHIR QuestionnaireResponse数据

本项目演示了如何将 FHIR QuestionnaireResponse 数据从嵌套 JSON 转换为关系 SQL 表和向量嵌入。通过集成 InterSystemsIRIS FHIR SQL 生成器向量搜索,我们揭开了患者回答背后的语义。

构建的三个步骤

1.设计和收集问卷

首先使用 美国国家医学图书馆(NLM)表格生成器。该工具有助于设计符合 FHIR 标准的结构化临床表格在本项目中,收集了 100 份合成患者回复,并将其保存为 FHIR QuestionnaireResponse JSON 文件,准备导入 FHIR 服务器。

2.通过 SQL 转换和查询问卷数据

将 FHIR QuestionnaireResponse 资源加载到服务器后,使用InterSystems IRIS FHIR SQL 生成器自动创建关系 SQL 表。这将使嵌套的 JSON 结构扁平化,从而能够使用标准 SQL 轻松分析问卷数据——所有配置只需点击几下即可完成。

  • 有关 FHIR SQL 生成器的完整配置,请参阅README。
0
0 326
公告 Claire Zheng · 十二月 1, 2025

我们非常高兴地宣布, IntegratedML Custom Models(集成式机器学习自定义模型)抢先体验计划即将开启,这是 IRIS 2026.1 版本中即将推出的一项强大新功能!

这是什么?

IntegratedML Custom Model扩展了现有的IntegratedML/AutoML(集成式机器学习/自动化机器学习)功能,支持您直接在 SQL 查询中部署自己的自定义 Python 机器学习模型。IntegratedML AutoML功能提供自动化机器学习服务,而Custom Model(自定义模型)则赋予您完全的控制权——自定义预处理、任意与 scikit-learn 兼容的模型,以及 Prophet 或 LightGBM 等第三方库——所有操作均在数据库内执行,无需数据移动。

为什么这很重要

  • 完全掌控:编写自定义预处理、特征工程和模型训练逻辑。
  • 熟悉的 SQL 界面:使用熟悉的 CREATE MODEL、TRAIN MODEL 和 PREDICT() 命令。
  • 数据库内执行:无需数据导出/导入循环,对实时数据进行实时预测。
  • 与AutoML协同工作:针对每个用例使用合适的工具——自动化机器学习用于快速建模,自定义模型用于高级场景。
0
0 150
文章 Nicky Zhu · 十一月 26, 2025 4m read

您检查了服务器,发现IRISTEMP 增长过快。不必惊慌。让我们在存储空间耗尽之前调查一下这个问题

步骤 1:确认 IRISTEMP 增长问题

在假设 IRISTEMP 是问题所在之前,让我们先检查一下它的实际大小。

检查可用空间

IRIS 终端运行以下命令:

%SYS>do ^%FREECNT

出现提示时,输入

Database directory to show free space for (*=All)? /<your_iris_directory>/mgr/iristemp/

如果输出结果显示可用空间非常小,则IRISTEMP 正在像拥挤的壁橱一样占满您的存储空间。但是,如果可用空间没有问题,但 IRISTEMP 数据库文件 (IRIS.DAT) 仍然很大(这可能就是你来这里的原因),这意味着临时数据已经被清理。在这种情况下,你的任务就是密切关注,按照下面的步骤在下一次行动中抓住它,并恢复宝贵的空间。

第 2 步:确定 IRISTEMP 的用途

运行 ^%GSIZE 查找大型全局文件

按照提示操作:

Directory name: /<your_iris_dir>/mgr/iristemp/

All Globals? No => yes

33 items selected from
33 available globals

1) Get exact packing details
2) Get block counts only
3) Use fast stochastic estimate

Please select an option:  3 => 3
0
0 305
文章 Nicky Zhu · 十一月 20, 2025 4m read

InterSystems IRIS中的窗口函数(Window Functions)可让您直接在SQL中执行强大的分析操作,例如累计总和、排名和移动平均值等。 这些函数针对与当前行相关的一组行(即“窗口”)进行操作,且不会像 GROUP BY那样合并结果。 这意味着您可以编写更简洁、更快速且更易于维护的查询——无需循环、无需连接、无需临时表。 在本文中,我们将通过处理一些常见的数据分析任务来了解窗口函数的作用机制。


InterSystems IRIS中的SQL窗口函数入门

SQL窗口函数(SQL window functions)是数据分析的强大工具。 它们允许你在保留各行列可见性的同时,跨行计算聚合值和排名。 无论你是在构建仪表盘、报表还是进行复杂分析,窗口函数都能简化你的逻辑并提升性能。

注:我并非窗口函数领域的专家,但我愿意分享助我理解窗口函数的心得体会和相关资源。非常欢迎大家提出建议或进行指正!


🚀 为什么窗口函数这么重要

你是否曾为了计算累计总和、排名或行间差值,而编写过多条SQL查询语句,甚至使用过程化循环?

窗口函数能让你仅通过一条SQL查询语句就实现所有这些操作。

它们将强大的分析功能直接融入SQL——无需额外连接操作、无需临时表,也无需过程化循环。


🧠 什么是窗口函数

窗口函数会针对一组与当前行存在某种关联的行进行计算——这组行被称为窗口(window)

0
0 202
文章 Jeff Liu · 十一月 13, 2025 4m read

在使用标准 SQL 或 InterSystems IRIS 中的对象层时,元数据的一致性通常通过内置验证和类型执行来保持。但是,绕过这些层直接访问global的传统系统会带来微妙而严重的不一致性。

了解驱动程序在这些边缘情况下的行为,对于诊断遗留数据问题和确保应用可靠性至关重要。
DATATYPE_SAMPLE数据库旨在帮助分析列值不符合元数据中定义的数据类型或约束的错误情形。我们的目标是评估 InterSystems IRIS 及其驱动程序(JDBC、ODBC、.NET)和不同工具在发生此类不一致时的表现。 在本篇文章中,我将重点介绍JDBC 驱动程序


问题出在哪里?

一些传统应用程序会直接写入globals。如果使用关系模型(通过 CREATE TABLE 创建或使用全局映射手动定义)来公开这些数据,那么映射定义 的底层值就会与每列的声明元数据一致。

当这一假设被打破时,可能会出现不同类型的问题:

  1. 访问失败(Access Failure:根本无法读取某个值,当驱动程序尝试访问该值时会抛出异常。
  2. 静默损坏(Silent Corruption:值已成功读取,但与预期的元数据不匹配
  3. 未检测到的数据变异(Undetected Mutation:该值被读取且看似有效,但被驱动程序悄然修改以符合元数据要求,这使得这种不一致性难以被察觉。
0
0 134