文章
姚 鑫 · 四月 20 阅读大约需 2 分钟
第118章 SQL函数 REVERSE

第118章 SQL函数 REVERSE

标量字符串函数,它以相反的字符顺序返回一个字符串。

大纲

REVERSE(string-expression)

参数

  • string-expression - 要反转的字符串表达式。表达式可以是列名、字符串文字、数字或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(例如 CHARVARCHAR)。

描述

REVERSE 返回字符顺序颠倒的字符串表达式。例如 'Hello World!' 返回为 '!dlroW olleH'。这是一个简单的字符串顺序反转,没有额外的处理。

返回的字符串是数据类型 VARCHAR,与输入值的数据类型无关。数字转换为规范形式,数字字符串在反转之前不会转换为规范形式。

前导和尾随空白不受反转的影响。

反转 NULL 值会导致 NULL

0 0
0 6
文章
Michael Lei · 四月 20 阅读大约需 1 分钟
老外做的Cache SQL 存储映射

附件中的压缩文件包含了一些我多年来所做的Cache SQL Storage映射的例子。

如果你有现有的globals,并且想通过Objects或SQL暴露它们,你需要设置Cache SQL Storage映射。  如果你没有看到对你的情况有帮助的例子,请给我发一个例子,我可以帮你解决。

下载附件:https://community.intersystems.com/sites/default/files/post-associated-d...

 

0 0
0 10
文章
Hao Ma · 四月 19 阅读大约需 26 分钟
Linux系统IRIS安装总结

本文档只是给您一个大致的概念,方便您了解IRIS安装的方方面面。并非官方安装手册或者安装建议。生产环境的安装请仔细研究并参照IRIS官方的安装文档

操作系统的选择

IRIS支持多种Linux系统。详细的列表请参见各个版本的支持列表,比如这个是最新的2021IRIS的支持列表。需要注意的是, CentOS只支持作为测试系统, 并不支持生产系统的安装。

官方文档是以Redhat为主介绍的IRIS安装, 这是IRIS在生产环境中最常用的Linux系统之一。另一个Ubantu, InterSystems提供的docker版本是安装在Ubantu上的。

0 0
0 41
文章
姚 鑫 · 四月 19 阅读大约需 1 分钟
第117章 SQL函数 REPLICATE

第117章 SQL函数 REPLICATE

将字符串重复指定次数的字符串函数。

大纲

REPLICATE(expression,repeat-count)

参数

  • expression - 要重复的字符串表达式。
  • repeat-count - 重复的次数,以整数表示。

描述

注意:REPLICATE 函数是 REPEAT 函数的别名。提供 REPLICATE 是为了与 TSQL 兼容。有关详细信息,请参阅重复。

0 0
0 6
文章
Michael Lei · 四月 19 阅读大约需 13 分钟
用Caché ObjectScript 生成EXCEL

有很多方法可以使用Intersystems生成excel文件,其中一些是ZEN报告、IRIS报告(Logi报告或正式称为JReports),或者我们可以使用第三方Java库,可能性几乎是无限的。

但是,如果你想只用Caché ObjectScript创建一个简单的电子表格呢?(没有第三方应用程序)

在我的案例中,我需要生成包含大量原始数据的报告(财务人员喜欢这些数据),但是我的ZEN/IRIS失败了,给了我一个我想称之为 "零字节的文件",基本上说java的内存用完了,并导致报告服务器上的重载。

这可以用Office Open XML(OOXML)来完成。Office Open XML格式是由一个ZIP包内的一些XML文件组成的。因此,基本上我们需要生成这些XML文件,并将其压缩重命名为.xslx。就这么简单。

这些文件遵循一套简单的惯例,称为开放包装惯例。你需要声明各部分的内容类型,以及告诉消费应用程序应该从哪里开始。

为了创建一个简单的电子表格,我们至少需要5个文件。

0 0
0 39
文章
姚 鑫 · 四月 18 阅读大约需 3 分钟
第116章 SQL函数 REPLACE

第116章 SQL函数 REPLACE

字符串函数,用于替换字符串中的子字符串。

大纲

REPLACE(string,oldsubstring,newsubstring)

参数

  • string - 作为子字符串搜索目标的字符串表达式。
  • oldsubstring - 字符串中要匹配的子字符串。
  • newsubstring - 用于替换 oldsubstring 的子字符串。

描述

