0 フォロワー · 167 投稿

SQLは、リレーショナルデータベースにデータを格納、操作、および取得するための標準言語です。

InterSystems公式 Masahito Miura · 4月 16

InterSystems IRIS® データプラットフォーム、 InterSystems IRIS® for Health および HealthShare® Health Connect™ のメンテナンスバージョン 2025.1.4 および 2024.1.6 がリリースされました。今回のリリースでは、最近お知らせした以下の警告や勧告の修正が含まれています。 

より良い製品を皆様と共に作り上げていくため、 アイデアポータル 内の リリース後のフィードバック カテゴリからご意見をお寄せください。

ドキュメント

詳細な変更リストとアップグレードチェックリストはこちらのドキュメントをご参照ください(すべて英語 2025.

0
0 24
記事 Toshihiko Minamoto · 4月 7 2m read

データベースを確認したところ、巨大な^rINDEXSQLグローバルが存在しているようですが、これはなぜでしょうか? 😬

管理ポータルのSQLページにおいて、「SQLステートメント」の下に「古いデータをクリーンアップ」ボタンがおりますが、これはどのような機能でしょうか? 🤔

ステートメントのリストにおいて、一部のステートメントには「Location」値が設定されていますが、他のステートメントには設定されていないようです。これはどうしてでしょう? 🤨

そうですね、確かにこれらはすべて関連しています。

一般的に、実行されたSQLクエリに関する基本的な統計情報 は保持しております。 キャッシュされたSQLクエリを削除する際、ステートメントリスト内のステートメントエントリ自体は削除せず、統計情報は保持いたします(将来の比較に役立つ可能性があるためです)。ただし、ロケーション列は「クリア」します(既存のキャッシュ済みクエリを指さなくなるためです)。 これらの「古い」ステートメント(もはやどこも指していないもの)をクリーンアップしたい場合は、「古いステートメントをクリーンアップ」ボタンを押することができます。

以下のような表示になります(システムエクスプローラー -> SQL -> SQLステートメント):

[注記:旧バージョン(例:v2020.

0
0 19
記事 Hiroshi Sato · 4月 6 4m read

Claude Codeを使うようになってから、創作意欲が爆上がりです。

今までは、何かを作りたいと思っても実際にコーディングをするのが面倒なので、よっぽどのニーズがないとプログラミングまでは至らなかったのですが、仕様をちょこちょこっと書くと後はClaude Codeが勝手にやってくれるので、生産性が雲泥の差です。

私はObjectScriptネイティブ世代なので、これからはPythonと言われても少し躊躇する部分がありましたが、逆にClaude CodeはPythonが大得意なので、新規に開発する際に、ObjectScriptを選ぶ理由がほとんどなくなりました。

とはいえ、Claude CodeがEmbedded Pythonのくせをどの程度理解しているか少し懸念があったのですが、それはかなり取り越し苦労だとわかってきました。

IRISのドキュメントに書かれていることは大体ちゃんと理解してくれています。

そして、自分でPythonコードを書いたら決して書けないような簡潔で洗練されたコードを書いてくれます。

今まであったらいいなと思いつつ、面倒なので、ほとんどやっていない処理としてテーブルのインポート・エクスポートがあります。

0
0 29
記事 Toshihiko Minamoto · 3月 24 2m read

監査はサーバーのセキュリティを確保する上で極めて重要な機能であり、かなり 以前から、サーバーで実行されるSQL文を監査する機能を提供しております。

v2024.3 が既にリリースされておりますが、監査すべきこれらイベントを定義するためのより詳細なオプションを提供しております。

従来は、アクセスメカニズムに準じてSQL文の監査を決定することができました。例えば、JDBC/ODBCからの文の実行と、埋め込みSQL (例えば: コード内で&&sqlを使用する場合など) と、ダイナミックSQL(例えば:コード内で%SQL.Statement%SQL.Statementを使用する場合や、Mgmt. ポータルのSQLクエリ実行、あるいはターミナルのSQLシェルからの実行など)、そして今回、これに 加えて、 特定の種類のステートメントのみを監査対象とすることも可能です(アクセス制御機構に基づき、従来と同様に)。対象となる種類は以下の通りです:

  • DDL (データ定義言語) - 

データベースの要素や設定、その他のデータ以外のものを変更する文です。例:CREATE / ALTER TABLE

  • DML (データ操作言語) - 

データを変更する文です。

0
0 18
記事 Toshihiko Minamoto · 2月 18 10m read

前回の記事、SQLでの変数やパターンを使ったLIKEの使用では、組み込みSQLから動的SQLまで、さまざまなシナリオでのLIKE述語の動作や、ワイルドカードや変数を使った場合のパフォーマンスへの影響について解説しました。 前回の記事では、動作するLIKEクエリを書くことに慣れることをテーマにしました。しかし、SQLを動かすことができるようになるのは、あくまで出発点に過ぎません。 信頼性が高く、スケーラブルで安全なアプリケーションを構築するには、LIKEを使ったクエリを含む、すべてのSQLに共通するベストプラクティスを理解する必要があります。

この記事では、次のステップに進みます。 SQLコードを強化し、ありがちな間違いを避け、SELECTステートメント文が正しく動作するだけでなく、効率的かつ安全に実行されるようにするためのいくつかの重要なポイントを見ていきます。 途中で、LIKE述語を使ったSELECTステートメントを例として取り上げ、これらの基本原則がどのようにクエリやその結果に直接影響するかを説明します。

*これは、Geminiがこの記事のために生成したものです。いい感じです。

0
0 47
記事 Toshihiko Minamoto · 2月 11 8m read

年月を重ねるにつれて、InterSystems開発者コミュニティで特定のSQLの質問が何度も繰り返されることに気づくようになりました。特にさまざまなコンテキストでのLIKE述語の使用についてです。 よくあるバリエーションには、以下のようなものがあります。

また、さらに多くの派生パターンがあります。 そこで、InterSystems IRIS SQLでのLIKEの仕組みに焦点を当てた記事を書くことにしました。特に、埋め込みSQL、動的SQL、クラスクエリで変数を使用する方法について取り上げ、パターンのエスケープ、特殊文字検索についても解説しています。

まず最初に、InterSystems IRIS SQLでは、SQL標準の新しいバージョンを実装しているその他のリレーショナルDBMSで利用できるほとんどの機能を提供していることを述べておきたいと思います。 同時に、IRISではリレーショナルアクセスだけでなく、オブジェクトモデルやドキュメントモデルを使って同じデータにアクセスできることも重要なポイントです。

それでは、LIKE述語と、SQLでのパターンマッチングの使い方を詳しく見ていきましょう。

0
1 64
お知らせ Mihoko Iijima · 2月 5

コミュニティの皆様、こんにちは!

新年度を前に、InterSystems 製品を利用した開発・運用に携わる方向けのトレーニングコースを開催します。

2月26日開始の開発者向けコース、3月2日開始の管理者向けコースをご用意しており、日常業務の振り返りや知識の整理を行う機会としてご活用いただけます。

4月からの業務をよりスムーズに進めるための準備として、ぜひご検討ください。

※コースは全てオンラインでの開催です。

開発者向けトレーニング

InterSystems SQLの使い方(2日間)

  • 開催日時:2月26日~27日 10:00~17:00
  • 対象:InterSystems 製品で SQL アクセスを利用される方

こんな方におすすめ

  • InterSystems 製品を利用した開発を担当することになり、SQL 周りの基本を整理して理解したい方
  • 日常的な開発に入る前に、実務でよく使う機能や設計の考え方を確認しておきたい方

コース概要

InterSystems 製品における SQL アクセスを利用した開発を想定し、実務に役立つ知識を体系的に学べるトレーニングコースです。

ツールの基本的な使い方から、ストアドプロシージャやサーバ側ロジックの実装、インデックス設計、パフォーマンスチューニングまで、日常業務を想定した実践的な内容を扱います。

0
0 32
記事 Toshihiko Minamoto · 1月 28 4m read

InterSystems IRISのウィンドウ関数を使用すると、累積合計、ランキング、移動平均など、強力な分析を直接SQLで実行できます。
ウィンドウ関数は、「GROUP BY」のように結果をまとめることなく、関連行の「ウィンドウ」(グループ上)で動作します。
つまり、ループも結合も一時テーブルも使わずに、より簡潔で高速、しかも保守しやすいクエリを書くことができます。

この記事では、よくあるデータ分析タスクに取り組むことで、ウィンドウ関数の仕組みを理解していきましょう。


InterSystems IRISでのSQLウィンドウ関数入門

SQLウィンドウ関数は、データ分析のための強力なツールです。
各行をそのまま表示したまま、複数行の集計とランキングを計算することができます。
ダッシュボード、レポート、または複雑な分析を構築しているかどうかに関係なく、ウィンドウ関数はロジックを簡素化し、パフォーマンスを大幅に向上させます。

注意:私はウィンドウ関数の専門家ではありませんが、私がウィンドウ関数を理解するうえで役立ったインサイトやリソースを共有したいと思います。 ご提案や訂正があれば、ぜひお知らせください!


🚀 ウィンドウ関数が重要な理由

累積合計やランキング、行間の差分を計算するために、複数のSQLクエリや手続き型のループを書いたことはありませんか?

0
1 71
記事 Toshihiko Minamoto · 1月 19 13m read

この記事では、2025.2リリースで導入された、IRIS SQL処理の重要な要素、InterSystems IRISのテーブル統計処理の大きな改善について紹介します。 まず最初に、テーブル統計とは何か、どのように利用されるのか、そしてなぜ今回の改善が必要だったのかを簡単におさらいします。 その後、テーブル統計を収集・保存するための新しいインフラの詳細を掘り下げてから、この変更が実際にアプリケーションにどのような影響を与えるのかを詳しく見ていきます。 最後に、新しいモデルで可能になったパターンに関する追加の注意点をいくつか紹介し、今回の初期リリースに続く次のフェーズに期待をつなげます。

0
0 43
記事 Toshihiko Minamoto · 12月 17, 2025 5m read

前の記事では、smolagentsとInterSystems IRISを使用して、SQL、ベクトル検索を使用したRAGinteroperabilityを組み合わせたカスタマーサービスAIエージェントをビルドしました。

その際、LLMと埋め込み表現のためにクラウドモデル(OpenAI)を使用しました。

今回はさらに一歩進めます。Ollamaを利用して、同じエージェントをローカルモデルで実行します

0
0 63
記事 Toshihiko Minamoto · 12月 15, 2025 8m read

カスタマーサポートの質問は、構造化データ(オーダー、製品 🗃️)、非構造化知識(ドキュメント/よくある質問 📚)、およびライブストリーム(出荷更新 🚚)と多岐にわたります。 この投稿では、以下を使用して、3つすべてに対応するコンパクトなAIエージェントを作成します。

  • 🧠 Python + smolagentsは、エージェントの「頭脳」を構成します
  • 🧰 SQLベクトル検索(RAG)、およびInteroperabilityのためのInterSystems IRIS(モック配送状況API)
0
0 78
記事 Toshihiko Minamoto · 11月 5, 2025 8m read

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

0
0 78
記事 Kosaku Ikeda · 10月 26, 2025 14m read

コミュニティの皆さんこんにちは。
 

ベクトル検索関連の処理が完全にノーマークだった私が、一先ず「やってみよう!」との事で、2つの動画のサンプルを実行してみました。
Pythonは初心者なので、アレな箇所があっても目をつぶっていただけると幸いです。

また、間違っている箇所があったら、ご指摘いただけると幸いです。


■参考にした動画

■参考にしたコミュニティ記事

【目的】

本記事では、動画で紹介された内容を実際にIRIS環境上で実行できるよう、具体的な環境構築とコーディングを記載致します。
コミュニティの皆さんが簡単に試せるようになれば幸いです。

またGithubにサンプルソースを配置しているので、必要な方は参考にして下さい。

【準備】

■作業環境

※環境作成方法に問題のない方は、読み飛ばしていただいて構いません。

項目 バージョン情報・他
OS WIndowsServer2019
IRIS IRIS Community 2025.2.0.227.0
Python 3.12.10
開発環境 VS Code 1.
0
0 179
InterSystems公式 Seisuke Nakahashi · 10月 23, 2025

インターシステムズは、InterSystems IRIS® data platformInterSystems IRIS® for HealthTMHealthShare® Health Connect のメンテナンスバージョン 2025.1.2 および 2024.1.5 をリリースしました。今回のリリースでは、最近お知らせした以下の警告や勧告の修正が含まれています。

製品の品質改善のために、開発者コミュニティを通じてぜひご意見をお聞かせください。

ドキュメント

詳細な変更リストとアップグレードチェックリストはこちらのドキュメントをご参照ください(すべて英語, 2025.

0
0 110
記事 Hiroshi Sato · 10月 21, 2025 1m read

これは InterSystems FAQ サイトの記事です。
 

%String型のプロパティをOrder Byの条件にしてクエリーを発行した際のデータは以下のような順番で並べられます。

SELECTFROMorder
null
-1
-2
-99
0

これは%String型(文字列型)のプロパティの照合順として正しい振る舞いです。

文字列照合の並び順

文字列プロパティに対し、+ をつけることで、数値照合と同じ照合順を得ることができます。

order
0
0 44
記事 Hiroshi Sato · 10月 21, 2025 1m read

これは InterSystems FAQ サイトの記事です。
 

SQLアクセス( ADO含む)を行う場合は、SQLトランザクションを使用して、トランザクションを制御します。

一方オブジェクトアクセス(ObjectScript)ではtstart / tcommit / trollbackコマンド 
(Native SDK for .NETでは IRIS の TStart(), TCommit(), TRollback() メソッド)
によってトランザクションを制御します。

この2種類のトランザクションモードを混在させて使用することはサポートされていません。

詳細は、以下のドキュメントをご参照ください。

トランザクション管理

また関連するメソッドの以下ドキュメントの注意事項にも

「このメソッドは Native SDK トランザクション・モデルを使用し、ADO.NET/SQL トランザクション・メソッドとは互換性がありません。

この 2 つのトランザクション・モデルを混在させないでください。」

と記載をしております。

Native SDK for .NET のクイック・リファレンス

0
0 36
記事 Hiroshi Sato · 9月 25, 2025 2m read

これは InterSystems FAQ サイトの記事です。
 

何の設定も行なっていない場合、GROUP BYやDISTINCTで指定したフィールドは大文字小文字を区別せずに全て大文字として処理されます。

これはGROUP BYやDISTINCTのグループ化がフィールドに対して定義された照合タイプに基づいて行われ、その文字列照合の既定値がSQLUPPERになっているためです。

以下のドキュメントに説明がある通り、DISTINCT は、フィールドに対して定義された照合タイプに基づいて、文字列値をグループ化します。

大文字/小文字の区別と DISTINCT の最適化

これを変更する方法は、以下の3種類になっています。

(A) %SQLSTRING または %EXACT照合関数を使用する
(B) フィールドの文字列照合を SQLSTRINGに変更する
 また、フィールドにインデックスが設定されている場合には、インデックスの文字列照合も SQLSTRINGに変更する
(C) 管理ポータルで設定を変更する 

※(B)について補足
・文字列照合をEXACTに設定しても動作しますが、一般的にはSQLSTRINGの使用が推奨されています。
・フィールドの文字列照合とインデックスの文字列照合は、同じ設定にすることが推奨されています。

0
0 82
記事 Hiroshi Sato · 9月 3, 2025 3m read

これは InterSystems FAQ サイトの記事です。
 

JSON利用の普及に伴いインターシステムズは、JSONに関連する様々な機能強化をIRISに対して行なっています。

その一環として、SQLのJSON_OBJECTのサポートがあります。

この機能に関して現時点より(2025年6月)古いバージョンでは残念ながら制限や不具合が存在しています。

今後も機能強化やバグフィックスを継続していく予定となっているため、この機能の利用を検討および既に利用している方は最新バージョンでのご利用をお勧めします。

ここでは、現時点でわかっている制限事項/不具合についてお知らせします。

  • VIEW経由でJSON_OBJECTを利用した場合にエラーとなる場合がある 以下のようなクラスとVIEWを定義します。  
ClassExtends%PersistentAs

この定義に対してデータを登録後、以下のようなSQL文を発行すると、<UNDEFINED>エラーが発生します。

'y'

以下のようなエラーメッセージが表示されます。

0
0 58
記事 Hiroshi Sato · 7月 27, 2025 4m read

これは InterSystems FAQ サイトの記事です。
 

ODBCクライアントからのアクセスでエラーが発生した場合、返ってきたエラーメッセージやコンソールログ上の情報だけでは原因がよくわからない場合があります。

そのような場合にODBCドライバのクライアントログを有効にすることで、エラーについての詳細情報を取得することができます

ODBCログの有効化については以下をご参照ください。

ODBCログの有効化

Windowsの場合は、上記に記載されている通り、2種類のログが取得できます。

  • クライアント・ドライバのログを有効にするには、ODBCデータソースアドミニストレータで使用しているDSNの「ODBCログ」チェックボックスをチェックします。 

  • ドライバー・マネージャのログを有効にするには、[トレース]タブをクリックして[トレースの開始]ボタンをクリックします。

 

変更の反映にはODBCクライアントアプリケーションを再起動する必要があります。

既定のODBCクライアントログファイル名は IRISODBC.log で、既定の場所は C:¥Users¥Public¥Logs です。

既定のトレースログ名は、SQL.logで、既定の場所は、c:¥Users¥<ユーザー名>AppData¥Local¥Temp¥です。

0
0 274
記事 Mihoko Iijima · 6月 30, 2025 2m read

これは InterSystems FAQ サイトの記事です。

ObjectScript で日付の比較を行う場合、一旦 $HOROLOG 形式(内部数値)に変換することで算出しやすくなりますが、SQL 関数を利用して算出することもできます。

ObjectScript から SQL 関数を実行するには、%SYSTEM.SQL.Functions クラスを使用します。

※ 2021.1以前のバージョンでは、%SYSTEM.SQL クラスを使用します。

%SYSTEM パッケージは、システム・オブジェクトと呼ばれ ObjectScript では $SYSTEM 特殊変数を利用して以下の構文で実行します。

  $SYSTEM.サブパッケージ名.クラス名.メソッド名() または $SYSTEM.クラス名.メソッド名()

以下、SQL 関数 DATEDIFF を使用して日付の比較を行う例です。

USER>write$system

分での比較

USER>

秒での比較

USER>

この他、DATEADD 関数を使って指定日付に日付や時刻を追加することもできます。

指定の日付に10年追加する

USER>

指定の日付の25日前

指定日時の16時間前

指定の日付時刻の指定箇所のみを取り出す DATEPART 関数の実行例は以下の通りです。

hour を取り出す

dayofyear を返す

dayを返す

0
0 65
記事 Toshihiko Minamoto · 5月 27, 2025 14m read

次回の Python コンテストでは、Python を使用して IRIS をデータベースとして使用する簡単な REST アプリケーションを作成する方法についての小さなデモを作成しようと思います。 以下のツールを使用します。

  • FastAPI フレームワーク: 高パフォーマンス、学習しやすい、高速コーディング、プロダクション対応
  • SQLAlchemy: Python SQL ツールキットで、アプリケーション開発者が SQL の全性能と柔軟性を活用できるオブジェクトリレーションマッパーです。
  • Alembic: Python 用の SQLAlchemy データベースツールキットと使用する軽量のデータベース移行ツール。
  • Uvicorn: Python の ASGI ウェブサーバー実装。
0
0 104
記事 Toshihiko Minamoto · 5月 14, 2025 9m read

お客様のプロジェクトにおいて、どのようにすればいつ何時に誰がデータベースを変更したかを追跡できるか問われました。 SQL とオブジェクトへの両方のアクセスで Insert、Update、および Delete を追跡することが目的です。

以下は、変更ログを維持するために作成したテーブルです。

/// Changelog, keep track of changes to any table
Class ChangeLog.DB.ChangeLog Extends (%Persistent, %JSON.Adaptor)
{

/// Action 
Property Action As %String(%JSONFIELDNAME = "action", DISPLAYLIST = ",Create,Update,Delete", MAXLEN = 1, VALUELIST = ",0,1,2");

/// Classname of the %Persistent class
Property ClassName As %String(%JSONFIELDNAME = "table", MAXLEN = "") [ SqlFieldName = TableName ];

/// ID of the record
Property DRecordId As %String(%JSONFIELDNAME = "id") [ SqlFieldName = RecordId ];

/// Name of the user that made the change
Property DUsername As %String(%JSONFIELDNAME = "user") [ SqlFieldName = Username ];

/// ISO 8601 formatted UTC timestamp e.g 2023-03-20T15:14:45.7384083Z
Property ETimestamp As %String(%JSONFIELDNAME = "timestamp", MAXLEN = 28) [ SqlFieldName = Timestamp ];

/// Changed Data (only there for Action < 2)
Property NewData As %String(%JSONFIELDNAME = "changed-data", MAXLEN = "");

/// Old Data (only there for Action > 0)
Property OldData As %String(%JSONFIELDNAME = "old-data", MAXLEN = "");

}
0
0 74