
新しい InterSystems IRIS® Cloud SQL と InterSystems IRIS® Cloud IntegratedML® クラウド製品のユーザーであり、デプロイメントのメトリクスにアクセスして独自の可観測性プラットフォームに送信しようと考えている方のために、メトリクスを Google Cloud Platform Monitoring(旧称 StackDriver)に送信して手っ取り早く行う方法をご紹介します。

新しい InterSystems IRIS® Cloud SQL と InterSystems IRIS® Cloud IntegratedML® クラウド製品のユーザーであり、デプロイメントのメトリクスにアクセスして独自の可観測性プラットフォームに送信しようと考えている方のために、メトリクスを Google Cloud Platform Monitoring(旧称 StackDriver)に送信して手っ取り早く行う方法をご紹介します。
コミュニティの皆さんこんにちは。
ベクトル検索関連の処理が完全にノーマークだった私が、一先ず「やってみよう!」との事で、2つの動画のサンプルを実行してみました。
Pythonは初心者なので、アレな箇所があっても目をつぶっていただけると幸いです。
また、間違っている箇所があったら、ご指摘いただけると幸いです。
■参考にした動画
■参考にしたコミュニティ記事
本記事では、動画で紹介された内容を実際にIRIS環境上で実行できるよう、具体的な環境構築とコーディングを記載致します。
コミュニティの皆さんが簡単に試せるようになれば幸いです。
またGithubにサンプルソースを配置しているので、必要な方は参考にして下さい。
※環境作成方法に問題のない方は、読み飛ばしていただいて構いません。
| 項目 | バージョン情報・他 |
|---|---|
| OS | WIndowsServer2019 |
| IRIS | IRIS Community 2025.2.0.227.0 |
| Python | 3.12.10 |
| 開発環境 | VS Code 1.105.1 |
インターシステムズは、InterSystems IRIS® data platform、InterSystems IRIS® for HealthTM、HealthShare® Health Connect のメンテナンスバージョン 2025.1.2 および 2024.1.5 をリリースしました。今回のリリースでは、最近お知らせした以下の警告や勧告の修正が含まれています。
製品の品質改善のために、開発者コミュニティを通じてぜひご意見をお聞かせください。
詳細な変更リストとアップグレードチェックリストはこちらのドキュメントをご参照ください(すべて英語, 2025.1):
これは InterSystems FAQ サイトの記事です。
%String型のプロパティをOrder Byの条件にしてクエリーを発行した際のデータは以下のような順番で並べられます。
SELECT * FROM Shop.Order orderby StatusFlagnull
-1
-2
-99
0これは%String型(文字列型)のプロパティの照合順として正しい振る舞いです。
文字列プロパティに対し、+ をつけることで、数値照合と同じ照合順を得ることができます。
SELECT * FROM Shop.Order orderby +StatusFlagnull
-99
-1
-2
0これは InterSystems FAQ サイトの記事です。
SQLアクセス( ADO含む)を行う場合は、SQLトランザクションを使用して、トランザクションを制御します。
一方オブジェクトアクセス(ObjectScript)ではtstart / tcommit / trollbackコマンド
(Native SDK for .NETでは IRIS の TStart(), TCommit(), TRollback() メソッド)
によってトランザクションを制御します。
この2種類のトランザクションモードを混在させて使用することはサポートされていません。
詳細は、以下のドキュメントをご参照ください。
また関連するメソッドの以下ドキュメントの注意事項にも
「このメソッドは Native SDK トランザクション・モデルを使用し、ADO.NET/SQL トランザクション・メソッドとは互換性がありません。
この 2 つのトランザクション・モデルを混在させないでください。」
と記載をしております。
これは InterSystems FAQ サイトの記事です。
何の設定も行なっていない場合、GROUP BYやDISTINCTで指定したフィールドは大文字小文字を区別せずに全て大文字として処理されます。
これはGROUP BYやDISTINCTのグループ化がフィールドに対して定義された照合タイプに基づいて行われ、その文字列照合の既定値がSQLUPPERになっているためです。
以下のドキュメントに説明がある通り、DISTINCT は、フィールドに対して定義された照合タイプに基づいて、文字列値をグループ化します。
これを変更する方法は、以下の3種類になっています。
(A) %SQLSTRING または %EXACT照合関数を使用する
(B) フィールドの文字列照合を SQLSTRINGに変更する
また、フィールドにインデックスが設定されている場合には、インデックスの文字列照合も SQLSTRINGに変更する
(C) 管理ポータルで設定を変更する
※(B)について補足
・文字列照合をEXACTに設定しても動作しますが、一般的にはSQLSTRINGの使用が推奨されています。
・フィールドの文字列照合とインデックスの文字列照合は、同じ設定にすることが推奨されています。
※(C)の設定手順
これは InterSystems FAQ サイトの記事です。
JSON利用の普及に伴いインターシステムズは、JSONに関連する様々な機能強化をIRISに対して行なっています。
その一環として、SQLのJSON_OBJECTのサポートがあります。
この機能に関して現時点より(2025年6月)古いバージョンでは残念ながら制限や不具合が存在しています。
今後も機能強化やバグフィックスを継続していく予定となっているため、この機能の利用を検討および既に利用している方は最新バージョンでのご利用をお勧めします。
ここでは、現時点でわかっている制限事項/不具合についてお知らせします。
Class User.test Extends%Persistent
{
Property p1 As%String;Property p2 As%String;
}
Class User.myview [ ClassType = view, ViewQuery = { select p1 as v10, p1 as v11, p2 as v12 from test } ] { }これは InterSystems FAQ サイトの記事です。
ODBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。
そのような場合にODBCドライバのクライアントログを有効にすることで、エラーについての詳細情報を取得することができます
ODBCログの有効化については以下をご参照ください。
Windowsの場合は、上記に記載されている通り、2種類のログが取得できます。
変更の反映にはODBCクライアントアプリケーションを再起動する必要があります。
既定のODBCクライアントログファイル名は IRISODBC.log で、既定の場所は C:¥Users¥Public¥Logs です。
既定のトレースログ名は、SQL.logで、既定の場所は、c:¥Users¥<ユーザー名>AppData¥Local¥Temp¥です。
(すべてのユーザーIDのコンピュータ全体のトレースをチェックしない場合)
これは InterSystems FAQ サイトの記事です。
ObjectScript で日付の比較を行う場合、一旦 $HOROLOG 形式(内部数値)に変換することで算出しやすくなりますが、SQL 関数を利用して算出することもできます。
ObjectScript から SQL 関数を実行するには、%SYSTEM.SQL.Functions クラスを使用します。
※ 2021.1以前のバージョンでは、%SYSTEM.SQL クラスを使用します。
%SYSTEM パッケージは、システム・オブジェクトと呼ばれ ObjectScript では $SYSTEM 特殊変数を利用して以下の構文で実行します。
$SYSTEM.サブパッケージ名.クラス名.メソッド名() または $SYSTEM.クラス名.メソッド名()
以下、SQL 関数 DATEDIFF を使用して日付の比較を行う例です。
USER>write$system.SQL.Functions.DATEDIFF("dd","2025-01-20","2025-03-20")
59
分での比較
USER>write$system.SQL.Functions.DATEDIFF("mi","2025-01-20","2025-03-20")
84960
秒での比較
次回の Python コンテストでは、Python を使用して IRIS をデータベースとして使用する簡単な REST アプリケーションを作成する方法についての小さなデモを作成しようと思います。 以下のツールを使用します。
お客様のプロジェクトにおいて、どのようにすればいつ何時に誰がデータベースを変更したかを追跡できるか問われました。 SQL とオブジェクトへの両方のアクセスで Insert、Update、および Delete を追跡することが目的です。
以下は、変更ログを維持するために作成したテーブルです。
これは、InterSystems FAQサイトの記事です。
%SQL.Util.Proceduresクラスの CSV() プロシジャを使用することにより、実現できます。
下記が使用例のコードとなります。(test.csvというファイルが c:\temp にあるという前提)
上記を実行することにより結果セットとして各行およびフィールドにアクセスできます。
実行例:
これはInterSystems FAQ サイトの記事です。
LAST_IDENTITY() SQL関数を使用すると取得できます。
※ この関数は、埋め込み SQL または ODBC 利用時に使用できます。ダイナミック SQL、SQL シェル、または管理ポータルの SQL インタフェースによる値には設定されません。
簡単な埋め込み SQL での例をご紹介します。
先日、お客様よりタイトルのご質問をいただき、サンプルコードを作成しました。せっかくですので、こちらでも共有したいと思います。
今回は、データベースの空き容量情報を取得する、%SYS.DatabaseQueryクラスのFreeSpaceクエリを使用したサンプルとします。
C#.Net と VB.Net で作成してみました。
★C#.Net
これは、ネイティブウェブアプリケーションとして IRIS にデプロイできる Django アプリケーションのテンプレートです。
git clone
cd iris-django-template
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
docker-compose up
ベース URL は http://localhost:53795/django/ です。
/iris - IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop - IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/api/posts - Post オブジェクトの単純な CRUD エンドポイント。WSGI 導入記事をご覧ください: wsgi-introduction。
Mac版のIRISにSQLを使用して他ツールからアクセスするケースはそもそも少ないと思いますが、DBeaverにJDBCを使用してアクセスできることはこのコミュニティの住人であれば、知っている人は結構いるかと思います。
しかし今回ちょっと理由があってMac上のIRISにODBCを使ってアクセスする方法についてトライしてみました。
ここではその備忘録を書き留めておこうと思います。
実際の所、Mac上のクライアントツールでODBCでアクセスできるツールもそんなにないのですが、
候補としてMS-Excel(MS-Query経由)またはLibreOfficeがありました。
まず結論としてExcelは色々とトライしましたが、原因不明ですがうまくつながりませんでした。
(どうもExcel(MS-Query)が拒絶している感じです)
LibreOfficeは何とか接続でき、データの取得はできる様になりました。
まず、前準備としてODBC Driver Managerというものをセットアップする必要があります。
細かくいうとこれにもiODBCとUnixODBCの2系統があるのですが、ExcelおよびLibreOfficeはiODBCにしか対応していない感じです。
(これは正確な情報ではない可能性はあります)
これは、InterSystems FAQ サイトの記事です。
小数点桁数を指定しない単純な整数への切り上げ・切り捨ては、それぞれ、以下の関数で実行できます。
(SQL関数)
(ObjectScript関数)
切り上げ: $system.SQL.Functions.CEILING()
切り捨て: $system.SQL.Functions.FLOOR()
※バージョン2021.1以前は以下のメソッドを使用します。
切り上げ: $system.SQL.CEILING()
切り捨て: $system.SQL.FLOOR()
小数桁数を指定して切り上げ・切り捨てを行いたい場合は、2つの関数を組み合わせ、以下のようなメソッドを作成して対応します。
これは、InterSystems FAQ サイトの記事です。
ウィンドウ関数は、結果セットを部分的に切り出した領域に集約関数を適用できるもので、WHERE GROUP BY および HAVING 節が適用された後、SELECT クエリで選択された行に対して作用します。
IRIS/IRIS for Health 2021.1からサポートしています。
サポートされるウィンドウ関数は以下の通りです。
詳細については、下記ドキュメントページをご確認ください。
ウィンドウ関数の概要
関連記事:IRIS SQLでは OFFSET/LIMIT句のような機能をサポートしてますか?
IRIS SQLクエリで取得した結果セットのランキング(順位)を算出する方法
これは、ネイティブウェブアプリケーションとして IRIS にデプロイできる FastAPI アプリケーションのテンプレートです。
git clone
cd iris-fastapi-template
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
docker-compose up
ベース URL は http://localhost:53795/fastapi/ です。
/iris - IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop - IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/posts - Post オブジェクトの単純な CRUD エンドポイント。/comments - Comment オブジェクトの単純な CRUD エンドポイント。WSGI 導入記事をご覧ください: wsgiサポートの概要。
インターシステムズは、InterSystems IRIS®data platform、InterSystems IRIS® for HealthTM、および HealthShare® Health Connect の 2025.1 リリースを一般提供 (GA) したことを発表しました。2025.1 は、拡張メンテナンス(EM)リリースです。
リリースハイライト
今回のリリースには、以下のような数々の興味深いアップデートが含まれます:
これは、InterSystems FAQサイトの記事です。
SQLでクエリ実行時、ORDER BYで並べ替えをする場合、各RDBMSによって、照合順が異なることがあります。
たとえば、NULLと空文字の混じった文字列のカラムを並べ替える場合、
IRIS SQLでは、既定の照合順は下記のようになりますが、
Oracleでは、下記のような照合順になります。
複数のDB由来のデータを取り扱う際には、このような照合順の違いを合わせたい場合があります。
IRISの場合、既定の文字列照合はSQLUPPERですが、照合タイプを変更することによって、照合順を変えることが出来ます。
ドキュメント:照合
上記のIRIS SQLとOracleの違いを合わせるためには、照合タイプを「SQLSTRING」に設定し、インデックスを作成します。
Property TestColumn As%String(COLLATION = "SQLSTRING");
Index IdxTest On TestColumn;InterSystems はこのたび「テーブル・パーティショニング機能」の早期アクセスプログラムを開始しました。これにより、IRIS をお使いのお客様が非常に大きなテーブルを管理したり、行データや関連インデックスをデータベースやストレージ階層間で分散できるようになります。テーブル・パーティショニングは IRIS のリレーショナル・データ管理の核心深くに関連する機能であるため、初期段階でのフィードバックを提供いただけたり、状況に応じて機能調整にご協力いただける、少数の熱心なお客様と一緒になって、確実な機能実装を進めたいと考えています。
非常に大規模なリレーショナル・データセットをご利用中で、より効率的な運用を望まれており、新機能を試してみたいというお客様は、ぜひ https://www.intersystems.com/early-access-program/ からご登録ください。登録された方には、一時的な開発ライセンス、新機能を含む最新キットとコンテナ・イメージ、チュートリアル がすべて掲載された評価ポータルをご案内するメールをお送りします。
これは InterSystems FAQ サイトの記事です。
計算プロパティを定義する際に利用可能なキーワードが複数あります。
詳細は、以下をご参照ください。
実際のこれらのキーワードの関連性は、少々複雑ですので具体的なコードを作成して動作を確認してみます。
以下のようなクラス定義を作成します。(プロパティとインデックス定義のみ表示します)
完全なクラス定義は以下より、ダウンロードできます。
これは InterSystems FAQ サイトの記事です。
IRISには、データ項目の値を実体として持たずに、何らかの演算処理の結果として提供する機能があります。
これを計算プロパティまたは計算フィールドといいます。
計算プロパティを定義するためには、最低限以下の手順を実行します。
プロパティ定義にSqlComputedキーワードを含めます。
プロパティ定義にSqlComputedCodeを含めて、値を算出するための処理ロジックとして含めます。
または、SqlComputedCodeを含めずに、代わりに<プロパティ名>Computationという名前のクラスメソッドを記述します。
以下は、Age(年齢)プロパティを計算プロパティとして定義した例になります。
これは、ネイティブウェブアプリケーションとして IRIS にデプロイできる Flask アプリケーションのテンプレートです。
git clone
cd iris-flask-template
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
docker-compose up
ベース URL は http://localhost:53795/flask/ です。
/iris - IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop - IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/posts - Post オブジェクトの単純な CRUD エンドポイント。/comments - Comment オブジェクトの単純な CRUD エンドポイント。WSGI 導入記事をご覧ください: wsgi-introduction。
これは InterSystems FAQ サイトの記事です。
埋め込みSQLの出力ホスト変数は、SQLCODE=0(埋め込みSQL正常終了)の場合のみ、正しい値が設定されていることが保証されます。
InterSystems製品のバージョンによっては、SQLCODEが0以外の場合(該当データがない100やエラー等)で値が設定される場合もありますが、その値は無効です。
特に、IRIS2021.1以降のバージョンでは、SQLCODE=100 の場合、INTO 節で指定された出力ホスト変数は NULL("") にクリアされますので注意が必要です。
Cacheや、IRIS2020.x 以前のバージョンでは、明示的な値のクリアを行っておりませんでしたが、こちらについても値は保証されるものではありません。
埋め込みSQLを使用する場合は、必ずSQLCODEを確認してエラーチェックを行うようにして下さい。
また、エラーチェック以外でも、SQLCODE = 0(データあり) の場合と SQLCODE = 100(データなし) の場合は処理を分けるようにし、SQLCODE = 100 の場合は出力ホスト変数を参照しないようご注意ください。
例)
誤った使用例:
2025 年 2 月 15 日 – 警告:SQLクエリが間違った結果を返す
インターシステムズは、SQL クエリが不正な結果を返す原因となる 2 つの問題を修正しました。さらに、日付/時刻データ型の処理における不整合を修正しました。この日付/時刻データ型の処理の修正により以前の不整合な動作に依存していた既存のアプリケーションでは、異なる予期しない(正しい)結果が返される可能性があります。
DP-436825: ラテラル結合を使用したSQLクエリが間違った結果を返すことがある
こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。
IRISに直接Insert文を発行する時と、JDBCを経由してInsert文を発行する時とで、
挙動差異があるように見受けれれまいたので、何かご存知な方がいらっしゃれば教えてください。
次の様なテーブルがあります。.png)
それに対してDBeaverとIRIS管理ポータルからInsertを実行します。
★DBeaver
★IRIS管理ポータル.png)
この後実際に作成されたグローバルの情報を確認すると、
『VARCHAR型』で作成したカラムに数値をInsertした際に、
実データの型が異なっていることがわかります。
DBeaver(JDBC) ➡ 文字列で登録
IRIS直 ➡ 数値で登録
個人的には『VARCHAR型』に数値が入ること自体がおかしいので、
DBeaverの方がまし(ホントは型違反とかになってほしい)と思うのですが、
この差異が何で発生するのか、また回避する方法をご存じな方がいらっしゃれば情報共有頂きたいです。
また、そもそもIRISはRDBを使っても型チェックが曖昧になるものなのかも気になっています。
さすがに数値のカラムに文字列を入れようとすると怒られるのですが、
上記の様な場合にチェックの仕組みが働かないのには違和感がありました。
こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。
私自身SQLがあまり得意ではなく、
業務で書いてみたもののパフォーマンスがよくなく、
不要なループが含まれていた、無駄な検索条件が含まれている…なんてことが多々あります。
IRISの管理コンソールなどにはいろんな機能があると思うのですが、
パフォーマンス改善をするために利用できるツールなどはあったりしますでしょうか?
何かご存知の方がいらっしゃいましたら、情報共有頂けますと幸いです。
コミュニティの皆さん、こんにちは。
この記事では、iris-RAG-Gen という私のアプリケーションをご紹介します。
iris-RAG-Gen は、IRIS Vector Search の機能を使用して、Streamlit ウェブフレームワーク、LangChain、および OpenAI で ChatGPT をパーソナライズするジェネレーティブ AI 検索拡張生成(RAG: Retrieval-Augmented Generation)アプリケーションです。 このアプリケーションは IRIS をベクトルストアとして使用します。