REPLACE 在字符串中搜索子字符串并替换所有匹配项。匹配区分大小写。如果找到匹配项,它将用 newsubstring 替换 oldsubstring 的每个实例。替换子串可能比它替换的子串长或短。如果找不到子字符串,则 REPLACE 将原样返回原字符串。

0 0
0 10
文章
姚 鑫 · 四月 17 阅读大约需 1 分钟
第115章 SQL函数 REPEAT

第115章 SQL函数 REPEAT

将字符串重复指定次数的字符串函数。

大纲

REPEAT(expression,repeat-count)

{fn REPEAT(expression,repeat-count)}

参数

  • expression - 要重复的字符串表达式。
  • repeat-count - 重复的次数,以整数表示。

描述

REPEAT 返回一串重复计数的表达式实例,连接在一起。

如果表达式为 NULL,则 REPEAT 返回 NULL。如果 expression 是空字符串,则 REPEAT 返回一个空字符串。

0 0
0 3
文章
Michael Lei · 四月 17 阅读大约需 3 分钟
翻译博客文章--浏览医疗保健的未来

在最近一次探索马里兰小镇的 "度假 "期间,我偶然发现了一家非常令人愉快的书店,在那里我愉快地消磨了一下午。我和我的家人都是读者,喜欢各种类型的书--新的、二手的、印刷的、电子的。我们尽量在当地购物,以帮助零售店保持运营。

这次访问促使我思考图书行业所发生的事情与我们的医疗保健系统所发生的事情之间的一些相似之处。

医疗保健行业与图书行业的趋势


数字化


我们阅读内容的格式已经发生了根本性的变化。在2020年,电子书几乎占美国市场的四分之一。音频书占美国图书收入的10亿美元。许多印刷书籍是按需出版的,而不是保存在库存中。同样,医疗保健早已不再是一个“伸出舌头说啊 ”的行业,基因组测试、由人工智能算法读取的X射线、可植入设备和远程医疗访问已经改变了医疗的面貌。

虚拟服务

0 0
0 10
文章
Michael Lei · 四月 17 阅读大约需 3 分钟
在IRIS容器里添加VSCode

在IRIS容器里添加VSCode

设置可重复的开发环境的最简单的方法之一是使用容器。我发现在快速迭代时,在我的开发环境容器里托管一个vscode实例是非常方便的。因此,我创建了一个快速的容器脚本,将一个基于浏览器的vscode添加到IRIS容器中。这应该适用于大多数2021.1以上的容器。我的代码库可以在这里找到

带VSCode 且预连接好的InterSystems IRIS 容器

0 0
0 7
文章
姚 鑫 · 四月 16 阅读大约需 2 分钟
第114章 SQL函数 RADIANS

第114章 SQL函数 RADIANS

将度数转换为弧度的数值函数。

大纲

RADIANS(numeric-expression)

{fn RADIANS(numeric-expression)}

参数

  • numeric-expression - 以度为单位的角度度量。解析为数值的表达式。

RADIANS 返回 NUMERICDOUBLE 数据类型。如果 numeric-expression 是数据类型 DOUBLERADIANS 返回 DOUBLE;否则,它返回 NUMERIC

RADIANS 可以指定为标准标量函数或带有大括号语法的 ODBC 标量函数。

0 0
0 6
问题
姚 鑫 · 四月 15
第113章 SQL函数 QUARTER

第113章 SQL函数 QUARTER

日期函数,它将一年中的季度作为日期表达式的整数返回。

大纲

{fn QUARTER(date-expression)}

参数

  • date-expression - 表达式,它是列的名称、另一个标量函数的结果,或者是日期或时间戳文字。

描述

QUARTER 返回一个从 14 的整数。季度是针对 日期整数、$HOROLOG 或 $ZTIMESTAMP 值、ODBC 格式日期字符串或时间戳计算的。

日期表达式时间戳可以是数据类型 %Library.PosixTime(编码的 64 位有符号整数),也可以是数据类型 %Library.TimeStamp (yyyy-mm-dd hh:mm:ss.fff)。

四个季度的时间段如下:

0 0
0 6
文章
姚 鑫 · 四月 13 阅读大约需 1 分钟
第111章 SQL函数 PREDICT

第111章 SQL函数 PREDICT

IntegratedML 函数,它应用指定的训练模型来预测提供的每个输入行的结果。

大纲

PREDICT(model-name )

PREDICT(model-name USE trained-model-name )

PREDICT(model-name WITH feature-columns-clause )

PREDICT(model-name USE trained-model-name WITH feature-columns-clause )

描述

