質問 Yuji Ohata · 12月 4, 2024

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

私自身SQLがあまり得意ではなく、
業務で書いてみたもののパフォーマンスがよくなく、
不要なループが含まれていた、無駄な検索条件が含まれている…なんてことが多々あります。

IRISの管理コンソールなどにはいろんな機能があると思うのですが、
パフォーマンス改善をするために利用できるツールなどはあったりしますでしょうか?

何かご存知の方がいらっしゃいましたら、情報共有頂けますと幸いです。

0
0 0
質問 Yuji Ohata · 11月 22, 2024

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

IRISに直接Insert文を発行する時と、JDBCを経由してInsert文を発行する時とで、
挙動差異があるように見受けれれまいたので、何かご存知な方がいらっしゃれば教えてください。

次の様なテーブルがあります。

それに対してDBeaverとIRIS管理ポータルからInsertを実行します。

★DBeaver

★IRIS管理ポータル

この後実際に作成されたグローバルの情報を確認すると、
『VARCHAR型』で作成したカラムに数値をInsertした際に、
実データの型が異なっていることがわかります。

DBeaver(JDBC) ➡ 文字列で登録
IRIS直     ➡ 数値で登録

個人的には『VARCHAR型』に数値が入ること自体がおかしいので、
DBeaverの方がまし(ホントは型違反とかになってほしい)と思うのですが、
この差異が何で発生するのか、また回避する方法をご存じな方がいらっしゃれば情報共有頂きたいです。

また、そもそもIRISはRDBを使っても型チェックが曖昧になるものなのかも気になっています。
さすがに数値のカラムに文字列を入れようとすると怒られるのですが、
上記の様な場合にチェックの仕組みが働かないのには違和感がありました。

0
0 0
質問 Yuji Ohata · 10月 16, 2023

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

同じ現象に陥っていた方がいれば助言頂きたいのですが、
VsCodeでIRISにリモートで接続した際、SourceControlでUserNameが取得できていないようです。

{
    "objectscript.conn": {
        "host": "xxxx.xxxx.xxxx.xxxx",
        "port": 52773,
        "ns": "RKNK",
        "username": "xxxx",
        "password": "xxxx",
        "active": true
    },
    "editor.formatOnType": true
}

→SourceControlクラスで..Usernameを取得しようとしても値が入っていない。

同じような現象になった方はいらっしゃらないでしょうか?
何か情報をお持ちの方がいらっしゃれば、フォローいただけますと幸いです。

4
0 197
記事 Yuji Ohata · 9月 8, 2023 6m read

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

技術文書ライティングコンテストという事で、私からはAWS環境を用いたCI/CDの仕組みについてご紹介します。

CI/CDとは「Continuous Integration(継続的インテグレーション)/ Continuous Delivery(継続的デリバリー)」の略称で、
詳細はネットをググると色々出てくると思いますが、私としてはリポジトリに格納されたものを自動で品質保証して、
問題なければ自動でデプロイしてくれる一連の仕組み
だと理解しています。

という事で、その第一歩はIRISのソースコードをgitで管理することです。
pythonで作成したテストプログラムを用意しました。

0
0 464
質問 Yuji Ohata · 6月 1, 2023

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

IRISにSQLを投げるときの動作について教えてください。

■適当なテーブルを作成
CREATE TABLE Mst.Test (id int, name varchar(10))

■データをINSERT
INSERT INTO Mst.Test VALUES (2, 'bbb ')
※文字列の末尾にスペースを追加。

■SELECT
SELECT * FROM Mst.Test WHERE name = 'bbb'
※whereの条件には末尾のスペースを入れない。

⇒上記の結果、INSERTされたデータがヒットしている。

[疑問点]
SQLの実行において、=を使って完全一致検索をしているつもりなのですが、
末尾のスペースはその条件を無視してヒットしてしまうものなのでしょうか?

何か情報をお持ちの方がいらっしゃれば、フォローいただけますと幸いです。

3
0 228
質問 Yuji Ohata · 4月 13, 2023

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

現在、Embedded Pythonを用いて開発を行おうとしているのですが、
別のNMSPに存在するグローバルをiris.gref()で参照する方法がわかりませんでした。

> iris.gref("^[NMSP]GBL")   <-----こうしても自身のNMSPのグローバルを参照してしまう。

諦めてznでネームスペースを切り替えてみようかな、とも思ったのですが、
python上でznをかける方法もよくわからず、対応方法に悩んでいます。

どなたか、上記の対応方法についてご存じな方はいらっしゃいませんでしょうか?

5
1 203
質問 Yuji Ohata · 3月 24, 2023

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

私たちのシステムでは一部グローバルを利用しているものがあるのですが、
それをテーブル定義したものと同様にDbeaver等で参照できるようにしたいと考えております。

