文章 Jingwei Wang · 七月 29, 2022 33m read

什么时候使用索引

索引提供了一种机制,通过维护常用数据的分类子集来优化查询。确定哪些字段应该被编入索引需要一些思考:太少或错误的索引,关键查询会运行得太慢;太多的索引会减慢INSERT和UPDATE的性能(因为索引值必须被设置或更新)。

索引什么

为了确定添加索引是否能提高查询性能,从管理门户的SQL界面运行查询,并在Performance中注意 global引用的数量。添加索引,然后重新运行查询,注意 global引用的数量。一个有用的索引应该减少 global引用的数量。你可以通过使用%NOINDEX关键字作为WHERE子句或ON子句条件的前言来阻止索引的使用。

你应该对JOIN中指定的字段(属性)进行索引。例如,LEFT OUTER JOIN从左表开始,然后查看右表,因此,你应该对右表的字段进行索引。在下面的例子中,你应该为T2.f2编制索引。一个INNER JOIN应该在两个ON子句字段上都有索引。

  FROM Table1 AS T1 LEFT OUTER JOIN Table2 AS T2 ON T1.f1 = T2.f2

如果查询计划中的第一个项目是 "read master map",或者查询计划调用的模块的第一个项目是 "read master map",那么查询的第一个map就是master map而不是索引map。

0
0 205
文章 Jingwei Wang · 七月 28, 2022 8m read

InterSystems SQL支持在InterSystems IRIS数据平台数据库中将流数据存储为BLOB(Binary Large Objects 二进制大对象)或CLOB(Character Large Objects字符大对象)的能力。

InterSystems SQL支持两种流字段:

  • 字符流:用于大量的文本。
  • 二进制流:用于图像、音频或视频。

BLOBs和CLOBs可以存储多达4GB的数据(JDBC和ODBC规范规定的限制)。除了在通过ODBC或JDBC客户端访问时如何处理字符编码转换(如Unicode到多字节)外,BLOB和CLOB的操作在各方面都是相同的:BLOB中的数据被视为二进制数据,决不转换为其他编码,而CLOB中的数据被视为字符数据,在必要时进行转换。

如果一个二进制流文件(BLOB)包含单一的非打印字符$CHAR(0),它被认为是一个空的二进制流。它相当于""空二进制流值:它存在(不是空的),但长度为0。

从对象的角度来看,BLOB和CLOBs被表示为流对象。更多信息请参见定义和使用类中的 "与流合作 "一章。

定义流数据字段

InterSystems SQL支持流字段的各种数据类型名称。这些InterSystems的数据类型名称是对应于以下的同义词。

  • 字符流:数据类型LONGVARCHAR,映射到%Stream.
0
0 245
文章 Jingwei Wang · 七月 28, 2022 4m read

定义 Stored Procedures

可以使用以下方式定义stored procedures

  1. 使用DDL定义存储过程
  2. 使用类方法定义存储过程

使用DDL定义存储过程

CREATE PROCEDURE 可以创建一个查询,它总是作为一个存储过程被预测。一个查询可以返回一个单一的结果集。

CREATE PROCEDURE AgeQuerySP(IN topnum INT 10, IN minage INT 20)
BEGIN
SELECT TOP :topnum Name, Age FROM Sample.Person
WHERE Age > :minage;
END

列表中的每个参数声明包括(按顺序)。指定参数模式是IN(输入值),OUT(输出值),还是INOUT(修改值)。如果省略,默认的参数模式是IN,参数名称是区分大小写的。

CREATE QUERY 可以创建一个可以选择作为存储过程投射的查询。一个查询可以返回一个单一的结果集,这个查询可能是也可能不是作为存储过程公开的。要创建一个作为存储过程公开的查询,你必须指定PROCEDURE关键字作为其特征之一。你也可以使用CREATE PROCEDURE语句来创建一个作为存储过程公开的查询。

为了创建一个查询,你必须拥有%CREATE_QUERY管理权限,正如GRANT命令所指定的那样。

0
0 246
文章 Jingwei Wang · 七月 25, 2022 4m read

本章介绍了使用InterSystems IRIS作为企业服务总线,描述了InterSystems IRIS ESB架构,并提供了部署ESB的概述。

企业服务总线的概念