PREDICT 是一个 IntegratedML 函数,可用作 SELECT 选择项以返回将经过训练的机器学习模型应用于指定查询的结果。

0 0
0 7

image

这篇文章是对我的  iris-globals-graphDB 应用的介绍。
在这篇文章中,我将演示如何在Python Flask Web 框架和PYVIS交互式网络可视化库的帮助下,将图形数据保存和抽取到InterSystems Globals中。

建议

 

第一步 : 通过使用Python 原生SDK建立与IRIS Globals的链接

 #create and establish connection
  if not self.iris_connection:
         self.iris_connection = irisnative.createConnection("localhost", 1972, "USER", "superuser", "SYS")
                                     
  # Create an iris object
  self.iris_native = irisnative.createIris(self.iris_connection)
  return self.iris_native

 

第二步 : 使用 iris_native.set( ) 功能把数据保存到Globals 里     

#import nodes data from csv file
isdefined = self.iris_native.isDefined("^g1nodes")
if isdefined == 0:
    with open("/opt/irisapp/misc/g1nodes.csv", newline='') as csvfile:

 reader = csv.DictReader(csvfile)
 for row in reader:
    self.iris_native.set(row["name"], "^g1nodes", row["id"])

 #import edges data from csv file
 isdefined = self.iris_native.isDefined("^g1edges")
 if isdefined == 0:
    with open("/opt/irisapp/misc/g1edges.csv", newline='') as csvfile:
 reader = csv.DictReader(csvfile)
 counter = 0                
 for row in reader:
    counter = counter + 1
    #Save data to globals
    self.iris_native.set(row["source"]+'-'+row["target"], "^g1edges", counter)  

 

第三步: 使用iris_native.get() 功能把节点和边缘数据从Globals传递给PYVIS

 #Get nodes data for basic graph    
  def get_g1nodes(self):
        iris = self.get_iris_native()
        leverl1_subscript_iter = iris.iterator("^g1nodes")
        result = []
        # Iterate over all nodes forwards
        for level1_subscript, level1_value in leverl1_subscript_iter:
            #Get data from globals
            val = iris.get("^g1nodes",level1_subscript)
            element = {"id": level1_subscript, "label": val, "shape":"circle"}
            result.append(element)            
        return result

    #Get edges data for basic graph  
    def get_g1edges(self):
        iris = self.get_iris_native()
        leverl1_subscript_iter = iris.iterator("^g1edges")
        result = []
        # Iterate over all nodes forwards
        for level1_subscript, level1_value in leverl1_subscript_iter:
            #Get data from globals
            val = iris.get("^g1edges",level1_subscript)
            element = {"from": int(val.rpartition('-')[0]), "to": int(val.rpartition('-')[2])}
            result.append(element)            
        return result

 

Step4: Use PYVIS Javascript to generate graph data

<script type="text/javascript">
    // initialize global variables.
    var edges;
    var nodes;
    var network;
    var container;
    var options, data;
  
    // This method is responsible for drawing the graph, returns the drawn network
    function drawGraph() {
        var container = document.getElementById('mynetwork');
        let node = JSON.parse('{{ nodes | tojson }}');
        let edge = JSON.parse('{{ edges | tojson }}');
     
        // parsing and collecting nodes and edges from the python
        nodes = new vis.DataSet(node);
        edges = new vis.DataSet(edge);

        // adding nodes and edges to the graph
        data = {nodes: nodes, edges: edges};

        var options = {
            "configure": {
                "enabled": true,
                "filter": [
                "physics","nodes"
            ]
            },
            "nodes": {
                "color": {
                  "border": "rgba(233,180,56,1)",
                  "background": "rgba(252,175,41,1)",
                  "highlight": {
                    "border": "rgba(38,137,233,1)",
                    "background": "rgba(40,138,255,1)"
                  },
                  "hover": {
                    "border": "rgba(42,127,233,1)",
                    "background": "rgba(42,126,255,1)"
                 }
                },

                "font": {
                  "color": "rgba(255,255,255,1)"
                }
              },
            "edges": {
                "color": {
                    "inherit": true
                },
                "smooth": {
                    "enabled": false,
                    "type": "continuous"
                }
            },
            "interaction": {
                "dragNodes": true,
                "hideEdgesOnDrag": false,
                "hideNodesOnDrag": false,
                "navigationButtons": true,
                "hover": true
            },

            "physics": {
                "barnesHut": {
                    "avoidOverlap": 0,
                    "centralGravity": 0.3,
                    "damping": 0.09,
                    "gravitationalConstant": -80000,
                    "springConstant": 0.001,
                    "springLength": 250
                },

                "enabled": true,
                "stabilization": {
                    "enabled": true,
                    "fit": true,
                    "iterations": 1000,
                    "onlyDynamicEdges": false,
                    "updateInterval": 50
                }
            }
        }
        // if this network requires displaying the configure window,
        // put it in its div
        options.configure["container"] = document.getElementById("config");
        network = new vis.Network(container, data, options);
        return network;
    }
    drawGraph();