もともと定義していたグローバル(キーを二つ持つもの)に対して、対応するPersistentのクラスを作成し、
DataLocationをそのグローバルにすることで、Dbeaverからそのクラスの存在は見えるようになったのですが、
valueの値を参照することできず、困っています。
どなたか情報をお持ちでしたらご教示いただけないでしょうか…。

■グローバル
>zw ^Test
^Test(1,2)="A"
^Test(1,3)="B"
^Test(2,1)="C"
^Test(2,2)="D"
■永続クラス

Class Gbl.Test Extends %Persistent [ SqlRowIdPrivate ]
{
Index RowIdBase On (key1, key2) [ IdKey, Unique ];
Property key1 As %Integer [ Required, SqlColumnNumber = 2 ];
Property key2 As %String [ Required, SqlColumnNumber = 3 ];

2
0 295
質問 Yuji Ohata · 12月 28, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

どなたかインスタンスの起動を%ZSTART等のMACではなく、
クラスのコールバック等で検知する方法をご存知ではないでしょうか?

背景としましては以下の通りです。

===================================================================

現在、Interoperabilityを利用する機能を開発しております。
Ens.Productionを継承したクラスの中でOnStart()をoverrideしており、
その中で上記のクラス自身をリコンパイルする処理が含まれております。

OnStart()でリコンパイルが行われる際、プロダクションの定義が変更されていると
そのプロセスでのプロダクションの起動が失敗してしまいます。
(プロダクション上の定義と、実際のクラスの状態に不一致が発生するため。)

そのため、クラス自身のリコンパイルをプロダクションの開始時ではなく、
インスタンスの開始時にしたいのですが、%ZSTART等のMACファイルは今回利用したくありません。

なんとかそのイベントをクラスで拾いたいのですが、ご存じな方は情報を頂けますと幸いです。

6
0 190
質問 Yuji Ohata · 12月 14, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

この度、新たにUbuntu環境にIRISを入れてEmbedded Pythonを用いて開発をすることとなりました。
初期設定として、Ubuntuへのpythonのインストールが必要だと考えているのですが、
その時のバージョンの指定等はあるのでしょうか?

公式サイトを漁ってもうまく見つけられず、ご存知の方がいらっしゃれば教えてください。
同様の開発をされている方で、躓きポイントなど(Ubuntuだとスタジオ使えないからVSCode必須だよ)が
あれば、合わせて助言頂けますと幸いですcheeky

2
0 346
質問 Yuji Ohata · 10月 24, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

SQLの実行結果について、意図せぬ結果になるものが二点ありますので、
利用方法等に誤りがないかを確認させてください。


CREATE TABLE Tmp.AAA AS SELECT * FROM Mst.AAA WHERE column = ?
⇒管理ポータルで実行しても、?パラメータを置換するダイアログが表示されず、
 オンコードで%Execute()しても実行エラーになる。

★この構文では?パラメータは利用できないのでしょうか?


SELECT * FROM Mst.AAA WHERE column IS NULL
⇒IS NULLではヒットせず、= NULLだとヒットする。
 
 

 ★IRISとして、IS NULLと= NULLに動作差異があるのは何故でしょうか?

すいませんが、情報をお持ちの方がいらっしゃればご教示いただけますと幸いです。

8
1 333
質問 Yuji Ohata · 9月 13, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

現在開発している処理の中で、大量データをSELECT & INSERTする処理があり、合計で91分かかっています。
この処理で用いるSQLは実行結果を再利用したい等の意図があったため、ScrollableResultSetを用いていましたが、
このAPI自体がSQL実行時に全件ループを回したり、そもそも古いAPIとの事であったため、
%SQL.Statementに書き換えたところ、62分まで短縮することが出来ました。

ここからが問題なのですが、更なる処理時間の軽減のために時間がかかる処理を調査していたところ、
カラム情報を取得する%Get()メソッドにコストがかかっていることがわかりました。
なので現在はこれを改善したいと思っております。

こちらで動作を見たところ、最速は下記でいう所の「rset.name」でこちらを利用すると、41分まで削減されます。

https://docs.intersystems.com/iris20211/csp/docbookj/DocBook.UI.Page.cl…

しかし、我々としましてはAPIを汎用的に用いたいため、nameの部分を動的に扱えるような%Get()の様な仕組みが欲しいです。

4
0 254
質問 Yuji Ohata · 6月 13, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

現在テーブルを用いてシステムの設計を行っておりますが、
トランザクション中に、そのトランザクションの影響を受けずにテーブルを
更新するような仕組みが欲しいと考えております。
(トランザクションがRollbackされても、そのテーブルの更新だけは確定させたい。)

例えば$INCREMENT()はトランザクション中であっても、その制約を無視して値を更新できます。
そのような回避策がないかをご教示いただきたいです。

用途としては、連番を生成するAPIを作成していて、その値をテーブルで管理しています。
このAPIは複数プロセスから呼ばれることがありますが、
1トランザクション中の連続Updateにより、行ロックからテーブルロックへの昇格が行われる
(1000行以上行ロックをしたときのIRISの仕様)ことで、
他プロセスがAPIを利用できなくなるなどの影響が出ています。
今回のAPIに関しては、番号重複さえ起きなければよいので、そのような影響は受けたくありません。

極力グローバルは用いない設計としたいので、テーブルで対応したいです。
すいませんが、何か情報をお持ちの方はご回答いただけますと幸いです。

4
0 453
質問 Yuji Ohata · 5月 26, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

EmbededPythonに興味があり、利用を検討しているのですが、
スタンドアロン下におけるライブラリの使用方法について疑問があります。

https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=AFL_epython#AFL_epython_pylibrary
こちらを確認しましたところ、ライブラリは以下のコマンドで取得するという理解です。

> irispip install --target C:\InterSystems\IRIS\mgr\python ライブラリ名

pipコマンドではネットワーク上から、名称に一致したライブラリをダウンロード/インストールしてくれる
機能と認識しておりますが、利用したいPCがインターネットに接続されていなかった場合、
単純にこのコマンドを実行してもエラーになるだけと考えております。

このようなスタンドアロン下でのライブラリ取得について、何か知見がありましたらご教示いただけませんでしょうか?

2
1 536
質問 Yuji Ohata · 3月 6, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

現在複数のJob実行の仕組みをInteroperabilityの機能を使って実現しておりますが、
特定のビジネスサービスは、xx:xx~yy:yyの間実行させたくない、
という仕組みを実現させる必要が出てきました。

https://docs.intersystems.com/iris20201/csp/docbookj/DocBook.UI.Page.cl…

ここに「スケジュール指定の定義」というものがあり、まさにこれが利用できるのかと思ったのですが、
文献を見る限りだと、プロダクションそのものを停止するような仕組みに見えており、
また実際に定義を作ってみたのですが、それをどうやってプロダクションへ反映させるかもわかりませんでした。

どなたか、類似の仕組みを作成された方がいらっしゃったら、アイデアをいただけませんでしょうか。
最悪、ビジネスサービスのロジック内にスケジュールを見て、
処理を中断するロジックを入れるしかないと考えております。

2
0 278
質問 Yuji Ohata · 2月 17, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

現在、共通のIRIS環境を複数個所に用意するため、
インストール・マニフェストを利用した環境構築の仕組みを作成しております。
https://docs.intersystems.com/iris20211/csp/docbookj/DocBook.UI.Page.cl…

Interoperabilityを有効にしたNMSPについて、
管理ポータル上から作成すると、資格情報を保持する用のSECONDARYのローカルデータベースが
自動で作成されるように認識しております。
https://docs.intersystems.com/iris20211/csp/docbookj/DocBook.UI.Page.cl…

しかし、マニフェスト経由で作成した場合にはそれが作成されていません


■作成しているマニフェスト

2
0 191
質問 Yuji Ohata · 1月 26, 2022

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

TIMESTAMP型のデータを持つテーブルの扱いについて教えてください。

現在Ens_Util.Logを参照するシステムを開発しようとしております。
このテーブルの中にTimeLoggedというTIMESTAMP型のデータがあるのですが、
それをSELECTした際、CASTの有無で表示されるデータに差異が出ます。

SELECT
    DATE(TimeLogged),
    CAST(TimeLogged AS TIME),
    TimeLogged
FROM
    Ens_Util.Log

Expression_1|Expression_2|TimeLogged         |
------------+------------+-------------------+
  2022-01-25|    15:00:01|2022-01-26 00:00:01|
  2022-01-25|    15:00:01|2022-01-26 00:00:01|
  2022-01-25|    15:00:01|2022-01-26 00:00:01|

確認する限り9時間の差があるため、UTC時刻との時差が出ているものと考えていますが、ここで何点か疑問があります。

8
0 308
質問 Yuji Ohata · 12月 6, 2021

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

私はIRISでSQLアクセスを行うプログラムをを作成しており、
テーブルアクセスには%ScrollableResultSetクラスのAPIを用いて処理を実現しています。
作成するSQLはインジェクション対策のため、?パラメータを用いておりますが、
この度、大量のパラメータ(600項目)を用いるSQLを作成する必要が出てきました。

https://irisdocs.intersystems.com/iris20191/csp/docbookj/DocBook.UI.Pag…
こちらによりますと、可変長引数を用いても引数の上限値は255個となっており、
実際に600個のパラメータを引数に与えてSQLアクセスしようとすると、<STACK>エラーが発生する状況です。

    Set query = "SQL文"
    Set result = ##class(%ScrollableResultSet).%New("%DynamicQuery:SQL")
    Do result.Prepare(query)
    Do result.Execute(parameterValue...) #; ここに600個のパラメータをセット
2
0 412
質問 Yuji Ohata · 8月 17, 2021

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

スタジオ以外でSourceControlを利用されている方がいれば教えてください。

現在SourceControlを用いて、コンパイル前に
自動コードレビュー(静的解析)を行うような仕組みを構築しております。
実際にスタジオやVSCodeでの保存時には、上記の仕組みが動作しソースチェックが行われるのですが、
clsの一括取り込みを行おうと『$SYSTEM.OBJ.ImportDir()』を実行した際には
SourceControlが動作していないように見えております。

以下のような形でメソッド実行しているのですが、オプション等の不備になるのでしょうか?

> Do $SYSTEM.OBJ.ImportDir("ファイルが存在するパス","*.cls;*.mac;*.int;*.inc;*.dfi","ck",,1)

3
0 212
質問 Yuji Ohata · 6月 7, 2021

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。
clsファイルのExportについて、ご存じな方がいらしたら教えてください。
VSCodeではclsの一覧からExportを選択すると、clsファイルとしてローカルにファイル出力されます。

これと同じことを、ObjectScript上でも行いたいと思っています。
しかしながら、Export用のAPIを見てみてもxmlファイルで出力される旨のコメントがあり、
clsファイルのまま出力するためのAPIが見当たりません。

https://irisdocs.intersystems.com/iris20191/csp/documatic/%25CSP.Documa…

どなたか情報をお持ちではないでしょうか?

※ちなみに本当にやりたいことは、CREATE TABLE実行時に自動で作られる永続クラスを
 自動でExportするような仕組みを構築しようと考えております。

2
0 223
質問 Yuji Ohata · 5月 18, 2021

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

AWSのcodebuildを利用して、
IRIS環境をビルドされた経験がある方がいらっしゃたら
情報共有いただきたいです。

ただいま取り組んでいるプロジェクトでは、
IRISのclsファイルをaws codecommitのgitリポジトリで管理しております。
※Dockerコンテナではない。

ここで作成されたソースコードをaws Codebuildの仕組みを利用して
自動でコンパイルチェックをする仕組みを構築したいと考えております。
コンパイルを実行する環境としては、AWS ECRに自作したDockerコンテナを利用しております。
※コンテナはstore/intersystems/iris-community:2020.1.0.215.0を基底に、簡単なネームスペースを作成しただけのもの。
 ローカルPC上ではIRIS環境として利用できることを確認済み。

ビルドはbuildspec.ymlにて、以下のような命令で行おうと考えております。

1. iris start IRIS でirisを起動。
2. iris terminal IRISでターミナルにログイン。
3. gitから取得したコードをImport & コンパイル。

しかし、上記を実行しようとすると2の時点で Access Deniedのエラーとなってしまいます。

5
0 851
質問 Yuji Ohata · 4月 13, 2021

こんにちは、皆さま。
JOBの実行監視について、いい方法があれば教えてください。

現在Interoperablity上にファイル検知(PassthroughService)をトリガーにした
Serviceを作成しており、このServiceがデイリーで正しく動作しているかどうかを
監視する仕組みを作りたいと考えています。

 例)
 「A」というServiceが、毎日20時までに実行されているか?
 を監視し、実行されていなければエラーメールを送信する。