企业服务总线(ESB)提供了一个单点来访问和管理具有SOAP、REST或其他网络API的应用程序。ESB提供了以下功能。

  • 提供一个中心来发现和访问服务。
  • 将应用程序与服务隔离开来,允许你在一个地方改变服务的描述,而不需要更新所有依赖它的应用程序。例如,你可以改变服务器的地址,甚至服务的API,并在ESB中处理这些变化。这为你的应用程序提供了协议独立性。如果一个应用程序是使用SOAP API开发的,但一个新的服务用REST API提供了额外的功能,ESB可以使新的REST服务作为REST和SOAP API可用,允许你添加新服务的功能,同时保持对现有应用程序的兼容性。
  • 提供一种机制来组织和跟踪企业使用的应用程序以及这些应用程序之间的依赖关系。。

ESB架构

InterSystems IRIS ESB架构有以下组成部分。

  • 将传入的请求与服务器连接起来的路由机制。这是由具有专门业务服务(BS)和业务操作(BO)的 production实现的,也可以选择业务流程(BP)。
0
0 526
文章 Jingwei Wang · 七月 21, 2022 5m read

在创建一个或多个立方体后,你通常会创建并打包一组透视表和仪表盘,而用户通常会根据需要创建新的透视表和仪表盘。

本章简要地引导你了解创建透视表和仪表盘的过程。它包括以下几个步骤。

  • 创建透视表
  • 创建一个仪表盘
  • 导出并打包这些项目

创建透视表

在本教程的前面,我们创建了一个使用Patients cube的透视表。现在让我们创建使用你的新立方体Tutorial的透视表。

  1. 进入分析器。
  2. 打开Tutorial立方体。
  3. 展开AgeD维度。
  4. 把Age Group拖到行中。
  5. 将Age Bucket拖到Age Group的子级
  6. 拖动 Count 到列。
  7. 将 "All Patients "拖到 "行 "中,在底部。
  8. 现在 "行 "框看起来像这样。
  9. 点击保存。
  10. 系统会显示一个对话框,你可以在其中指定数据透视表的名称。
    • 保存数据透视表并给它一个名字。这里,我们保存的是检索数据的基础查询,以及按照你选择的方式显示数据所需的信息。 注意:我们不是在保存数据。
    • 对于文件夹,键入Tutorial
    • 对于透视表名称,键入Patients by Age Group
    • 单击 "确定"。
  11. 创建另一个透视表,如下所示。
    • 对于行,使用Diagnoses
    • 对于列,使用Count和Avg Age
    • 点击保存。
0
0 210
文章 Jingwei Wang · 七月 21, 2022 5m read

一个主题区是一个子立方体,可以选择覆盖项目的名称。你定义一个主题区是为了使用户能够关注较小的数据集,出于安全原因或其他原因。本章讨论了以下主题。

简介

在本教程中,我们创建了两个主题区域,按邮政编码划分患者:

  • Patient Set A: 居住在邮政编码为32006, 32007, or 36711区域的患者
  • Patient Set B: 居住在邮政编码为34577 or 38928区域的患者

创建主题领域

