清除过滤器
文章
Claire Zheng · 九月 3
InterSystems提供统一数据战略,聚焦复杂行业中的速度、安全性与实时洞察能力。
文章要点
InterSystems是一家深耕数据管理、集成与分析领域48年的私营企业,2024年营收达11.3亿美元。
其旗舰产品InterSystems IRIS旨在为多样化需求(包括生成式AI与机器学习)提供全面数据平台支持。
针对医疗健康与供应链等复杂领域,推出InterSystems IRIS for Health与InterSystems Supply Chain Orchestrator等专业化解决方案。
InterSystems提供通过“贴近数据源处理(processing closer to data)”的架构设计,提升性能、强化安全性并降低运营成本。
核心价值主张包括:易用性、深度集成、行业定制化方案快速落地及强健的客户支持。
👉直播回放 | 以医疗AI枢纽构建智能协同生态:InterSystems IRIS AI 组件注册中心
分析师观点
近期,在InterSystems分析师关系峰会期间,通过与InterSystems的交流,我们发现该公司专注于其基础的“永恒设计”理念,并坚定不移地致力于提供强大的数据管理和医疗信息系统。InterSystems自1979年以来便是一家私有且持续盈利的公司,凭借系统出色的性能、可扩展性、互操作性及可靠性,已确立其在数据管理、集成与分析领域的全球领导地位。该公司的InterSystems IRIS看上去是其战略的核心支柱,旨在提供一个统一的数据平台。我们观察到,该平台旨在处理从传统数据库管理到生成式人工智能、机器学习和高级分析等更现代需求在内的广泛功能。这一广泛的能力集旨在使IRIS成为企业在复杂数据环境中导航的通用解决方案。
InterSystems方法中更引人注目的一个方面是,它强调“贴近数据源处理(processing closer to the data)”。这种架构设计旨在带来诸多益处,如更快的处理速度、增强的安全性以及潜在的成本降低。在数据量激增且实时洞察至关重要的时代,这样的架构可能成为一个显著的区别因素。这表明其设计深思熟虑,旨在缓解与数据移动和分布式处理相关的一些常见瓶颈。该公司的优势在于为关键任务型应用提供服务,在这些应用中,性能和可靠性至关重要。当现有系统无法再满足业务需求时,InterSystems似乎常常成为解决方案,显著提高处理速度。
该公司还非常注重针对特定行业的解决方案,尤其是在医疗领域。其HealthShare、TrakCare和InterSystems IntelliCare产品体现了对医疗机构和组织所面临的独特挑战的深刻理解。这种专业化是一个明智之举——医疗是一个数据密集且高度依赖合规性的行业,现成的通用解决方案往往难以满足需求。通过提供定制化的电子健康记录和信息交换平台,InterSystems旨在解决这一重要领域的关键痛点。同样,其在金融服务和供应链领域的表现证明该公司有更广泛的战略,即将其拥有的数据管理专业知识应用于其他复杂行业。
我们发现,该公司致力于使数据实现“AI Ready(AI就绪)”,这一点尤其值得关注。随着人工智能在各种业务功能中的日益普及,可靠地访问和利用实时数据的能力至关重要。InterSystems专注于确保数据为人工智能和机器学习计划做好准备,这凸显了他们对当前市场需求的深刻理解。他们强调易于学习和使用,并承诺通过针对特定行业的解决方案包,快速实现价值,这也很好地契合了当今快节奏环境中对敏捷部署的需求。此外,InterSystems提供行业领先的支持,这表明了他们对客户成功的长期承诺,而这正是企业客户关注的关键因素。我们认为,如果您的组织面对着复杂数据和集成挑战,同时寻求利用数据做出更好决策的,那么InterSystems可以成为您可靠的合作伙伴。
👉直播回放 | 以医疗AI枢纽构建智能协同生态:InterSystems IRIS AI 组件注册中心
关注Smart Data Fabric(智能数据编织)
InterSystems智能数据编织是一种先进的企业架构,它通过按需访问、转换和协调来自多个来源的信息,简化和加速了对数据资产的访问。智能数据编织既可以作为独立产品存在,也是InterSystems面向行业的应用程序的基础支撑。该方法嵌入了广泛的分析功能,包括生成式人工智能、数据探索、商业智能、自然语言处理和机器学习,可在不干扰现有系统的情况下增强数据的可用性。该架构为企业提供一致、实时的数据视图,助力企业做出更优决策、提升客户体验并提高运营效率。在数据管理方面,它通过统一不同的数据源来解决数据孤岛问题,对于复杂环境中的访问和集成现代化至关重要。
智能数据编织与人工智能技术的集成,允许直接嵌入预测性、决策优化型和生成式人工智能工具,从而推动智能应用的发展,如支持人工智能的顾问和情景规划。在新兴的人工智能技术栈中,InterSystems智能数据编织作为基础层,为人工智能模型提供统一、高质量的数据,加速决策智能化,并支持人工智能驱动的工作流程中的实时分析。其真实世界应用案例包括金融服务领域的风险管理和合规性,以及供应链编排中的规范性洞察和敏捷运营。
智能数据编织的广度和深度给我们留下了深刻印象,在分析师峰会上重点介绍的两个案例研究——一家全球零售商和一家创新型医疗保健提供商概述了他们对智能数据编织的采用情况,展现了一种全面的方法。InterSystems无疑具备在该领域大规模运营的资质和业绩记录。然而,问题依然存在:他们会被邀请加入这场AI盛宴吗?该公司当然拥有在重新架构的人工智能数据栈中成为可行参与者的技术解决方案,但当高级IT主管们寻求建立值得信赖的供应商名单以支持他们的人工智能之旅时,其品牌认可度是否意味着它难以跻身“热门之选”呢?
👉直播回放 | 以医疗AI枢纽构建智能协同生态:InterSystems IRIS AI 组件注册中心
展望未来
基于我们的观察以及本周讨论所引发的思考,InterSystems正将自己定位为一家全面的数据解决方案提供商,尤其侧重于专业化的行业应用,特别是医疗领域。我们将重点追踪的一个关键趋势是,其“贴近数据源处理(processing closer to the data)”的架构在现实场景中,究竟能多有效地为客户带来切实、可衡量的益处。尽管理论上的优势显而易见,但在大型、多样化的企业环境中,该架构的实际实施情况及其产生的影响才是关键所在。
简而言之,在此次活动中,InterSystems近50年来对创新的执着追求以及其庞大的业务规模令我们印象深刻。
当我们纵观整个市场时,InterSystems的定位并非是一场重大变革,而是对其既定战略的强化:将数据管理领域的深厚专业知识应用于特定的高价值行业。
与Databricks或Snowflake等更广泛的数据平台提供商相比,InterSystems似乎采取了更为垂直整合和专业化的发展路径,尤其是在医疗领域。Databricks和Snowflake提供的是更为通用的数据湖仓和云数据仓库解决方案,而InterSystems则致力于提供更全面、针对特定行业的解决方案包,特别是其面向医疗领域的TrakCare和HealthShare等产品。InterSystems的数据集成能力也十分突出,尤其是在那些拥有多种类型数据存储且无法迁移至单一技术的组织中。我们认为,其专业化和集成能力使其能够满足更为精细的行业需求,而这些需求可能是更通用的平台所忽视的。
对于InterSystems而言,一个关键问题是,鉴于超大规模企业和云原生数据平台拥有庞大的营销和研发预算,它打算在哪些领域与这些对手直接竞争,以及如何与它们开展良好合作。我们认为,对于那些在核心业务中要求极高可靠性、实时性能和复杂互操作性的组织来说,InterSystems具备得天独厚的优势。在人工智能应用日益广泛的背景下,InterSystems面临的挑战尤其在于:不仅要清晰阐述这些区别于技术规格的独特之处,还要展示出切实的业务成果。InterSystems必须在要求严苛的行业中,展示出人工智能驱动的解决方案,在提高效率、降低成本和推动新产品创新方面带来可衡量改进的具体案例。
HyperFRAME研究团队上周在波士顿参加了多个聚焦于ETL和数据集成的分析师活动,各方传递出的一个一致信息是,人工智能计划对实时集成数据的需求日益增长。InterSystems的战略与这一更广泛的市场趋势高度契合,特别是其强调“AI Ready(AI就绪)”的数据,以及通过“贴近数据源处理(processing closer to the data)”来减轻ETL负担。未来,HyperFRAME将追踪InterSystems如何在日益拥挤的数据平台市场中持续展现自身特色,尤其是其“AI Ready(AI就绪)”如何得以广泛应用及其为客户在未来几个季度带来的可衡量的业务成果。
👉直播回放 | 以医疗AI枢纽构建智能协同生态:InterSystems IRIS AI 组件注册中心
文章来源及作者信息
👉本文翻译自:HyperFRAME Research
👉点击查看原文
👉作者信息
@Stephanie Walter | 人工智能技术栈常驻分析师
Stephanie Walter是一位成果导向型的技术高管兼常驻分析师,在云计算、软件即服务(SaaS)、中间件、数据和人工智能领域拥有超过20年的创新领导经验。她曾在IBM担任高级职务,也以兼职高管的身份参与工作,凭借工程专业知识与商业战略及市场洞察力的结合,指导产品从概念构思到推向市场的整个生命周期。从软件工程与架构设计,到执行产品管理,她在初创企业、成长阶段企业和大型企业环境中,推动大规模转型、培养技术人才并解决复杂挑战。
@Steven Dickens | HyperFRAME Research首席执行官
Steven Dickens被誉为技术与商业转型领域的杰出领军人物,他是HyperFRAME Research的首席执行官兼首席分析师,多次被AR Insights评为全球十大分析师之一,还是《福布斯》的撰稿人。其专业见解备受顶级媒体青睐,《华尔街日报》和CNBC等一线媒体纷纷向他寻求观点,他也是施瓦布网络(Schwab Network)和彭博社(Bloomberg)等电视网络的常客。
文章
Jeff Liu · 十月 27, 2021
技术概要:InterSystems IRIS Native API for Python
目录
技术概要: InterSystems IRIS Native API for Python 1
InterSystems IRIS 存储结构简介 1
探索 IRIS Native for Python 1
用前须知 2
安装 Native API 包 2
IRIS Native 应用程序 2
运行练习 3
确认管理门户(Management Portal)中的变更 3
了解有关 IRIS Native 的更多信息 3
技术概要:InterSystems IRIS Native API for Python
本技术概要(First Look)指南解释了如何使用 InterSystems IRIS Native 功能从 Python 应用程序访问 InterSystems IRIS® globals。IRIS Native 还允许您运行 ObjectScript 方法、函数和例程。在本文中,您将首先连接到 InterSystems IRIS。然后您将在 InterSystems IRIS 中设置和检索一个 global 节点的值,并在另一个 global 节点上进行迭代。您还将调用 InterSystems IRIS 类方法。所有这些活动都将在 Python 3 应用程序中执行。
为了让您体验 IRIS Native,而又不陷入细节的困境,本次探索特意设计得很简单。这些活动被设计成只使用默认设置和功能,这样您就可以熟悉功能的基本原理,而不必处理那些离题或过于复杂的细节。当您把 IRIS Native 引入您的生产系统时,您可能需要做一些不同的事情。请确保不要把这种对 IRIS Native 的探索与真实的情况相混淆! 本文档末尾提供的参考资料将使您对在生产中使用 IRIS Native 的情况有一个很好的了解。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
InterSystems IRIS 存储结构简介
InterSystems IRIS 提供了一种易于使用的方法来将数据存储在持久化多维数组中。global 是存储在物理 InterSystems IRIS 数据库中的命名多维数组。在应用程序中,globals 到物理数据库的映射基于当前命名空间,命名空间提供一个或多个物理数据库的逻辑统一视图。例如,要使用一个名为* ^Settings* 的 global 将值 "Red "与键 "Color "关联起来,请使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础: 连接一个 IDE》)中的为您的实例描述的程序打开 InterSystems 终端(InterSystems Terminal),并输入以下代码:
set ^Settings("Color")="Red"
您可以利用 globals 的多维特性来定义一个更复杂的结构:
set ^Settings( "Auto1 ", "Properties ", "Color ") = "Red " set ^Settings( "Auto1 ", "Properties ", "Model ") = "SUV " set ^Settings( "Auto2 ", "Owner ") = "Mo "
set ^Settings( "Auto2 ", "Properties ", "Color ") = "Green "
有关 globals 的更多信息,请参见 Using Globals(《使用 globals》)。
探索 IRIS Native for Python
现在,您已经准备好实验 IRIS Native 了。下面的简短演示向您演示了如何在一个简单的 Python 应用程序中使用 IRIS Native。
想试试 InterSystems Native API for Python 的在线视频演示吗?请查看 Python QuickStart(Python 快速入门)!
探索 IRIS Native for Python
用前须知
要使用这个程序,您需要一个正在运行的 InterSystems IRIS 实例和一个使用 Python 3 和 PIP 实用程序以及您喜欢的 Python IDE 的系统。(在 Windows 系统中,确保 Python 解释器包含在您的 PATH 环境变量中)。您对 InterSystems IRIS 的选择包括多种类型的已授权的和免费的评估实例;该实例不需要由您正在工作的系统托管(尽管它们必须相互具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 Python IDE 中的信息,将 Visual Studio 连接到您的 InterSystemsIRIS 实例。
安装 Native API 包
在运行示例 Python 程序之前,您需要使用 PIP 包管理器来安装 irisnative 包,您可以从 https://github.com/intersystems/quickstarts-python/tree/master/Solutions/nativeAPI_wheel 下载。
如果您的本地系统上安装了 InterSystems IRIS,wheel 文件已经安装在子目录 install-dir dev python 中,其中 install-dir 是 InterSystems IRIS 实例的安装目录, Python 3 包的名称 (.whl 文件) 包括 cp34。
要安装 wheel 文件,在命令行中输入命令 pip install irisnative-1.0.0 whl file,其中 irisnative-1.0.0 whl file 是您的 Python 版本和操作系统对应的 wheel 文件。例如,如果您在 Linux 上使用 Python 3,请使用 irisnative-1.0.0-cp34-abi3-linux_x86_64.whl。
IRIS Native 应用程序
现在您已经创建了项目,接下来您将创建一个小的应用程序,演示 Native API 的一些功能。
在您的 IDE 中,在 IRISNative 目录中创建一个新的源文件,将该文件保存为 IRISNative.py。
将以下代码粘贴到 IRISNative.py 中,将 InterSystems IRIS 实例的连接信息替换为 kwargs 中的值。您可以指定所示的 USER 命名空间,也可以选择在实例上创建的另一个命名空间:
import irisnative
# Modify connection info based on your environment ip = "127.0.0.1 "
port = 1972 namespace = "USER " username = " _SYSTEM " password = "SYS "
# create database connection and IRIS instance
connection = irisnative.createConnection(ip,port,namespace,username,password) dbnative = irisnative.createIris(connection)
print( " [1. Setting and getting a global ] ") # setting and getting a global
# ObjectScript equivalent: set ^testglobal( "1 ") = 8888 dbnative.set(8888, "testglobal ", "1 ")
# ObjectScript equivalent: set globalValue = $get( ^testglobal( "1 ")) globalValue = dbnative.get( "testglobal ", "1 ")
print( "The value of testglobal is ", globalValue) print()
print( " [2 Iterating over a global ] ") # modify global to iterate over
# ObjectScript equivalent: set ^testglobal( "1 ") = 8888 # ObjectScript equivalent: set ^testglobal( "2 ") = 9999 dbnative.set(8888, "testglobal ", "1 ")
dbnative.set(9999, "testglobal ", "2 ")
Iter = dbnative.iterator( "testglobal ") print( "walk forwards ")
了解有关 IRIS Native 的更多信息
for subscript, value in Iter.items():
print( "subscript= {}, value={} ".format(subscript, value)) print()
print( " [3. Calling a class method ] ") # calling a class method
# ObjectScript equivalent: set returnValue = ##class(%Library.Utility).Date(5) returnValue = dbnative.classMethodValue( "%Library.Utility ", "Date ", 5) print(returnValue)
# close connection connection.close()
示例代码分为三个部分:
第一部分展示了如何设置一个 global 的值以及稍后如何检索它。这部分里面执行的命令等同于 ObjectScript 的 SET 和 GET 命令。
第二部分展示了如何迭代 global 的子节点,类似于 ** $ORDER** ObjectScript 函数。
第三部分展示了如何使用 IRIS Native 从您的 Python 应用程序调用 ObjectScript 类方法。
注意: ObjectScript中的 Globals 以插入符号( ^)开头。在使用 InterSystems IRIS Native API 的 Python 应用程序中,这不是必需的。
运行练习
现在您已经准备好运行演示应用程序了。如果示例执行成功,您应该会看到带有示例代码结果的打印输出:
[1. Setting and getting a global ] The value of testglobal(1) is 8888
[2.Iterating over a global ] walk forwards
subscript=1, value=8888 subscript=2, value=9999
[3. Calling a class method ] Jan 30, 2018
确认管理门户(Management Portal)中的变更
接下来,使用以下程序在管理门户(Management Portal)中确认您的结果:
使用 InterSystems IRIS Basics:Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中为您的实例描述的 URL,在浏览器中打开您的实例的管理门户(Management Portal)。
<span id="3_Learn_More_About_IRIS_Native" class="anchor"></span>如果您不在代码指定的命名空间中,请切换到该命名空间。
导航到 Globals 页面(System Explorer(系统资源管理器) > Globals)。您应该会看到示例代码中创建的 testglobal global。点击 View(查看)来查看其内容。您应该会看到 global 的两个节点: ^testglobal(1) = 8888 和
^testglobal(2) = 9999。
了解有关 IRIS Native 的更多信息
有关 IRIS Native、globals 和 InterSystems IRIS 的更多信息,请参见:Using the Native API for Python(《使用 Native API for Python》)
了解有关 IRIS Native 的更多信息
Using Globals(《使用 Globals》)
文章
Qiao Peng · 三月 5, 2021
这是一个第三方写的在 IRIS 2020.1 和 Caché 2018.1.3 上工作的代码示例
不会与新版本保持同步
也不会获得 InterSystems 支持提供的服务!
Caché/Ensemble/IRIS 中的 Global 通常在 SQL 访问中是不可见的 本示例将展示如何克服此限制。Global 将呈现为一个表,其中包含它们的下标和存储的内容。 要查看的 global 通过一个静态 WHERE 条件传递给 SQL, 该条件需要 3 个参数:
名称 (必需)
开始下标 (可选)
结束下标 (可选)
只提供 global 名称将获得整个 global 的导出数据。还可以为 global 提供扩展引用,并且由于这是 SQL 表,因此各种附加条件都适用。
小心, 在 SQL 和 Caché/Ensemble/IRIS 之间进行正确引用可能是一个挑战。
示例:select * from zrcc_G.dump where zrcc_G.Dump('^|"CACHE"|Sample.PersonD',2,4)=1
ID Global Subscript Value
1 ^|"CACHE"|Sample.PersonD (2) $lb("",792533244,"GlobaDynamics Holdings Inc.",64256,"C1787","Y5365","A5","A658","R1770","","Ironhorse,Alice D.","T3710","O3","I4011","W8367","557-37-6758",83059958205089661,"1841-01-02 00:00:00")
2 ^|"CACHE"|Sample.PersonD (3) $lb("",862705606,"TeleLateral Associates",34553,"V8155","T8918","X9","V8732","K1167","","Eisenstien,Peter E.","H208","C8","Q2015","Q3357","702-46-8467",57275722714358892,"2020-06-23 13:27:18")
3 ^|"CACHE"|Sample.PersonD (4) $lb("",677194559,"RoboSoft Group Ltd.",52738,"F4851","Z364","S8","O6888","O4367","","Eagleman,Clint C.","C8051","R6","V1659","C9814","664-33-8809",-53705244349891319,"2020-06-23 13:27:18")
select TOP 15 * from zrcc_G.dump where zrcc_G.Dump('^%SYS','"JOURNAL"')=1
ID Global Subscript Value
1 ^%SYS ("JOURNAL") 0
2 ^%SYS ("JOURNAL","ALTDIR") "C:\InterSystems\IRIS\altjournal\"
3 ^%SYS ("JOURNAL","CURDIR") "C:\InterSystems\IRIS\mgr\journal\"
4 ^%SYS ("JOURNAL","CURRENT") "1^C:\InterSystems\IRIS\mgr\journal\20200801.009"
5 ^%SYS ("JOURNAL","EXPSIZE") 0
6 ^%SYS ("JOURNAL","LAST") "1^C:\InterSystems\IRIS\mgr\journal\20200801.009"
7 ^%SYS ("JOURNAL","LIFESPAN","FILE") "2,2"
8 ^%SYS ("JOURNAL","MAXSIZE") 1073741824
9 ^%SYS ("JOURNAL","PREFIX") ""
10 ^%SYS ("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.001") "2019-11-07 17:38:30"
11 ^%SYS ("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.002") "2019-11-07 17:38:30"
12 ^%SYS ("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.003") "2019-11-07 17:38:30"
13 ^%SYS ("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.004") "2019-11-07 17:38:30"
14 ^%SYS ("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191104.005") "2019-11-08 08:39:47"
15 ^%SYS ("JOURNAL","PURGED","c:\intersystems\iris\mgr\journal\20191105.001") "2019-11-08 08:39:47"
文章
Qiao Peng · 三月 5, 2021
Global 扫描和切片
这是一个在 IRIS 2020.1 和 Caché 2018.1.3 上工作的代码示例
不会与新版本保持同步
也不会获得 InterSystems 提供的支持服务!
大多数情况下,默认存储使用的 global 只有 1 个表示 IDKEY 的下标级别。 对于索引 global,可能有 2 个或更多下标级别。
数组、父子关系或扩展了基础数据类的持久化类 是具有更多下标级别的示例。 但所有这些 global 都非常统一。 我们还能看到与类或表无关的 global,例如 ^SPOOL、^ERRORS 或 ^%SYS 其中的结构取决于各个级别的具有特殊含义的下标。
分析这些不一致的 global 是一个挑战,而只是把它的内容导出来不一定有助于理解依赖关系。
本示例的原理就像那个古老的笑话:“如何吃一头大象?” ==>“切成片吃!”
以下是实现的功能:
通过一条 SQL 语句,您可以逐级显示任意 global 的结构。
您提供 global 名称和要显示的最大级别,即可获得相关下标、节点的 $Data、后面的子节点数量以及在该级别存储的内容(如果有的话)。
示例:**SELECT * FROM rcc\_G.scan where rcc\_G.Scan('^%SYS',1)=1**
Reference Level $D SubN Value
^%SYS 0 10 25
("CSP") 1 10
("CSPAppSec") 1 1 64
("CacheTempDir") 1 1 "c:\intersystems\iris\mgr\iristemp\"
("DBRefByName") 1 10
("Ensemble") 1 11 "2020-04-25 18:37:18"
("ErrorPurge") 1 1 30
("FIPSMode") 1 1 0
("IRISTempDir") 1 1 "c:\intersystems\iris\mgr\iristemp\"
("JOURNAL") 1 11 0
("LANGUAGE") 1 10
("LASTSESSIONGUID") 1 1 "EÊcRù¢GM£ô"_$c(127)_"¹9¾ÒÆ"
("LOCALE") 1 10
("ModuleRoot") 1 10
("NLS") 1 10
("SERVICE") 1 10
("SSPort") 1 1 51773
("StreamLocation") 1 10
("SystemMode") 1 1 "TEST"
("TempDir") 1 1 "C:\InterSystems\IRIS\mgr\Temp"
("WebServer") 1 10
("bindir") 1 1 "c:\intersystems\iris\bin\"
("shutdownlogerrors") 1 1 0
("sql") 1 10
("sysdir") 1 1 "c:\intersystems\iris\mgr\"
("tercap") 1 10
26 lines
**SELECT * FROM rcc\_G.scan where rcc\_G.Scan('^%SYS',2)=1**
Reference Level $D SubN Value
^%SYS 0 10 25
("CSP") 1 10 1
("CSP","LastUpdate") 2 1 "65553,44452"
("CSPAppSec") 1 1 0 64
("CacheTempDir") 1 1 0 "c:\intersystems\iris\mgr\iristemp\"
("DBRefByName") 1 10 9
("DBRefByName","CACHE") 2 1 "^^c:\intersystems\iris\mgr\cache\"
("DBRefByName","CACHEUSER") 2 1 "^^c:\intersystems\user\"
("DBRefByName","ENSLIB") 2 1 "^^c:\intersystems\iris\mgr\enslib\"
("DBRefByName","IRISAUDIT") 2 1 "^^c:\intersystems\iris\mgr\irisaudit\"
("DBRefByName","IRISLIB") 2 1 "^^c:\intersystems\iris\mgr\irislib\"
("DBRefByName","IRISLOCALDATA") 2 1 "^^c:\intersystems\iris\mgr\irislocaldata\"
< 60 lines more >
**SELECT * FROM rcc\_G.scan where rcc\_G.Scan('^ERRORS',37)=1 and id['Jour'**
Reference Level $D SubNodes Value
(65588,1,"*STACK",1,"V","%00000","N","""JournalState""") 8 1 0 4
(65592,1,"*STACK",1,"V","%00000","N","""JournalState""") 8 1 0 4
(65592,2,"*STACK",1,"V","%00000","N","""JournalState""") 8 1 0 4 很棒的文章,辛苦乔老爷!
文章
姚 鑫 · 二月 2
# 第十三章 I 开头的术语
### 安装目录 (install-dir)
**系统**
在通用引用 `IRIS` 安装目录时,文档使用术语 `install-dir`。在示例中,文档使用 `C:\MyIRIS\`。章节“默认安装目录”描述了 `IRIS` 在所有受支持操作系统上的安装位置。
### 实例 (instance)
**对象(Objects)**
表示特定实体的类的实现。术语“实例”和“对象”可以互换使用。
### 实例认证 (Instance Authentication)
**系统**
本地认证系统:用户会被提示输入密码,输入的密码的哈希值会传递到 `IRIS` 服务器,并与服务器中存储的现有密码的哈希值进行比较。如果两个值相同,`IRIS` 将授予用户对其有权限的资源的访问权限。
此机制在管理门户中列为“密码认证”。
### 实例方法 (instance method)
**对象(Objects)**
从类的特定实例调用的方法,并执行与该实例相关的某些操作。
### 实例化 (instantiate)
**对象(Objects)**
将对象实例放入内存中,以便程序可以对其进行操作。
### 中间源代码 (intermediate source code)
**ObjectScript**
`IRIS` 中可用的标准三代语言(`3GL`)`ObjectScript` 源代码。中间代码由 `IRIS` 编译器从宏源生成。在这个阶段,所有预处理器语法(包括嵌入式 `SQL`)都已解析,例程仅包含纯源代码。可以在这个级别编写 `ObjectScript` 例程,但无法使用嵌入式 `SQL` 或其他预处理器语法(如宏)。
### InterSystems IRIS 启动器 (InterSystems IRIS launcher)
**系统**
在 `Windows` 系统上启动`IRIS` 时显示在任务栏上的图标。通过此图标,你可以配置和管理`IRIS` 系统,以及创建和管理类和例程。
### InterSystems IRIS 数据库 (InterSystems IRIS database)
**系统**
存储在单个目录、命名空间或 `UIC` 中的全局和例程中的相关数据集合。
### InterSystems IRIS Java 对象服务器 (InterSystems IRIS Object Server for Java)
**对象(Objects)**
`IRIS Java` 绑定允许用 `Java` 编写的客户端应用程序访问基于服务器的 `IRIS` 对象。
### InterSystems IRIS 对象实用库 (InterSystems IRIS object utility library)
**对象(Objects)**
`IRIS` 对象实用库提供了一个接口,用于配置 `IRIS` 的对象组件、操作和编译类以及交互式使用对象。这些实用工具的主要接口是通过 `%SYSTEM.OBJO` 类。
### InterSystems IRIS 关系实用库 (InterSystems IRIS relational utility library)
**InterSystems SQL**
`IRIS` 关系实用库提供了一个接口,用于配置 `SQL`、管理 `SQL` 服务器以及从其他关系数据库导入 `DDL`。 这些实用工具的主要接口是通过 `%SYSTEM.SQL` 类。
### InterSystems IRIS 服务器 (InterSystems IRIS server)
**系统**
允许你在网络系统中使用分布式 `IRIS` 数据库的设施。
公告
Claire Zheng · 六月 14, 2023
Hi 开发者们,
欢迎观看视频,以了解 InterSystems TrakCare 创新工具包( Innovation Toolkit),该工具包可免费下载,使 TrakCare 用户能够快速访问标准 HL7® FHIR® 格式的数据,使记录系统成为转型系统:
⏯ TrakCare 创新工具包介绍 @ 2022 年全球峰会
🗣主持人:Eslam Farahat,InterSystems 产品经理
订阅InterSystems B站!
文章
姚 鑫 · 四月 2, 2022
# 第100章 SQL函数 NULLIF
如果两个表达式具有相同的值,则返回 `NULL` 的函数。
# 大纲
```java
NULLIF(expression1,expression2)
```
# 参数
- `expression1` - 表达式,可以是列名、数字或字符串文字、主变量或另一个标量函数的结果。
- `expression2` - 表达式,可以是列名、数字或字符串文字、主变量或另一个标量函数的结果。
`NULLIF` 返回与 `expression1` 相同的数据类型。
# 描述
如果 `expression1` 的值等于 `expression2` 的值,则 `NULLIF` 函数返回 `NULL`。否则,它返回 `expression1` 值。
`NULLIF` 等价于:
```sql
SELECT CASE
WHEN value1 = value2 THEN NULL
ELSE value1
END
FROM MyTable
```
# NULL 处理函数比较
下表显示了各种 `SQL` 比较函数。如果逻辑比较测试为 `True`(`A` 与 `B` 相同),则每个函数返回一个值,如果逻辑比较测试为 `False`(`A` 与 `B` 不同),则返回另一个值。这些函数允许执行 `NULL` 逻辑比较。不能在实际相等(或不相等)条件比较中指定 `NULL`。
`SQL Function`| `Comparison`| `Test Return Value`
---|---|---
IFNULL(ex1,ex2) [two-argument form]| ex1 = NULL |True returns ex2 False returns NULL
IFNULL(ex1,ex2,ex3) [three-argument form]| ex1 = NULL | True returns ex2 False returns ex3
{fn IFNULL(ex1,ex2)}| ex1 = NULL | True returns ex2 False returns ex1
ISNULL(ex1,ex2)| ex1 = NULL | True returns ex2 False returns ex1
NVL(ex1,ex2)| ex1 = NULL | True returns ex2 False returns ex1
NULLIF(ex1,ex2)| ex1 = ex2 | True returns NULL False returns ex1
COALESCE(ex1,ex2,...)| ex = NULL for each argument | True tests next ex argument. If all ex arguments are True (NULL), returns NULL. False returns ex
# 示例
以下示例使用 `NULLIF` 函数将 `Age=20` 的所有记录的显示字段设置为空:
```sql
SELECT Name,Age,NULLIF(Age,20) AS Nulled20
FROM Sample.Person
```
公告
Claire Zheng · 二月 15, 2023
InterSystems 纠正了一个可能导致 InterSystems IRIS® 和 Caché 无法在 Windows 上利用大页共享内存的问题,即使这些产品得到的信息是已分配到了大页内存。这会对系统性能产生不利影响。
该问题是由于 Windows 10 中的一个更改引起的,该更改需要 InterSystems IRIS® 和 Caché做相应的修改。请注意,此问题还会影响所有基于 InterSystems IRIS® 或 Caché 的 InterSystems 产品。以下版本的 Windows 会出现此问题:
Windows 10(版本 1703 及以上)
Windows 11
Windows Server 2019
Windows Server 2022
Windows Server 2016 不受影响。
作为参考,此问题的更正标识为 RJF533。此更正将包含在所有未来的 InterSystems IRIS® 和 Caché 发行版中。该更正也作为受支持产品版本的补丁提供。
InterSystems 建议采取以下措施以避免潜在的严重系统性能下降:
对于使用大页内存的系统,推迟升级到受影响的 Windows 版本,直到实施更正。
对于已经运行受影响的 Windows 版本并使用大页内存的系统,在任何有计划的系统负载增加之前实施更正。
InterSystems 通常建议使用大页内存以提高性能。有关更多信息,请参阅在 Windows和memlock上配置大页内存的文档部分。
如果您对此警报有任何疑问或需要更正的临时分发,请联系全球响应中心(WRC)。
文章
Michael Lei · 五月 8, 2021
关键字:Python,JDBC,SQL,IRIS,Jupyter Notebook,Pandas,Numpy ,机器学习
## 1. 目的
这是一个用于演示的 5 分钟快速笔记,通过 Jupyter Notebook 中的 Python 3 调用 IRIS JDBC 驱动程序,以经由 SQL 语法从 IRIS 数据库实例读取数据和向 IRIS 数据库实例写入数据。
去年,我发表了关于[将 Python 绑定到 Cache 数据库](https://community.intersystems.com/post/deep-learning-demo-kit-python3-binding-healthshare-part-i)的简要笔记(第 4.7 节)。 如何使用 Python 挂入 IRIS 数据库以将其数据读入 Pandas 数据框和 NumPy 数组进行常规分析,然后再将一些经过预处理或标准化的数据写回 IRIS 中,准备进一步用于 ML/DL 管道,现在可能是时候回顾一些选项和讨论了。
一些立即浮现的快速**选项**:
1. **ODBC**:Python 3 和原生 SQL 的 PyODBC?
2. **JDBC**:Pyhton 3 和原生 SQL 的 JayDeBeApi?
3. **Spark**:PySpark 和 SQL?
4. **Python Native API for IRIS**:超越先前的 Python Binding for Cache?
5. ** IPtyhon Magic SQL %%sql**? [它](https://github.com/catherinedevlin/ipython-sql)可以支持 IRIS 了吗?
这里有漏掉其他选项吗? 我有兴趣尝试任何选项。
## 2. 范围
我们是不是应该从普通的 JDBC 方法开始? 下一个快速笔记将总结 ODBC、Spark 和 Python Native API。
### 范围内:
此快速演示涉及以下常见组件:
Anaconda
Jupyter Notebook
Python 3
JayDeBeApi
JPyPe
Pandas
NumPy
一个 IRIS 2019.x 实例
### 范围外:
本快速笔记不会涉及以下内容,但它们也很重要,可以使用特定的站点解决方案、部署和服务单独解决:
安全端到端。
非功能性能等。
问题排查和支持。
许可。
## 3. 演示
### 3.1 运行 IRIS 实例:
我只运行了一个 IRIS 2019.4 容器,作为“远程”数据库服务器。 您可以使用任何您有权利访问的 IRIS 实例。
zhongli@UKM5530ZHONGLI MINGW64 /c/Program Files/Docker Toolbox$ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESd86be69a03ab quickml-demo "/iris-main" 3 days ago Up 3 days (healthy) 0.0.0.0:9091->51773/tcp, 0.0.0.0:9092->52773/tcp quickml
### 3.2 Anaconda 和 Jupyter Notebook:
我们将在笔记本电脑中重用相同的设置方法,[这里](https://community.intersystems.com/post/deep-learning-demo-kit-python3-binding-healthshare-part-i)对应 Anaconda(第 4.1 节),[这里](https://community.intersystems.com/post/run-deep-learning-demo-python3-binding-healthshare-part-ii)对应 Jupyter Notebook(第 4 节)。 Python 3.x 在这一步安装。
### 3.3 安装 JayDeBeApi 和 JPyPe:
启动 JupyterNotebook,然后在其单元格中运行以下内容设置 Python-to-JDBC/Java 桥:
!conda install --yes -c conda-forge jaydebeapi
JayDeBeApi 在撰写本文时(2020 年 1 月)使用 JPype 0.7,该版本由于一个已知错误无法运行,必须降级为 0.6.3
!conda install --yes -c conda-forge JPype1=0.6.3 --force-reinstall
### 3.4 通过 JDBC 连接到 IRIS 数据库
这里有一个正式的[使用 JDBC 连接到 IRIS 的文档](https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_jdbc)。
对于通过 JDBC 执行 Python SQL,我以下面的代码为例。 它连接到此 IRIS 实例的“USER”命名空间内的数据表“`DataMining.IrisDataset`”。
### 1. Set environment variables, if necessary<br>#import os<br>#os.environ['JAVA_HOME']='C:\Progra~1\Java\jdk1.8.0_241'<br>#os.environ['CLASSPATH'] = 'C:\interSystems\IRIS20194\dev\java\lib\JDK18\intersystems-jdbc-3.0.0.jar'<br>#os.environ['HADOOP_HOME']='C:\hadoop\bin' #winutil binary must be in Hadoop's Home
### 2. Get jdbc connection and cursor<br><strong>import jaydebeapi<br>url = "jdbc:IRIS://192.168.99.101:9091/USER"<br>driver = 'com.intersystems.jdbc.IRISDriver'<br>user = "SUPERUSER"<br>password = "SYS"</strong><br>#libx = "C:/InterSystems/IRIS20194/dev/java/lib/JDK18"<br><strong>jarfile = "C:/InterSystems/IRIS20194/dev/java/lib/JDK18/intersystems-jdbc-3.0.0.jar"</strong>
conn = jaydebeapi.connect(driver, url, [user, password], jarfile)<br>curs = conn.cursor()
### 3. specify the source data table<br><strong>dataTable = 'DataMining.IrisDataset'</strong>
### 4. Get the result and display<br><strong>curs.execute("select TOP 20 * from %s" % dataTable)<br>result = curs.fetchall()<br>print("Total records: " + str(len(result)))<br>for i in range(len(result)):<br> print(result[i])</strong>
### 5. CLose and clean - I keep them open for next accesses.<br><strong>#curs.close()<br>#conn.close()</strong>
Total records: 150
(1, 1.4, 0.2, 5.1, 3.5, 'Iris-setosa')
(2, 1.4, 0.2, 4.9, 3.0, 'Iris-setosa')
(3, 1.3, 0.2, 4.7, 3.2, 'Iris-setosa')
... ...
(49, 1.5, 0.2, 5.3, 3.7, 'Iris-setosa')
(50, 1.4, 0.2, 5.0, 3.3, 'Iris-setosa')
(51, 4.7, 1.4, 7.0, 3.2, 'Iris-versicolor')
... ...
(145, 5.7, 2.5, 6.7, 3.3, 'Iris-virginica')
... ...
(148, 5.2, 2.0, 6.5, 3.0, 'Iris-virginica')
(149, 5.4, 2.3, 6.2, 3.4, 'Iris-virginica')
(150, 5.1, 1.8, 5.9, 3.0, 'Iris-virginica')
测试表明 JDBC 上的 Python 可以正常运行。 以下只是常规 ML 管道的一些常规数据分析和预处理,由于我们可能会在后续的演示和比较中反复涉及,因此为方便起见在这里附上。
### 3.5 将 SQL 结果转换为 Pandas DataFrame,再转换为 NumPy 数组
如果还没有安装 Pandas 和 NumPy 软件包,可以通过 Conda 安装,类似于上面 3.3 节。
然后运行以下示例:
### transform SQL results "sqlData"to Pandas dataframe "df", then further to NumPy array "arrayN" for further ML pipelines import pandas as pdsqlData = "SELECT * from DataMining.IrisDataset"df= pd.io.sql.read_sql(sqlData, conn)df = df.drop('ID', 1)df = df[['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth', 'Species']]
# set the labels to 0, 1, 2, for NumPy matrixdf.replace('Iris-setosa', 0, inplace=True)df.replace('Iris-versicolor', 1, inplace=True)df.replace('Iris-virginica', 2, inplace=True)
# turn dataframe into Numpy arrayarrayN = df.to_numpy()
### 6. CLose and clean - if connection is not needed anymore?#curs.close()#conn.close()
我们例行查看一下当前数据:
df.head(5)
df.describe()
现在,我们得到了一个 DataFrame,以及一个来自源数据表的标准化 NumPy 数组。
当然,我们在这里可以尝试各种常规分析,一个 ML 人员会按照下述步骤开始,在 Python 中替换 R([链接](http://www.lac.inpe.br/~rafael.santos/Docs/CAP394/WholeStory-Iris.html))。
数据源引自此处
### 3.6 拆分数据并通过 SQL 写回 IRIS 数据库:
当然,我们可以像往常一样将数据拆分为训练集和验证集或测试集,然后将它们写回临时数据库表,实现 IRIS 一些即将推出的精彩 ML 功能:
import numpy as np from matplotlib import pyplotfrom sklearn.model_selection import train_test_split
# keep e.g. 20% = 30 rows as test data; trained on another e.g. 80% = 120 rowsX = arrayN[:,0:4]y = arrayN[:,4]X_train, X_validation, Y_train, Y_validation = train_test_split(X, y, test_size=0.20, random_state=1, shuffle=True)
# make 80% of random rows into a Train setlabels1 = np.reshape(Y_train,(120,1))train = np.concatenate([X_train, labels1],axis=-1)
# make 20% of left rows into Test setlTest1 = np.reshape(Y_validation,(30,1))test = np.concatenate([X_validation, lTest1],axis=-1)
# write the train data set into a Pandas framedfTrain = pd.DataFrame({'SepalLength':train[:, 0], 'SepalWidth':train[:, 1], 'PetalLength':train[:, 2], 'PetalWidth':train[:, 3], 'Species':train[:, 4]})dfTrain['Species'].replace(0, 'Iris-setosa', inplace=True)dfTrain['Species'].replace(1, 'Iris-versicolor', inplace=True)dfTrain['Species'].replace(2, 'Iris-virginica', inplace=True)
# write the test data into another Pandas framedfTest = pd.DataFrame({'SepalLength':test[:, 0], 'SepalWidth':test[:, 1], 'PetalLength':test[:, 2], 'PetalWidth':test[:, 3], 'Species':test[:, 4]})dfTest['Species'].replace(0, 'Iris-setosa', inplace=True)dfTest['Species'].replace(1, 'Iris-versicolor', inplace=True)dfTest['Species'].replace(2, 'Iris-virginica', inplace=True)
### 3. specify temp table names#dataTable = 'DataMining.IrisDataset'dtTrain = 'TRAIN02'dtTest = "TEST02"
### 4. Create 2 temporary tables - you can try drop tables then re-create them every timecurs.execute("Create Table %s (%s DOUBLE, %s DOUBLE, %s DOUBLE, %s DOUBLE, %s VARCHAR(100))" % (dtTrain, dfTrain.columns[0], dfTrain.columns[1], dfTrain.columns[2], dfTrain.columns[3], dfTrain.columns[4]))curs.execute("Create Table %s (%s DOUBLE, %s DOUBLE, %s DOUBLE, %s DOUBLE, %s VARCHAR(100))" % (dtTest, dfTest.columns[0], dfTest.columns[1], dfTest.columns[2], dfTest.columns[3], dfTest.columns[4]))
### 5. write Train set and Test set into the tales. You can try to delete old record then insert everytime. curs.fast_executemany = Truecurs.executemany( "INSERT INTO %s (SepalLength, SepalWidth, PetalLength, PetalWidth, Species) VALUES (?, ?, ?, ? ,?)" % dtTrain, list(dfTrain.itertuples(index=False, name=None)) )curs.executemany( "INSERT INTO %s (SepalLength, SepalWidth, PetalLength, PetalWidth, Species) VALUES (?, ?, ?, ? ,?)" % dtTest, list(dfTest.itertuples(index=False, name=None)) )
### 6. CLose and clean - if connection is not needed anymore?#curs.close()#conn.close()
现在,如果切换到 IRIS 管理控制台或终端 SQL 控制台,应该看到已创建 2 个临时表:120 行的 TRAIN02 和 30 行的 TEST02。
那么本篇快速笔记到这里就结束了。
## 4. 注意事项
* 以上内容可能会被更改或完善。
## 5. 未来计划
我们将使用 IRIS 的 PyODBC、PySPark 和 Python Native API 替换第 3.3 和 3.4 节。除非有人愿意帮忙编写一篇快速笔记,我也将对此不胜感激。
文章
Claire Zheng · 二月 21, 2023
速度、规模和安全性是我们真正热衷的领域,这也正是优秀的E级方程式赛车手所追求的。在InterSystems 2022年全球峰会上,InterSystems 数据平台产品管理总监Jeffery Fried 及其团队分享了InterSystems IRIS数据平台的新功能与产品规划。基于InterSystems IRIS数据平台,我们为用户构建优秀的“赛车”,内置的一系列非凡功能和高效周全的“维修技师”,确保“赛车手”能够在竞争激烈的赛道中心无旁骛地飞速向前!
文章
Jingwei Wang · 十一月 29, 2022
在Windows配置DSN
确认InterSystems ODBC客户端驱动已安装
InterSystems IRIS ODBC驱动会随着InterSystems IRIS安装包默认安装。
如果没有随着InterSystems IRIS安装,请由此下载驱动,下载后执行.exe文件进行安装。
定义DSN(Data Source Names)
打开Administrative Tools
打开ODBC Data Sources Administrator(32-bit 或者 64-bit)
选择‘System DSN’,点击右边 ‘Add’,弹出‘Create New Data Source’窗口。
选择一个InterSystems IRIS 安装版本的ODBC驱动,点击‘Finish’
如下图所示,输入驱动名称,IP地址,端口号(使用超级服务端口号),命名空间,用户名和密码。
然后点击 'Test Connection' 进行连接测试
在Linux配置DSN
确认InterSystems ODBC客户端驱动已安装
InterSystems IRIS ODBC驱动会随着InterSystems IRIS安装包默认安装。
如果没有随着InterSystems IRIS安装,请先安装ODBC驱动
Linux
点击下载ODBC驱动
创建一个文件夹,例如/usr/irisodbc,存放刚刚下载的.tar文件
解压.tar文件,执行ODBCinstall安装脚本,irisodbc.ini会被创建:
# tar xvf ODBC-2022.1.0.209.0-lnxrharm64.tar.gz
# ./ODBCInstall
Mac
执行以下命令安装unixODBC
brew install unixODBC
配置DSN - 根据InterSystems IRIS服务器修改odbcinst.ini文件的配置信息
[ODBC Data Sources]
User = User
Userunixodbc = Userunixodbc
[User]
Driver = /isc/iris/bin/libirisodbc35.so
Description = IRIS ODBC driver
Host = localhost
Namespace = IRISAPP
UID = username
Password = pws
Port = 51773
Protocol = TCP
Query Timeout = 1
Static Cursors = 0
Trace = off
TraceFile = iodbctrace.log
Authentication Method = 0
Security Level = 2
Service Principal Name = iris/localhost.domain.com
[Userunixodbc]
Driver = /isc/iris/bin/libirisodbcur6435.so
Description = IRIS ODBC driver
Host = localhost
Namespace = IRISAPP
UID = username
Password = pws
Port = 51773
Protocol = TCP
Query Timeout = 1
Static Cursors = 0
Trace = off
TraceFile = iodbctrace.log
Authentication Method = 0
Security Level = 2
Service Principal Name = iris/localhost.domain.com
您好,问下配置sqlsever的odbc应该怎么配置呢 您是在什么环境配置呢?windows的话,照着上面的截图配置,Linux的话需要安装配置unixODBC。 linux下,自己安装了unixODBC,安装之后配置了DSN,在页面中怎么才能选择到自己安装配置的DSN呢
文章
姚 鑫 · 七月 14, 2022
# 第五章 使用嵌入式 Python (二)
## 在 Python 脚本文件 (.py) 中
还可以使用 `irispython` 命令执行 `Python` 脚本。
考虑 `Windows` 系统上的文件 `C:\python\test.py`,其中包含以下代码:
```python
# print the members of the Fibonacci series that are less than 10
print('Fibonacci series:')
a, b = 0, 1
while a < 10:
print(a, end=' ')
a, b = b, a + b
# import the iris module and show the classes in this namespace
import iris
print('\nInterSystems IRIS classes in this namespace:')
status = iris.cls('%SYSTEM.OBJ').ShowClasses()
print(status)
```
可以从命令行运行 `test.py`,如下所示:
```python
C:\InterSystems\IRIS\bin>set IRISUSERNAME =
C:\InterSystems\IRIS\bin>set IRISPASSWORD =
C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER
C:\InterSystems\IRIS\bin>irispython \python\test.py
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.Person
1
```
在基于 `UNIX` 的系统上,使用 `export` 而不是 `set`。
```python
/InterSystems/IRIS/bin$ export IRISUSERNAME=
/InterSystems/IRIS/bin$ export IRISPASSWORD=
/InterSystems/IRIS/bin$ export IRISNAMESPACE=USER
/InterSystems/IRIS/bin$ ./irispython /python/test.py
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.Person
1
```
注意:如果运行 `import iris` 并看到一条消息说 `IRIS_ACCESSDENIED`,请启用 `%Service_Callin`。在管理门户中,转至 `System Administration > Security > Services`,选择 `%Service_CallIn`,然后选中启用服务框。
# 在 IRIS 类的方法中
可以使用 `Language` 关键字在 `IRIS` 类中编写 `Python` 方法。然后,可以调用该方法,就像调用用 `ObjectScript` 编写的方法一样。
例如,使用 `Python` 编写的具有类方法的以下类:
```python
Class User.EmbeddedPython
{
/// Description
ClassMethod Test() As %Status [ Language = python ]
{
# print the members of the Fibonacci series that are less than 10
print('Fibonacci series:')
a, b = 0, 1
while a < 10:
print(a, end=' ')
a, b = b, a + b
# import the iris module and show the classes in this namespace
import iris
print('\nInterSystems IRIS classes in this namespace:')
status = iris.cls('%SYSTEM.OBJ').ShowClasses()
return status
}
}
```
可以从 `ObjectScript` 调用此方法:
```python
USER>set status = ##class(User.EmbeddedPython).Test()
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.EmbeddedPython
User.Person
USER>write status
1
```
或来自 `Python`:
```python
>>> import iris
>>> status = iris.cls('User.EmbeddedPython').Test()
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.EmbeddedPython
User.Person
>>> print(status)
1
```
## 在 SQL 函数和存储过程中
还可以通过在 `CREATE` 语句中指定参数 `LANGUAGE PYTHON` 来使用 `Embedded Python` 编写 `SQL` 函数或存储过程,如下所示:
```python
CREATE FUNCTION tzconvert(dt DATETIME, tzfrom VARCHAR, tzto VARCHAR)
RETURNS DATETIME
LANGUAGE PYTHON
{
from datetime import datetime
from dateutil import parser, tz
d = parser.parse(dt)
if (tzfrom is not None):
tzf = tz.gettz(tzfrom)
d = d.replace(tzinfo = tzf)
return d.astimezone(tz.gettz(tzto)).strftime("%Y-%m-%d %H:%M:%S")
}
```
该代码使用 `Python datetime` 和 `dateutil` 模块中的函数。
以下 `SELECT` 语句调用 `SQL` 函数,将当前日期/时间从东部时间转换为协调世界时 (`UTC`)。
```sql
SELECT tzconvert(now(), 'US/Eastern', 'UTC')
```
该函数返回如下内容:
```sql
2021-10-19 15:10:05
```
公告
Claire Zheng · 四月 8, 2021
InterSystems中国正在招聘SE,具体职位需求以英文发布,详情如下,欢迎将简历砸过来 (claire.zheng@intersystems.com)or 私信联系 :)
Job Details
Seniority Level
Mid-Senior level
Industry
Information Technology & Services
Computer Software
Employment Type
Full-time
Job Functions
Sales
Information Technology
About the job
Intersystems China 系联软件(北京)有限公司, is the trusted Healthcare IT solution provider for many World-Class hospitals and clinics in China, such as China’s largest foreign-invested hospital, United Family Healthcare 和睦家医疗, and one of China’s most prestige medical institution, Peking Union Medical College Hospital 北京协和医院。
The company has a small but collaborative team of talented and passionate individuals working the Greater China Region.
Due to China’s economic growth, aging population and the government’s determination in the Healthcare reform, China has become one of InterSystems’ most important strategic regions with unparalleled growth potentials in the years to come.
Based at our Beijing office, the Sales Engineer will provide guidance in the use of InterSystems' products as they best suit the requirements of the customer and its market. Product and business strategies are coordinated with the InterSystems Sales Team to apply existing and new products to customers' database and application needs. The role is very wide-ranging and challenging, requiring a mixture of design skills, hands-on coding, presentation skills, technical architecture, sales awareness, business acumen, evangelism, mentoring and training. This role requires regular travel across China and occasionally overseas.
Responsibilities
Investigate & demonstrate the use of InterSystems products with other 3rd party technologies.
Manage the technical relationship with customer accounts, ensuring that they are aware of the latest product capabilities.
Identify new opportunities within existing accounts.
Build and demonstrate Proof of Concepts (POCs) for prospects and customers to illustrate the suitability, ease of use, performance, features, and reliability and/or connectivity capabilities of InterSystems technology.
Participate in business and detailed technical discussions at all levels and in all departments of the customer's organisation to foster the adoption, use and deployment of InterSystems’ technologies.
Recommend technical architecture, database schema, design patterns, migration and upgrade strategies and operational best practices.
Install InterSystems software and assist with benchmarking exercises to determine optimal deployment configurations.
Work as a hands-on lead application developer to coach partners and prospects, particularly in the early stages of adoption or during particularly technically challenging projects.
Provide application programming in a variety of InterSystems technologies, and other technologies.
Give corporate presentations to InterSystems' customers and prospects at site visits, marketing events and such venues. Topics include strategic and tactical considerations across both technical and business directions. Provide technical product demonstrations.
Carry out formal training courses in InterSystems technologies.
Support customers and prospects during beta test programmes or pre-launch activities and provide feedback to the software development groups.
Assist with troubleshooting and interact with the World-wide Response Centre (WRC) to support resolution of technical problems.
Provide consulting services for the Sales Department and other InterSystems departments (Marketing, Support, Development, Documentation among others) as requested
Skills and Qualifications
Extensive previous experience as a Sales Engineer or related role, preferably in the Healthcare industry.
Outstanding interpersonal, communication and presentation skills
Demonstrated expertise in developing and implementing the functional specifications for integration projects in the healthcare marketplace, including routing and/or transformation engines
Demonstrated experience in all or most of the following: HTML, CSS, JavaScript, XML, XSLT, XPath, XSD, SAX, JSP/Servlets, ASP, SOAP, Web Services
Demonstrated expertise in SQL and ODBC / JDBC
Demonstrated experience in developing applications in various modern Object-oriented programming languages such as Java, C# and VB.Net
Understanding of all or most of the following: Network domains and network configurations, IP Addressing, DNS, WINS, FTP, HTTP, SFTP, SMTP, TELNET and SNMP
High level of understanding in Analytics and Business Intelligence concepts.
Experience
Broad knowledge of IT industry issues & trends including integration, data management, application development and cloud, with specific vertical market & technical knowledge in Integration (SOA, ESB, EAI, ETL, BI…).
Proven experience or technical management in an application development environment.
At least 4 years programming with demonstrable current hands-on expertise in object-oriented languages such as C#, C++ or Java / J2EE.
Knowledge of ESB, Enterprise Application Integration (EAI) experience using InterSystems Ensemble, Health Connece, BEA Software, IBM, Oracle, Microsoft or similar.
Ongoing experience within the design, development & deployment of complex applications.
Knowledge of application frameworks, application servers and server-less programming models.
Knowledge of agile software development processes and continuous development.
Extensive use of 2 or more databases such as InterSystems Caché, Oracle, SQLServer, Sybase, Informix or DB2/UDB, including designing logical and physical database schema, good SQL and JDBC/ODBC expertise, installation and configuration skills, and performance tuning.
Proven business analysis and problem-solving skills.
Strong presentation, influencing and communication skills.
Understanding of the business considerations of application development, support and deployment.
Software Engineering experience.
Familiarity with healthcare related integration in particular HL7 and FHIR standards and protocols.
Experience with Business Intelligence and Analytics technologies and approaches.
Familiarity with modern web-based development frameworks such as Angular, React, Vue.js or similar.
Familiarity with Machine Learning tools and languages
English language fluency.
欢迎简历继续砸过来。。。 我们又开始招人啦!
文章
Michael Lei · 七月 20, 2022
IRIS 命令qlist或list可以用来把输出结果输出到一个文件。
qlist的结果以文本格式输出,以^为分隔符。
第三部分,以^为界,包含运行状态数据。
$ iris qlist IRIS > iris.log
$ cat iris.log
IRIS^/Applications/iris^2022.1.0.164.0^running, since Thu Apr 7 16:37:03 2022^iris.cpf^1972^52773^0^alert^IRIS^^^/Applications/iris
在列表的情况下,以status:为前缀的一行包含运行状态数据。
对于基于Unix的操作系统
$ iris list IRIS > iris.log
$ cat iris.log
Configuration 'IRIS' (default)
directory: /Applications/iris
versionid: 2021.2.0.650.0
datadir: /Applications/iris
conf file: iris.cpf (SuperServer port = 1972, WebServer = 80)
status: running, since Thu Apr 7 16:37:03 2022
state: alert
product: InterSystems IRIS
Windows 环境下,不显示STATE行。
C:\InterSystems\IRIS\bin>iris listInstance 'IRIS' (Development installation) directory: 'C:\InterSystems\IRIS' versionid: '2021.2.0.650.0' conf file: 'c:\intersystems\iris\iris.cpf' (SuperServer port = 1972, WebServer port = 80) status : 'running, since Wed Jun 1 19:26:09 2022' Product : InterSystems IRIS
文章
Louis Lu · 十一月 2, 2021
本文档介绍了 XEP API(com.intersystems.xep),它提供了在 InterSystems IRIS®数据平台上极其快速的对Java 对象存储和检索的能力。文档概述了使用 XEP 将 Java 对象持久化的方法,并引导您通过一个简单的场景来演示该API 的主要功能。
这些演示的内容、只使用默认设置和功能,这样您就可以熟悉 XEP 的基本原理,而不必处理超出本概述范围的细节问题。有关 XEP 的完整文档,请参见 Persisting Java Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 Java 对象》)。
要浏览所有的技术概要(First Look),包括可以在 InterSystems IRIS 免费的评估实例上执行的那些,请参见 InterSystems First Looks(《InterSystems 技术概要》)。
快速的 Java 对象存储和检索
Java 是一种面向对象的语言,因此对于 Java 应用程序来说,将数据建模为对象是很自然的。然而,当应用程序需要将数据存储在数据库中时,这可能会出现问题。如果您使用 JDBC 来存储和检索对象,您就面临着将对象数据转换为一组关系表,然后再将查询结果集转化为对象的问题。这个问题的通常解决方案是使用对象-关系映射(ORM)框架——如 Hibernate——来自动化这个过程。InterSystems IRIS 提供了一个标准的 Hibernate 接口,InterSystems 推荐它用于大型、复杂的对象层次结构。
另一方面,对于执行实时数据采集等任务的应用程序,主要问题是速度而不是数据复杂性。虽然 Hibernate 绝对不慢(如果适当优化的话),但对于需要极其快速地存储和检索简单或中等复杂数据的任务来说,XEP 是一个更好的选择。在大多数情况下,它将比 Hibernate 或 JDBC 快得多。
XEP 是如何工作的?
XEP 是一个轻量级的 Java API,它将 Java 对象数据作为持久化事件(persistent event)来处理。持久化事件(persistent event)是 InterSystems IRIS 类(通常是 %Persistent 的子类)的一个实例,包含 Java 对象中数据字段的副本。与任何此类实例一样,可以通过对象访问、SQL 查询或直接 global 访问来检索它。
在创建和存储持久化事件(persistent event)之前,XEP 必须分析相应的 Java 类,并将 schema 导入数据库。Schema 定义了用于存储 Java 对象的持久化事件类的结构。如果持久化事件类还不存在,导入 schema 将自动为其创建数据库定义。来自分析的信息可能是 XEP 导入 schema 所需要的全部信息。对于更复杂的结构,您可以提供额外的信息,允许 XEP 生成索引并覆盖导入字段的默认规则。
在为类创建 schema 之后,您可以使用各种 XEP 方法来存储、更新或删除事件、运行 SQL 查询,并遍历查询结果集。
试一试!XEP 的实际操作
现在是您自己尝试 XEP 的时候了。这个 XepSimple 演示是一个非常小的程序,但它提供了大多数重要的XEP 功能的示例,并概述了如何使用 XEP API。
想试试 InterSystems IRIS Java 开发和互操作性功能的在线视频演示吗?请查看 Java QuickStart(Java 快速入门)!
用前须知
要使用该程序,您需要在一个系统上安装 JDK 1.8 版本和任意的 Java IDE,并连接一个正在运行的 InterSystems IRIS 实例。您对 InterSystems IRIS 的选择包括多种已授权的和免费的评估实例;实例不需要是您正在工作的系统(尽管它们必须具有网络访问权限)。关于如何部署每种类型的实例的信息(如果您还没有可使用的实例),请参见 InterSystems IRIS Basics: Connecting an IDE(《InterSystems IRIS 基础:连接一个 IDE》)中的 Deploying InterSystems IRIS(部署 InterSystems IRIS)。使用同一文档中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)和 Java IDE 中的信息,将 IDE 连接到您的 InterSystems IRIS 实例。
添加示例代码
下面的演示向您演示如何使用 XEP 和 InterSystems IRIS。XepSimple 演示是一个非常小的程序,但它提供了大多数关键 XEP 功能的示例,并概述了如何使用 XEP API。
您可以阅读这里列出的代码,或者您可以从 InterSystems GitHub 存储库下载并自己运行它。下载的内容包括一个 ReadMe,其中包含开始时需要的所有信息。
演示程序分为四个部分,每个部分演示四个主要 XEP 类中的一个:EventPersister、Event、EventQuery 和 EventQueryIterator:
class XepSimple
package xepsimple;
import com.intersystems.xep.*;
import xep.samples.SingleStringSample;
public class XepSimple {
public static void main(String[] args) throws Exception {
// Generate 12 SingleStringSample objects for use as test data
SingleStringSample[] sampleArray = SingleStringSample.generateSampleData(12);
// EventPersister
EventPersister xepPersister = PersisterFactory.createPersister();
xepPersister.connect("127.0.0.1",51773,"User","_SYSTEM","SYS"); // connect to localhost
xepPersister.deleteExtent("xep.samples.SingleStringSample"); // remove old test data
xepPersister.importSchema("xep.samples.SingleStringSample"); // import flat schema
// Event
Event xepEvent = xepPersister.getEvent("xep.samples.SingleStringSample");
for (int i=0; i < sampleArray.length; i++) {
SingleStringSample sample = sampleArray[i]; // array initialized on line 8
sample.name = "Sample object #" + i;
xepEvent.store(sample);
System.out.println("Persisted " + sample.name);
}
// EventQuery
String sqlQuery = "SELECT * FROM xep_samples.SingleStringSample WHERE %ID BETWEEN ? AND ?";
EventQuery<SingleStringSample> xepQuery = xepEvent.createQuery(sqlQuery);
xepQuery.setParameter(1,3); // assign value 3 to first SQL parameter
xepQuery.setParameter(2,12); // assign value 12 to second SQL parameter
xepQuery.execute(); // get resultset for IDs between 3 and 12
// EventQueryIterator
EventQueryIterator<SingleStringSample> xepIter = xepQuery.getIterator();
while (xepIter.hasNext()) {
SingleStringSample newSample = xepIter.next();
newSample.name = newSample.name + " has been updated";
xepIter.set(newSample);
System.out.println(newSample.name);
}
xepQuery.close();
xepEvent.close();
xepPersister.close();
} // end main()
} // end class XepSimple
XepSimple 执行以下任务:
首先,通过调用示例数据类(sample data class) xep.samples.SingleStringSample 的方法生成一些示例对象。
EventPersister 是 XEP 的主要入口点(main entry point),并提供到数据库的连接。
它创建一个名为 xepPersister 的实例,该实例建立到数据库的连接并删除任何现有的示例数据。然后调用 importSchema() 来分析示例类并将 schema 发送到数据库,进而扩展空间保存持久化 SingleStringSample 对象。
EventPersister 包含连接 InterSystems IRIS 实例所需信息——主机名、端口、IRIS命名空间、用户名和密码。使用实例的正确信息更新它们,如 InterSystems IRIS Basics:Connecting an IDE( 《InterSystems IRIS 基础:连接一个 IDE》)中的 InterSystems IRIS Connection Information(InterSystems IRIS 连接信息)所述,这与您用来连接 IDE 和实例的信息相同。可以指定使用 USER 命名空间,或者使用您在已安装的实例中创建的另一个命名空间。如果实例是本地安装的,并且连接使用 localhost 作为服务器地址,程序将使用本地共享内存连接,这比标准的 TCP/IP 连接还要快。
Event 封装了(encapsulate) Java 对象和相应的数据库对象之间的接口。
一旦生成了 schema ,xepPersister 就可以为示例类创建一个名为 xepEvent 的 Event 对象。在循环中,SingleStringSample 的每个实例都将被修改,然后被持久化到数据库中。 xepEvent store() 方法使用了xepPersister 中定义的连接和 schema。
EventQuery 用于准备和执行 SQL 查询。
名为 xepQuery 的 EventQuery<SingleStringSample> 对象是通过将查询字符串传递给 xepEvent 对象的 createQuery() 方法创建的。 该字符串定义了一个接受两个参数(? 字符)的 SQL 查询。 参数值是通过调用 setParameter() 定义的,调用 execute() 可查询结果集。
EventQueryIterator 用于从结果集中读取行,并更新或删除相应的持久化对象。
现在 xepQuery 包含了查询结果集,可以通过调用 getIterator() 为它创建一个名为 xepIter 的迭代器。在循环中,迭代器的 next() 方法被用来获取每一行数据并将其分配给 SingleStringSample 对象。然后修改对象,迭代器的 set() 方法更新数据库中相应的持久化对象。
当处理完成后,它通过调用 XEP 对象的 close() 方法进行清理。
SingleStringSample 类
如果您感兴趣,下面是我们的示例类列表:
了解有关 XEP 和对象持久化的更多信息
xep.samples.SingleStringSample
public class SingleStringSample {
public String name;
public SingleStringSample() {}
SingleStringSample(String str) {
name = str;
}
public static SingleStringSample[] generateSampleData(int objectCount) {
SingleStringSample[] data = new SingleStringSample[objectCount];
for (int i=0;i<objectCount;i++) {
data[i] = new SingleStringSample("single string test");
}
return data;
}
}
之所以选择这个类,部分原因是在 XEP 生成 schema 之前不需要添加标注 annotation。大多数类都需要一个或多个标注来进行 schema 优化(这超出了本文的讨论范围)。
下一步
XepSimple 演示的目的是让您体验 XEP,而又不陷入细节困境,它并非用于实际生产代码的模型——它甚至没有进行异常检查。最重要的简化是在示例数据中。您不需要标注或其他机制来帮助 schema 的生成和优化,类持久化了一些很小的 Java 对象。实际应用程序通常需要一些标注(尽管通常比 Hibernate 少)。
当您把 XEP 引入生产系统时,您将需要了解 XEP 为提要优化、索引控制、批量加载和其他重要任务提供的全部工具 。主要的 XEP 书籍 Persisting Java Objects with InterSystems XEP (《使用 InterSystems XEP 持久化 Java 对象》)对这些功能进行了全面描述。本文档末尾列出的参考资料描述了 InterSystems IRIS 对 Java 支持的其他方面。
了解有关 XEP 和对象持久化的更多信息
要了解有关 Java 对象持久化和其他 InterSystems Java 互操作性技术的更多信息,请参见:
First Look: JDBC and InterSystems Databases(《技术概要:JDBC 和 InterSystems 数据库》)介绍了如何通过 JDBC 连接到 InterSystems IRIS:它提供了产品简介、特殊功能介绍,以及一个亲自尝试的机会。这是一个简单了解并熟悉 InterSystems IRIS 对 Java 支持的起点。
Using Java with the InterSystems JDBC Driver (《在 InterSystems JDBC 驱动程序中使用 Java》)中的 “InterSystems Java Connectivity Options(InterSystems Java 连接选项)”概述了 JDBC 驱动程序支持的所有 InterSystems IRIS Java 技术。
InterSystems IRIS 提供了 Java API,通过 SQL 表、对象和多维存储轻松访问数据库。有关每种类型访问的详细信息,请参见以下书籍:
Using Java with the InterSystems JDBC Driver(《在 InterSystems JDBC 驱动程序中使用 Java》)进行 SQL 表访问。InterSystems JDBC 驱动程序允许 InterSystems IRIS 建立到外部应用程序的 JDBC 连接,并通过 SQL 提供对外部数据源的访问。
Using the Native API for Java(《使用 Native API for Java》)进行本机多维存储访问。InterSystems IRIS 本机 API 允许您直接访问本机基于树的多维存储数据结构,这些结构是 InterSystems IRIS 对象和 SQL 表接口的基础
Persisting Java Objects with InterSystems XEP(《使用 InterSystems XEP 持久化 Java 对象》)进行对象访问。XEP 针对事务处理应用程序进行了优化,这些应用程序处理简单到中等复杂的对象层次结构,并需要极快的对象数据持久化和检索。
Implementation Reference for Java Third Party APIs(《Java 第三方 API 的实施参考 》)中的 "Hibernate Support(Hibernate 支持)"描述了 InterSystems IRIS 的 Hibernate 实现。这个实现了对 Java Persistence Architecture(JPA)的支持,这是推荐用于 Java 项目中大型、复杂对象层次结构的持久化技术。