今考えている案では、タスクスケジューラを用いて
JOBが実行されたかを見に行くしかないのかなと考えているのですが、
他にいい実現方法をご存じな方がいらっしゃれば、情報頂けますと幸いです。

2
0 183
質問 Yuji Ohata · 4月 13, 2021

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

InteroperabilityのRecordMapの仕組みを利用した、ファイル取り込みについて、
取り込み時のエラー内容を独自のログ出力グローバルに吐き出したいと考えております。

管理ポータル上だと以下のように表示されている内容を
文字列として取得したいだけなのですが、何か方法はありませんでしょうか?

Ent_Util.Logの中を見ると上記の内容は確認できたのですが、
わざわざシステムが吐いているログを見なくとも、
ビジネス・サービスの結果として取得できる情報があるのでは?と考えております。

4
0 151
質問 Yuji Ohata · 3月 29, 2021

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

ObjectScriptでは様々な型の変数定義が可能ですが、
実際に定義された変数(Object)から、その変数の型を逆引きする方法を
ご存じな方はいらっしゃいませんでしょうか?

理想としては、Java等で利用可能な『instanceof』演算子の
代替えとなるような仕組みが望ましいです。

力技で何とかなりそうなら、専用のメソッドみたいなものを
自作で作ってもよいかなとは考えておりますが、
現状その力技すら思いついていない状況です。。。

何か情報をお持ちの方がいらしたら、助言いただけますと幸いです。

4
0 400