要创建主题区域,请做以下工作。

  1. 在模型中,点击 "新建"。
  2. 选中 "主题区域"。
  3. 对于主题区名称,键入Patient Set A
  4. 对于主题区的类名,输入 Tutorial.SubjectA
  5. 对于基础立方体,点击浏览并选择 Tutorial。
  6. 单击 OK。 
  7. 在一个单独的浏览器标签或窗口中,访问分析器,然后做以下工作。
  8. 展开HomeD。
  9. 把ZIP Code放到过滤器框中。这就在数据透视表的正上方增加了一个过滤框。
  10. 在该过滤框中,点击搜索按钮,然后选择 32006, 32007, 和 36711。
  11. 然后点击'为透视表显示当前查询'按钮(笔记本带一个笔的图标)
  12. 系统会显示一个对话框,显示分析器所使用的MDX查询。
    SELECT  FROM [PPatients] 
    %FILTER %OR({[HOMED].[H1].[ZIP CODE].
0
0 208
文章 Jingwei Wang · 七月 21, 2022 14m read

增加level

到目前为止,我们所创建的每个维度都包含一个具有一个level的层级结构。在这一节中,我们将在HomeD维度的层级结构中添加一个level。

  1. 在Tutorial模型中,为HomeD维度添加一个level,如下所示。
  2. 在类浏览器中,展开HomeCity。
  3. 拖动PostalCode并把它放到HomeD维度的H1层级结构上。这一步是在City 层之后添加新的PostalCode层。
  4. 点击PostalCode,在详细信息栏中,将名称改为ZIP Code。
  5. 编译这个立方体。
  6. Build这个立方体。
  7. 进入分析器。
  8. 展开左边的HomeD维度。将ZIP Code级别显示为行。 注意,有些成员有相同的名字。有时,有多个成员具有相同的名字是正确的。然而,在这种情况下,这是一个错误,因为邮政编码是唯一的。 一个级别只有两种方式可以拥有多个同名的成员。
    • 级别名称是基于一个级别属性,而这个属性是不唯一的。(对于一个例子,请看我们在前一章定义的医生级别)。
    • 该级别有一个父级别。当DeepSee创建一个级别的成员时,它不仅考虑源属性或表达式;它还考虑父成员。

    在现实中,邮政编码和城市之间存在着多对多的关系,所以两者都不是对方的父级。

    当我们添加邮政编码级别时,我们把它放在城市级别之后,这意味着城市是邮政编码的父级。这影响了系统为ZIP Code生成成员的方式。

0
0 255
文章 Jingwei Wang · 七月 21, 2022 10m read

创建Cube

点击主页,Analytics - > 模型。

  1. 点击新建。系统会显示一个对话框。
  2. 在这个对话框中,指定以下内容。 
    • 定义类型。选择 Cube 。
    • 多维体名称 - Tutorial
    • 多维体的类名 - Tutorial.Cube
    • 源类 - 点击浏览按钮,选择BI.Study.Patient,然后点击确定。

系统会创建cube类,你也可以在Studio中查看和修改。

  1. 点击中间区域的粗体顶行(标有Tutorial)。这将选择cube,这样你就可以在右边编辑它的细节。
  2. 在细节栏中,将None键入空替换字符串。点击保存,然后点击确定。系统会更新cube类。
  3. 左边的区域叫做类浏览器。

类浏览器提供了你的基类的类属性(除了关系属性)的有用视图,这使得基于这些属性创建DeepSee元素非常容易。然而,重要的是要知道,尽管这个视图提供了一个访问某些属性的方便方法,你也可以使用源表达式来访问任何数据。这些源表达式是在构建cube时进行评估的,因此不会影响你的运行时性能。

添加levels和度量

  1. 将以下项目从类浏览器(左侧区域)拖放到模型浏览器(中间区域)的度量标题下。这将创建名为Age和TestScore的度量,基于这些名字的类属性。
    • Age
    • TestScore
  2. 对TestScore度量做如下修改。
    • 单击 "度量 "标题下的度量名称。
0
0 241
文章 Jingwei Wang · 七月 21, 2022 7m read

创建一个透视表

  1. 在模型内容窗格中展开DiagD维度。
  2. 将Diagnoses拖放到行中,或者双击诊断。
  3. 将Patient Count(病人计数)拖放到Measure(度量)中,或双击病人数。
  4. 将 Avg Age(平均年龄) 拖至Measure(度量),或双击 "平均年龄"。
  5. 单击保存。 系统显示一个对话框,你可以指定透视表的名称。 保存透视表并给它一个名字。当你这样做时,你是在保存检索数据的基础查询,以及以你选择的方式显示数据所需的信息。你不是在保存数据。
  6. 对于文件夹,键入Test
  7. 对于透视名称,键入Patients by Diagnosis (Patients Cube)
  8. 点击确定。

注意:基表是Patients,这意味着所有的度量都是关于病人的数据总结。

度量和levels

  1. 点击新建。
  2. 把Patient Count和Avg Age拖到度量区。 这个简单的透视表向我们展示了这些度量中每一项的总数值,跨越基类中的所有记录。有1000名病人,他们的平均年龄(在这个例子中)是36.59岁。
  3. 使用SQL 校验
    select count(*) as "count" ,avg(age) as avgage from BI_Study.Patient
  4. 在分析器中,对前面的透视表进行如下修改。
    • 在左边展开GenD,把Gender拖到行区。
0
0 181
文章 Jingwei Wang · 七月 21, 2022 3m read

在InterSystems IRIS数据平台管理门户中,有一些工具用于导入和导出数据。这些工具使用动态SQL,这意味着查询是在运行时准备和执行的。可以导入或导出的行的最大尺寸是3,641,144个字符。

你也可以使用%SQL.Import.Mgr类或LOAD DATA SQL命令导入数据,并使用%SQL.Export.Mgr类导出数据。

从文本文件中导入数据(.csv 和.txt)

你可以从一个文本文件中导入数据到一个合适的InterSystems IRIS类。当你这样做时,系统会在该类的表中创建并保存新的行。该类必须已经存在并且必须被编译。

步骤如下:

  1. 从管理门户中 选择系统资源管理器,然后选择SQL。用页面顶部的切换选项选择一个命名空间;这会显示可用的命名空间的列表。
  2. 在页面顶部,点击向导下拉列表,并选择数据导入。 
  3. 在向导的第一页,首先指定外部文件的位置。对于导入文件所在的位置,点击要使用的服务器的名称。
  4. 然后输入文件的完整路径和文件名,文件可以是.csv 和 .txt格式。
  5. 然后选择你想要导入到schema的名称。
  6. 选择表名。
  7. 然后点击下一步。
  8. 在向导的第二页,选择需要导入数据的列。
  9. 然后点击下一步。
  10. 在向导的第三页,描述外部文件的格式。
  • 在 "您的列所使用的分隔符? "中,点击与导入文件中的分隔符相对应的选项。
0
0 334
文章 Jingwei Wang · 七月 21, 2022 4m read

本章介绍了如何将SQL code从文本文件导入InterSystems SQL。当你导入SQL code时,InterSystems IRIS 数据平台使用动态SQL准备并执行每一行的SQL。如果遇到无法解析的SQL code行,SQL导入会跳过该行code,继续准备和执行后续的code行,直到到达文件的末端。所有的SQL code导入操作都会导入到当前的命名空间。

SQL导入主要用于导入数据定义语言(DDL)命令,如CREATE TABLE,并使用INSERT、UPDATE和DELETE命令来填充表。SQL导入可以准备和执行SELECT查询,但不创建结果集。

SQL导入可以用来导入InterSystems的SQL code。它也可以用于code迁移,从其他供应商(FDBMS、Informix、InterBase、MSSQLServer、MySQL、Oracle、Sybase)导入SQL。来自其他供应商的code被转换为InterSystems的SQL并执行。SQL导入不能将所有的SQL命令导入到InterSystems SQL中。它导入的是那些与InterSystems IRIS实现的SQL标准兼容的命令和条款。不兼容的特征通常会被解析,但会被忽略。

SQL导入可以成功地准备一个SQL查询--在适当的时候创建一个相应的缓存查询--但它不会执行查询。

你通过调用%SYSTEM.SQL.

0
0 209
文章 Jingwei Wang · 七月 21, 2022 5m read

视图为存储查询,提供了物理表的所有灵活性和安全权限。所有的视图都是可更新的或只读的。

注意:不能对只读的数据库中的数据创建视图。不能对存储在通过ODBC或JDBC网关连接的Informix表中的数据创建视图。这是因为InterSystems IRIS查询转换在FROM子句中使用子查询,而Informix不支持FROM子句的子查询。

创建视图

视图名称可以是合格的的或不合格的。一个没有限定的视图名称是一个简单的标识符。MyView。一个合格的视图名称由两个简单的标识符组成,一个schema名称和一个视图名称,用句号隔开, 例如MySchema.MyView。视图名和表名遵循相同的命名规则,并对未限定的名称执行相同的schema名称解析。同一模式中的视图和表不能有相同的名称。

你可以通过几种方式定义视图:

  1. 使用SQL CREATE VIEW命令(在DDL脚本中或通过JDBC或ODBC)。
    CREATE VIEW MySchema.MyView (ViewCol1, ViewCol2, ViewCol3) AS

    SELECT TableCol1, TableCol2, TableCol3

    FROM MyTable
  1. 使用管理门户的创建视图界面。
0
0 312
文章 Jingwei Wang · 七月 14, 2022 13m read

创建表

可以通过以下方式定义表:

  1. 通过DDL定义表
    • 使用任意数据库管理工具执行DDL(使用ODBC,JDBC连接)

    MyApp.Person表可以使用DDL CREATE TABLE语句来定义,指定SQL schema.table名称。成功执行这个SQL语句会生成一个相应的持久化类,包名MyApp,类名Person。当使用DDL命令定义一个表时,你不需要指定USEEXTENTSET或创建一个位图范围索引。InterSystems SQL会自动应用这些设置,并将它们包含在预测的持久化类中。默认情况下,CREATE TABLE在相应的类定义中指定了Final类的关键字,表示它不能有子类。


    CREATE TABLE MyApp.Person (
      Name VARCHAR(50) NOT NULL,
      SSN VARCHAR(15) DEFAULT 'Unknown',
      DateOfBirth DATE,
      Sex VARCHAR(1)
    )

    • 使用Objectscript执行DDL
      • 在ObjectScript中使用 Embedded SQL.
        ClassMethod CreateTable() As %String
        {
         &sql(CREATE TABLE Sample.
0
0 544
文章 Jingwei Wang · 七月 14, 2022 6m read

本文概述了InterSystems SQL的特点,特别是那些没有被SQL标准所涵盖或与InterSystems IRIS 数据平台的统一数据架构有关的特点。假定你已有SQL的知识,本文不是SQL概念或语法的介绍。

在InterSystems SQL中,数据是在表内呈现的。每个表都被定义为包含若干列。一个表可以包含零个或多个数据值的行。以下术语大致上是等同的。








数据 关系型数据库术语 InterSystems SQL术语 InterSystems IRIS术语
database          schema schema package
database table table persistent class
field column column property
record row row  


schema

SQL schema提供了一种将相关表、视图、存储过程和缓存查询分组的方法。模式的使用有助于防止在表一级的命名冲突,因为一个表、视图或存储过程的名称必须只在其schema内是唯一的。一个应用程序可以在多个schema中指定表。

SQL schema对应于IRIS中持久化的类包。

0
0 664
文章 Jingwei Wang · 七月 14, 2022 6m read


InterSystems SQL为存储在IRIS数据库中的数据提供不折不扣的、标准的关系型访问。

InterSystems SQL具有以下优点。

高性能和可扩展性 - InterSystems SQL的性能和可扩展性优于其他关系型数据库产品。

与IRIS对象技术的集成 - InterSystems SQL与IRIS对象技术紧密集成。你可以混合使用关系型和对象型的数据访问,而不牺牲任何一种方法的性能。

低维护 - 与其他关系型数据库不同,IRIS应用程序不需要在部署的应用程序中重建索引和压缩表。

支持标准SQL查询 - InterSystems SQL支持SQL-92标准语法和命令。

你可以将InterSystems SQL用于许多目的,包括。

基于对象和Web应用程序 - 你可以在InterSystems Object和Caché Server Page应用程序中使用SQL查询,以执行强大的数据库操作,如查询和搜索。

在线事务处理 - InterSystems SQL为插入和更新操作以及通常在事务处理应用程序中发现的查询类型提供出色的性能。

BI和数据仓库 - IRIS多维数据库引擎和位图索引技术的结合使其成为数据仓库式应用的绝佳选择。

点对点查询和报告 - 你可以使用InterSystems SQL包含的全功能ODBC和JDBC驱动来连接到流行的报告和查询工具。

0
0 359
文章 Jingwei Wang · 七月 11, 2022 5m read

InterSystems DeepSee的目的是使你能够将BI嵌入到你的应用程序中,这样你的用户就可以对他们的数据提出和回答复杂的问题。你的应用程序可以包括仪表盘,它包含图形部件。这些部件用来显示数据,由透视表和KPIs(关键绩效指标)驱动。对于一个透视表,用户可以显示一个列表,用其显示源值。

透视表、KPIs和列表是查询,在运行时执行。

数据透视表可以对运行时的输入作出反应,如用户的过滤器选择。在内部,它使用一个MDX(MultiDimensional eXpressions)查询,与DeepSee cube进行通信。一个cube由一个事实表和其索引组成。一个事实表由一组事实(行)组成,每个事实对应于一个基本记录。例如,这些事实可以代表病人或部门。DeepSee还生成了一组维度表(level tables)。所有的表都是动态维护的,根据你的配置和实现,DeepSee检测你的事务表的变化,并传播到事实表。当用户在分析器中创建透视表时,DeepSee会自动生成一个MDX查询。

KPI也可以对运行时的用户输入做出反应。在内部,它使用MDX查询(与DeepSee立方体)或SQL查询(与任何表)。在这两种情况下,你都可以手动创建查询,或从其他地方复制它。

列表显示来自用户选择的透视表行的源记录的选定值。在内部,一个列表是一个SQL查询。你可以指定要使用的字段,让DeepSee生成实际的查询。

0
0 582
文章 Jingwei Wang · 七月 4, 2022 11m read

高可用性(HA)指的是使系统或应用程序在很高比例的时间内保持运行,最大限度地减少计划内和计划外的停机时间。

维持系统高可用性的主要机制被称为故障转移。在这种方法下,一个故障的主系统被一个备份系统所取代;也就是说,生产系统故障转移到备份系统上。许多HA配置还提供了灾难恢复(DR)的机制,即在HA机制无法保持系统的可用性时,也能及时恢复系统的可用性。

本文简要讨论了可用于基于InterSystems IRIS的应用程序的HA策略机制,提供了HA解决方案的功能比较,并讨论了使用分布式缓存的故障转移策略。

操作系统级别的集群HA

在操作系统层面上提供的一个常见的HA解决方案是故障转移集群,其中主要的生产系统由一个(通常是相同的)备用系统补充,共享存储和一个跟随活动成员的集群IP地址。在生产系统发生故障的情况下,备用系统承担生产工作量,接管以前在故障主系统上运行的程序和服务。备用机必须能够处理正常的生产工作负载,只要恢复故障主机所需的时间就可以了。也可以选择让备用机成为主机,一旦主机恢复,故障主机将成为备用机。

InterSystems IRIS的设计可以轻松地与所支持的平台的故障转移集群技术相结合(如InterSystems支持的平台中所述)。

0
0 264
文章 Jingwei Wang · 六月 20, 2022 8m read

安装Arbiter

为了将自动故障转移扩展到尽可能广泛的故障情况,InterSystems建议你为每个镜像配置一个仲裁机。

要充当仲裁者,系统必须有一个正在运行的ISCAgent进程。由于ISCAgent是与InterSystems IRIS一起安装的,任何承载一个或多个InterSystems IRIS实例的系统都符合这一要求,可以被配置为仲裁者而无需进一步准备;但是,承载一个或多个故障转移或DR异步镜像成员的系统不应该被配置为该镜像的仲裁者。

没有托管InterSystems IRIS实例的系统可以通过安装Arbiter方式的作为仲裁者。请从InterSystems公司下载适合你的仲裁者系统平台的ISCAgent安装包,然后,安装ISCAgent。

注意:Arbiter的版本要和InterSystems IRIS安装版本保持一致。

在Windows上安装Arbiter

在Windows系统上,只需执行安装文件,例如ISCAgent-2020.1.0.540.0-win_x64.exe。

在Linux上安装Arbiter

[root@arbiterhost home]# gunzip ISCAgent-2020.1.0.540.0-lnxrhx64.tar.gz
[root@arbiterhost home]# tar -xf ISCAgent-2020.1.0.540.
0
1 704
文章 Jingwei Wang · 六月 6, 2022 1m read

双击安装文件

选择同意协议,下一步

实例名称默认IRISHEALTH,不需要修改,直接下一步

安装路径,可修改,但不可使用中文路径

安装类型选择Development,点击下一步

选择Unicode,下一步

选择Normal,下一步

默认选项,不做修改,下一步

输入IRIS管理账户密码

输入CSP服务管理密码,和上一步密码保持一致。

点击安装,等待安装成功

0
0 598
文章 Jingwei Wang · 六月 6, 2022 2m read

Object Script(六)

ObjectScript中的变量是没有类型的,也就是说,它们没有一个指定的数据类型,可以接受任何数据值。

ObjectScript支持以下几种类型的变量:

1. 本地变量 :只有创建它的进程可以访问的变量,当该进程终止时,改变量将自动删除。一个本地变量可以从任何命名空间访问。

示例:

     SET str = "A string"

2. 进程私有的全局变量 : 只有创建它的进程可以访问的变量,并且在进程结束时不再存在。一个进程专用的全局变量可以从任何命名空间访问,因为它与命名空间无关。进程私有的全局变量对于临时存储大数据值特别有用。在许多情况下,它们可以替代Mgr/Temp目录的使用,在进程终止时提供自动清理。

示例:

       SET ^||flintstones(1)="Fred"

       SET ^||flintstones(2)="Wilma"

3. 全局变量 : 一个存储在InterSystems IRIS数据库中的持久性变量。一个全局变量可以从任何进程中访问,并且在创建它的进程终止后仍然存在。全局变量是针对个别命名空间的。

示例:

SET ^myglobal = "This is a global stored in the current namespace"

4.

0
0 195
文章 Jingwei Wang · 六月 6, 2022 1m read

Object Script(五)


  • 在类中定义属性

Property PropName as Classname(PARAM1=value,PARAM2=value) [ Keywords ] ;
Property SSN As %String(PATTERN = "3N1""-""2N1""-""4N") [ Required ];

  • 创建函数示例

Studio创建:

将下段代码填写入建好的类中:

ClassMethod FindPatient(id As %String) As HIS.Patient
{ 
 Set patient= ##class(HIS.Patien).%OpenId(id)       
 Quit patient
}

Terminal 调用:

set p = ##class(HIS.Patient).
0
0 268
公告 Jingwei Wang · 五月 11, 2022

各位开发者们好,:

很高兴跟大家宣布,畅销书作家和技术专家杰弗里·摩尔将在6月22日InterSystems的全球峰会上做专题演讲。以下是他的简历:

杰弗里·摩尔是一名咨询专家,他最近的咨询业务包括Salesforce、微软、Autodesk、F5Networks、Gainsight、谷歌和Splunk。 他一生的工作都集中在颠覆性创新的市场动态上。他的第一本书《跨越鸿沟》是关于创业公司在从早期采用者过渡到主流客户时所面临的挑战,该书已售出超过一百万册。摩尔最近的作品《Zone to Win》探讨了大型企业在拥抱颠覆性创新时所面临的挑战。  摩尔每年发表50至80场演讲,最近他重点关注企业IT投资从记录系统向交互系统的转变。 

我将发布更多关于我们演讲者的信息。今年的全球峰会,演讲阵容很强大。

另外,你现在可以在我们的网站上建立你的会议和时间表。如果你还没有注册,可以点击马上注册. 

0
0 138
文章 Jingwei Wang · 五月 4, 2022 8m read

你是否尝试过InterSystems IRIS IntegratedML学习平台?在这个平台中,你可以在再入院数据集上训练和测试一个模型,并能够预测一个病人何时会再入院,或计算其再入院的概率。

你不需要在你的系统上进行任何安装就可以尝试,你所要做的就是启动一个虚拟实验室环境(Zeppelin),然后玩一玩!

在这篇文章中,我们将利用这个实验室向你简要介绍IntegratedML,向你介绍要处理的问题,如何使用IntegratedML来创建一个再入院预测模型,以及如何分析其性能指标的一些见解。

什么是IntegratedML?

IntegratedML infographic

来源: https://github.com/intersystems-community/integratedml-demo-template

在开始本教程之前,让我们简单谈谈IRIS IntegratedML。这个工具使你能够直接在SQL语句中执行机器学习(ML)任务,抽象出复杂过程的实现,例如,选择哪些列和ML算法是对目标列进行分类或回归的最佳选择。

IntegratedML的另一个伟大功能是易于部署。一旦你的模型被训练并表现良好,你只需要运行SQL语句,以便让你的模型投入生产。

IntegratedML让你选择使用哪个 ML提供者。默认的提供者是 AutoML, 这是InterSystems公司使用Python实现的ML库 scikit-learn

0
0 196
文章 Jingwei Wang · 五月 4, 2022 5m read

InterSystems IRIS IntegratedML功能用于使用AutoML技术获得机器学习的预测结果和概率。AutoML是一种机器学习技术,用于选择更好的机器学习算法/模型基于已有数据(用于训练AutoML模型的数据)来预测状态、数字和结果。你不需要一个数据科学家,因为AutoML会测试最常见的机器学习算法,并根据分析的数据特征选择更好的算法给你。在这篇文章中可以看到更多管乐IntegratedML的信息。

InterSystems IRIS有一个内置的AutoML引擎,但也允许你使用H2O和DataRobot。在这篇文章中,我将向你展示使用InterSystems AutoML引擎的每个步骤。

第1步 - 下载样例应用程序做练习

1. 转到 https://openexchange.intersystems.com/package/Health-Dataset

2. Clone/git 将 Repo拉到任何本地目录中

$ git clone https://github.com/yurimarx/automl-heart.git

3. 在同一个目录中打开一个Docker终端并运行

$ docker-compose build

4.

0
0 136
文章 Jingwei Wang · 三月 24, 2022 3m read

REST是一种架构风格,而不是一种格式。尽管REST经常使用HTTP来传输消息,使用JSON来传递数据,但你也可以用XML或纯文本来传递数据。REST利用了现有的网络标准,如HTTP、URL、XML和JSON。

虽然它可以使用XML来描述数据,但它更常使用JSON,这是一个轻量级的数据封装器。

InterSystems REST服务

InterSystems REST服务由以下组件组成:

规范类(%REST.Spec的一个子类):这个类包含了REST服务的OpenAPI 2.0规范(Swagger)。InterSystems支持几个扩展属性,你可以在规范中使用。

调度类(%CSP.REST的一个子类):这个类负责接收HTTP请求并在实现类中调用合适的方法。

实现类(%REST.Impl的子类):这个类定义了实现REST调用的方法。

Web应用程序:它通过InterSystems Web Gateway提供对REST服务的访问。

使用API 管理工具创建REST服务 - 基于 OpenAPI 2.0规范

/api/mgmnt/

可以使用/api/mgmnt服务来创建、更新和删除REST服务。

  1. 使用/api/mgmnt创建 .disp .impl 和 .
0
0 180
文章 Jingwei Wang · 二月 17, 2022 1m read

windows 前台调试

  1. 在Production配置中,勾选 ‘开发与调试’ 中的 ‘测试开启’ 。 
  2. 选中需要调试的组件(业务服务,业务流程,业务操作),在'设置'中勾选 ‘开发与调试’ 中的 ‘在前台运行’ 。 
  3. 继续选中需要调试的组件,在'操作'中点击 ‘测试’ 。 
  4. 选择相应的请求类型,点击‘调用测试服务’。
  5. 前台窗口会被弹出。

Container 前台调试

可以在运行容器时直接发布63300端口,主机的telnet客户端将能够连接到前台端口。

如果你愿意,你可以改变这个端口号,直接设置到全局的

Set tPortRangeStart=$G(^Ens.Config("FGTelnetRange","start"),63300)
Set tPortRangeEnd=$G(^Ens.Config("FGTelnetRange","end"),63499)

Linux 前台调试

Do $system.Process.Terminate(<BO JOB>)
Do ##class(Ens.Job).Start("BO CONFIGNAME", 1)
0
1 222
文章 Jingwei Wang · 二月 15, 2022 3m read

1. 使用PyODBC访问InterSystems IRIS数据库

pyodbc是一个开源的Python模块,可以利用ODBC来访问底层数据库。InterSystems支持使用pyodbc作为使用关系模式从Python访问数据库的一种方式。这个模块也可以用于InterSystems IRIS的早期版本。

代码示例

import pyodbc
 
def run():
   # connection information
   ip = localhost
   port = 51773 # IRIS超级服务端口号
   namespace = USER
   username = <userName>
   password = <password>
   driver = "{InterSystems IRIS ODBC35}" # ODBC data source名称, IRIS 安装时一般自带ODBC驱动,所以不需要独立安装
​
   # Create connection to InterSystems IRIS
   connection_string = 'DRIVER={};SERVER={};PORT={};DATABASE={};UID={};PWD={}' \
      .
0
0 469
文章 Jingwei Wang · 二月 14, 2022 7m read

1. 互操作性-嵌入式Python(interoperability-embedded-python)

这个概念旨在展示iris互操作性框架如何与嵌入的python一起使用。

1.2. 示例代码

import grongier.pex
import iris
import MyResponse

class MyBusinessOperation(grongier.pex.BusinessOperation):

    def OnInit(self):
        print("[Python] .MyBusinessOperation:OnInit() is called")
        self.LOGINFO("Operation OnInit")
        return

    def OnTeardown(self):
        print("[Python] .MyBusinessOperation:OnTeardown() is called")
        return

    def OnMessage(self, messageInput):
        if hasattr(messageInput,"_IsA"):
            if messageInput.
0
0 234
文章 Jingwei Wang · 十二月 30, 2021 7m read

可以使用内嵌REST API用描述文件生成REST服务

请求消息如下:

POST: http://[YourServer]/api/mgmnt/v2/INTEROP/cmAPI

Body: API 描述文件,例如下面的Json文件
Basic Authorization Username: 用户名

Basic Authorization Password: 密码

Content-Type Header: application/json

** 注意**:调用接口前,需要创建相应命名空间,本示例为INTEROP

API 描述文件:


    {
     "swagger": "2.0",
     "info": {
       "description": "An API for coffee sales using InterSystems IRIS",
       "version": "1.0.0",
       "title": "Coffee Maker API",
       "license": {
         "name": "Apache 2.0",
         "url": "http://www.apache.org/licenses/LICENSE-2.0.
    0
    0 299