</script>

 

第五步: 从app.py 主文件调用上面的代码

#Mian route. (index)
@app.route("/")
def index():
    #Establish connection and import data to globals
    irisglobal = IRISGLOBAL()
    irisglobal.import_g1_nodes_edges()
    irisglobal.import_g2_nodes_edges()

    #getting nodes data from globals
    nodes = irisglobal.get_g1nodes()
    #getting edges data from globals
    edges = irisglobal.get_g1edges()

    #To display graph with configuration
    pyvis = True
    return render_template('index.html', nodes = nodes,edges=edges,pyvis=pyvis)    

下面是关于此项目的 介绍视频:

0 0
0 65
文章
姚 鑫 · 四月 12 阅读大约需 2 分钟
第110章 SQL函数 POWER

第110章 SQL函数 POWER

一个数值函数,它返回给定表达式的指定幂的值。

大纲

POWER(numeric-expression,power)

{fn POWER(numeric-expression,power)}

参数

  • numeric-expression - 基数。可以是正整数或负整数或小数。
  • power - 指数,它是数值表达式的幂。可以是正整数或负整数或小数。

POWER 返回 NUMERICDOUBLE 数据类型。如果 numeric-expression 是数据类型 DOUBLE,则 POWER 返回 DOUBLE;否则,它返回 NUMERIC

0 0
0 6
文章
姚 鑫 · 四月 11 阅读大约需 2 分钟
第109章 SQL函数 POSITION

第109章 SQL函数 POSITION

返回子字符串在字符串中的位置的字符串函数。

大纲

POSITION(substring IN string)

参数

  • substring - 要搜索的子字符串。
    它可以是列的名称、字符串字面值或另一个标量函数的结果,其中基础数据类型可以表示为任何字符类型(如CHARVARCHAR2)。
  • IN string - 要在其中搜索子字符串的字符串表达式。

POSITION返回INTEGER数据类型。

0 0
0 12
文章
Qiao Peng · 四月 11 阅读大约需 8 分钟
InterSystems 数据平台与三级等保 - 第一篇

      数据平台不仅要安全,还要合规,三级等保是我们要符合的主要安全规范。InterSystems的数据平台和集成平台产品都和三级等保有关。如果没有正确配置它们的安全选项,就会影响到整个系统的安全,影响到合规性。

在生产环境上,如何配置安全的InterSystems的数据平台,并达到三级等保的要求?

这个系列文章,针对InterSystems 数据平台的安全架构,围绕对三级等保的合规性展开,介绍如何配置出一个安全、合规的数据平台。

1 0
1 116

系统实用类:SYS.Database中的查询FreeSpace可以用来在任何时候检查磁盘上的自由空间。

下面是在IRIS终端中的尝试方法(进入%SYS命名空间,然后运行它)。

zn "%SYS"
set stmt=##class(%SQL.Statement).%New()
set st=stmt.%PrepareClassQuery("SYS.Database","FreeSpace")
set rset=stmt.%Execute()
// 一次性显示所有
do rset.%Display()

输出结果示例如下。

*在命令执行的例子中,所有的数据库都放在同一个磁盘上,所以所有的磁盘空闲空间(DiskFreeSpace)返回相同的值。

0 0
0 10
文章
姚 鑫 · 四月 10 阅读大约需 2 分钟
第108章 SQL函数 %PLUS

[toc]

第108章 SQL函数 %PLUS

将数字转换为规范排序格式的排序函数。

大纲

%PLUS(expression)

%PLUS expression

参数

  • expression - 表达式,它可以是列的名称、数字或字符串字面值、算术表达式或另一个函数的结果,其中基础数据类型可以表示为任何字符类型。

描述

%PLUS将数字或数字字符串转换为规范形式,然后以数字排序顺序返回这些表达式值。

数字可以包含前导和后导零、多个前导加减号、单个小数点指示符(.)和E指数指示符。
在标准形式中,将执行所有算术运算,展开指数,将符号解析为一个前导减号或无符号,并剥离前导和后导零。

0 0
0 7