開発者のみなさん、こんにちは。

今回は、スーパーやコンビニでもらうレシートを写真で撮り、OCR を使ってレシートの画像から文字列を切り出して IRIS に登録する流れを試してみました。

サンプルでは、Google の Vision API を利用してレシートの JPG 画像から購入物品をテキストで抽出しています。

1 0
1 1.4K

InterSystems IRIS 2020.1 には、重要なアプリケーションの構築を支援する新機能と機能改善が多数盛り込まれています。 2019.1 から 2020.1 までに行われた多数の大幅なパフォーマンス改善のほかに、最近の SQL の歴史において最も大きな変更点の 1 つであるユニバーサルクエリキャッシュ(UQC)が導入されています。 この記事では、SQL ベースのアプリケーションに対するそのインパクトについて、技術的な観点で詳しく説明しています。

1 0
0 136
記事
· 2024年6月6日 2m read
JSON_Table(SQL)の利用

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

IRIS/IRIS for Health2024.1以降のバージョンのSQLで、JSON_TABLE関数がサポートされています。
【ドキュメント】JSON_TABLE(SQL)

これを使用することにより、JSON形式データを表形式で取得することが出来ます。

【例】郵便番号情報を外部から取得し、表形式にマッピングする。
(取得データ(JSON))

1 0
0 112

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

ウィンドウ関数は、結果セットを部分的に切り出した領域に集約関数を適用できるもので、WHERE GROUP BY および HAVING 節が適用された後、SELECT クエリで選択された行に対して作用します。
IRIS/IRIS for Health 2021.1からサポートしています。
サポートされるウィンドウ関数は以下の通りです。

1 0
0 20

古くなった MUMPS アプリケーションの新たな生命を吹き込みたいとお考えでしたら、以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。

今回ご紹介する例には、パート 1 ではカバーしなかった内容を 4 つないし 5 つ程度盛り込んでいます。

その後は親子マッピングの例を紹介して完結となります。それを修得したらマッピングはもう完璧でしょう。

前回と同じ免責事項: これらの記事を読んでもグローバルがよく理解できないという方は、WRC (Support@InterSystems.com) までメールでお問い合わせください。喜んでサポートさせていただきます。

グローバルをクラスにマッピングするステップ。

1 0
0 270

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

日時検索で、TimeStamp型のクエリのパフォーマンスが出ない場合の対処法をご紹介します。

%TimeStamp データ型形式 (yyyy-mm-dd hh:mm:ss.ffff)は、人が読めることを目的とした ODBC 日付形式の文字列として格納されます。
そのため、どうしてもデータサイズが大きくなりクエリの実行に時間がかかってしまいます。
%TimeStamp型のプロパティにインデックスを作成している場合にも、クエリオプティマイザはそのインデックスを優先して最適化するようにはなっておりません。

1 0
1 429

この記事では、2023年3月1日~31日の期間に開催された「技術文書ライティングコンテスト:InterSystems IRISチュートリアル」に応募された24作品の中から、Heloisa Paivaさんが投稿されたシンプルですぐに試せる記事をご紹介します。


はじめに

このチュートリアルは、テストやチュートリアル用のサンプル作成など、あらゆる目的でサンプルデータベースを作成するための、私が見つけた最も簡単な方法についての簡単なチュートリアルです。

ネームスペースの作成

  1. ターミナルを開きます。
  2. 次のコマンドを実行します。 "Do $SYSTEM.SQL.Shell()" (※または :sql の入力でもSQLシェルに切り替えできます)
  3. "CREATE DATABASE " コマンドを実行します。実行時、作成したいネームスペース名をコマンドの引数に指定します。(TESTネームスペースを作成する例:CREATE DATABASE TEST)

これで、管理ポータルから新しいネームスペースを作成するより簡単で素早い方法でネームスペースを作成できます。

1 0
0 168

近頃、LLM や AI などに関する話題で非常ににぎわっています。 ベクトルデータベースもそれなりに関わっており、IRIS 以外では、世界中で多様なサポートがすでに実現されています。

なぜベクトルなのでしょうか?

  • 類似検索: ベクトルでは、データベース内で最も類似する項目やドキュメントを検索するなど、効率的な類似検索が可能です。 従来のリレーショナルデータベースは完全一致検索向けに設計されているため、画像やテキストの類似検索といったタスクには向いていません。
  • 柔軟性: ベクトル表現には汎用性があり、テキスト(Word2Vec、BERT などの埋め込み経由)や画像(ディープラーニングモデル経由)などの様々なデータタイプから導き出すことができます。
  • クロスモーダル検索: ベクトルでは、様々なデータモダリティでの検索が可能です。 たとえば、画像のベクトル表現を基に、マルチモーダルデータベースで類似する画像や関連するテキストを検索できます。

理由は他にも多数あります。

そこで、この Python コンテストでは、このサポートを実装してみることにしました。 残念ながら時間内に完成させることはできませんでしたが、その理由を以下で説明します。

1 0
0 147

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

小数点桁数を指定しない単純な整数への切り上げ・切り捨ては、それぞれ、以下の関数で実行できます。

(SQL関数)

切り上げ:CEILING
切り捨て:FLOOR

(ObjectScript関数)

1 0
0 53

皆さんこんにちは!

VSCode の SQLTools エクステンションを使うと、VSCode から SQLTools に対応しているデータベースへ接続/クエリ実行が行えるようです。

1 つの IDE で 各種言語を操作でき、さらにクエリも発行できるなんて VSCode って便利ですね!👏👏

実は、まだプレビュー機能ではありますが、InterSystem IRIS も接続できます!🎊🎊

正式リリース前なのですが、どんな感じでご利用いただけるかをご紹介したいと思います。

解説ビデオ(4分ちょっと)もあります。ぜひご参照ください。

1 2
0 1.4K

Pandas は単に人気のあるソフトウェアライブラリだけではありません。 これは、Python データ分析環境の基礎でもあります。 その単純さとパワーで知られており、データの準備と分析の複雑さをより扱いやすい形態に変換する上で不可欠な多様なデータ構造と関数が備わっています。 これは、主要なデータ管理および分析ソリューションである InterSystems IRIS プラットフォームのフレームワーク内で、主要評価指標(KPI)やレポート作成用の ObjectScript などの特殊な環境に特に関連しています。

データの処理と分析の分野において、Pandas はいくつかの理由により際立っています。 この記事では、それらの側面を詳細に探ります。

  • データ分析における Pandas の主なメリット:

ここでは、Pandas を使用する様々なメリットについて深く掘り下げます。 直感的な構文、大規模なデータセットの効率的な処理、および異なるデータ形式のシームレスな操作などが含まれます。 Pandas を既存のデータ分析ワークフローに統合する容易さも、生産性と効率を強化する大きな要因です。

1 0
0 105

Mac版のIRISにSQLを使用して他ツールからアクセスするケースはそもそも少ないと思いますが、DBeaverにJDBCを使用してアクセスできることはこのコミュニティの住人であれば、知っている人は結構いるかと思います。

しかし今回ちょっと理由があってMac上のIRISにODBCを使ってアクセスする方法についてトライしてみました。

ここではその備忘録を書き留めておこうと思います。

実際の所、Mac上のクライアントツールでODBCでアクセスできるツールもそんなにないのですが、

候補としてMS-Excel(MS-Query経由)またはLibreOfficeがありました。

まず結論としてExcelは色々とトライしましたが、原因不明ですがうまくつながりませんでした。

(どうもExcel(MS-Query)が拒絶している感じです)

LibreOfficeは何とか接続でき、データの取得はできる様になりました。

まず、前準備としてODBC Driver Managerというものをセットアップする必要があります。

1 0
0 29

古くなった MUMPS アプリケーションに新たな生命を吹き込みたいとお考えですか? 以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。

上の内容に馴染みが無い方は、以下の記事を初めからお読みください。

グローバルをマッピングする技術 1

グローバルをマッピングする技術 2

この記事の例では、典型的な親子構造をマッピングする方法をお見せします。

前回と同じ免責事項: これらの記事を読んでもグローバルがよく理解できないという方は、WRC (Support@InterSystems.com) までメールでお問い合わせください。喜んでサポートさせていただきます。

1 0
0 198

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

インデックスが複数定義されているクラス/テーブルへ csv 形式等のシーケンシャルファイルから大量データをデータベースに登録する際、推奨される登録方法として、データ登録時インデックスを生成させず、登録完了後に一括でインデックスを生成する 方法があります。

この方法は、新規に大量のレコードを一括登録する際に最も有効な手段となります。

<メモ>
大量のデータを追加登録する際には、既存のデータ量と新規データ量のバランスにより、この手法が有効でないケースもあります。その場合は、インデックスの再構築を範囲指定で行うこともできます。

説明に使用するクラス定義例は以下の通りです。

1 0
0 503
記事
· 2021年8月30日 2m read
クエリをチューニングする方法

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

InterSystems 製品には、テーブルのコンテンツに関する統計を収集し、クエリの最適化に役立てる「テーブルチューニング機能」があります。

設定方法は、以下のドキュメントをご参照ください。

ターミナルでは次のコマンドを実行します。

Do $system.SQL.TuneTable("<テーブル名>",0,1)

また、以下の資料もご参照ください。

1) パフォーマンス調査の基礎知識として必要なグローバル構造の解説やSQLの動作の仕組みからクエリプランの見方の解説

インターシステムズ・シンポジア2011の資料

2) パフォーマンスチューニングの例(P13~)

インターシステムズ・シンポジア2012の資料

3) ビットマップ・インデックスの圧縮やオプティマイザ・ヒントなど、Caché SQLのパフォーマンスを最大限に引き出すための情報について

インターシステムズ・シンポジア2014の資料

4) パフォーマンスに困ったときにどこに着目し、どのツールで調べていくか、お客様から日々ご相談をいただくカスタマーサポートから、解決に向かうアプローチの「イロハ」をご紹介するビデオ

動画:Performance 101

5) 開発者コミュティのパフォーマンス関連情報(performanceタグ)

performanceタグ

1 0
0 418

弊社サポートセンターに、「IRIS SQLに Oracle の RANK() 関数のようものはありませんか?」というお問い合わせいただくことがあります。

IRIS2021.1以降のバージョンであれば、RANK() や ROW_NUMBER() などの ウィンドウ関数 がサポートされるようになりましたので、以下のように使用することができます。

1 0
0 257

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

InterSystems製品のクラスクエリにはSQL文を利用する方法と、ユーザコードによる記述が選択できます。

スタジオメニューの [クラス] >[追加] > [クエリ] を選択すると、クエリウィザードが起動します。


画面に、「実装」を選択する項目があり、「このクエリはユーザコードで定義されている」を選択すると SQL文ではなく、ユーザコードによりクエリ定義が行えます。

1 0
0 474

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

SELECT ... FOR UPDATE は明示的な行ロック取得の方法として多くの RDBMS で実装されているため、この機能を使われているケースも多いと思います。

このシンタックスは InterSystems 製品ではエラーにはなりませんが、期待されるような行ロックの取得は行われません。

この記事では同等の機能を実現する方法をご紹介します。

DECLARE CURSOR C1 IS
SELECT Name FROM Person WHERE Name LIKE 'A%' FOR UPDATE
OPEN C1
LOOP FETCH C1 INTO name 
... name を表示
... 終了ならLOOPをEXIT
END LOOP
CLOSE C1

上記のようなSQL文は、下記のSQL文で代替可能です。

※下記2行目のUPDATE文の実行により対象行に対して排他ロックがかかるため、他DBの動作と異なる点ご注意ください。

1 0
0 478

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

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

1 0
0 22

日付範囲クエリが極端に遅くなっていませんか?  SQLのパフォーマンスが低下していませんか?  皆様のお役に立ちそうな、変わったトリックをご紹介します!

データ追加時にタイムスタンプを記録するクラスがある場合、そのデータはIDKEYの値で順番に並べられます(具体的には、テーブル内のすべてのIDとTimeStampについてTimeStamp1 < TimeStamp2 が成立し、かつ ID1 < ID2 が成立する場合に限られています)。この知識を活かせば、TimeStampで範囲指定をする場合よりもクエリのパフォーマンスを向上させることができます。 次のテーブルについて考えてみましょう。

0 0
0 4.9K

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

連番を生成する関数($INCREMENT)を使用してユニークな番号を自動付番することができます。

SQLのSELECT文で使用する場合には OracleのSequence相当の機能を実装したクラスを利用する方法があります。

サンプルを以下のGitHubリポジトリより取得することができます。

OracleのSequence機能を実装するサンプル

0 0
0 451

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

永続クラス(=テーブル)定義に提供される %BuildIndices() メソッドの引数に、インデックスを再構築したい ID の開始値と終了値を指定することにより、その範囲内のインデックスのみが再構築できます。

例えば、Sample.Person クラスにある NameIDX インデックスと ZipCode インデックスを ID=10~20 のみ再構築する場合は、以下のように実行します(ID の範囲は、第5引数、第6引数に指定してます)。

0 0
0 430

より産業向けのグローバルストレージスキーム

この連載の第1回では、リレーショナルデータベースにおけるEAV(Entity-Attribute-Value)モデルを取り上げ、テーブルにエンティティ、属性、および値を保存することのメリットとデメリットについて確認しました。 このアプローチには柔軟性という点でメリットがあるにもかかわらず、特にデータの論理構造と物理ストレージの基本的な不一致などによりさまざまな問題が引き起こされるという深刻なデメリットがあります。

こういった問題を解決するために、階層情報の保存向けに最適化されたグローバル変数を、EAVアプローチが通常処理するタスクに使用できるかどうかを確認することにしました。

パート1では、オンラインストア向けのカタログをテーブルを使って作成し、その後で1つのグローバル変数のみで作成しました。 それでは、複数のグローバル変数で同じ構造を実装してみることにしましょう。

0 0
0 406

最近、LOAD DATA という素晴らしい新機能を使用することがありました。この記事では、初めて使用した際の体験についてお話しします。 以下の箇条書きには優先順がなく、他の評価も含まれません。 これらは、LOAD DATA コマンドを使用したときに私が気付いたことを記したものです。 また、プレビューリリースである IRIS バージョン 2021.2.0.617 を使用していることも記しておきたいと思います。 そのため、ここに記録されたことは、それ以降の IRIS バージョンに適用しない可能性があります。 それでも誰かのお役に立てるかもしれません。

0 0
0 328

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

バージョン2017.2以降から、CREATE TABLE文で作成したテーブル定義のデータを格納するグローバル変数の命名ルールが変わり ^EPgS.D8T6.1 のようなハッシュ化したグローバル変数名が設定されます。(この変更はパフォーマンス向上のために追加されました。)

※ バージョン2017.1以前については、永続クラス定義のルールと同一です。詳細は関連記事「永続クラス定義のデータが格納されるグローバル変数名について」をご参照ください。

以下のテーブル定義を作成すると、同名の永続クラス定義が作成されます。

0 0
0 294

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

クエリパフォーマンスを左右するクエリプランは、テーブルチューニングを行った結果の統計情報を元に生成されます。

ある環境で期待したプランになったけれど、他の環境では意図したプランにならない場合、(期待したプランとなる)既存環境からテーブル統計情報をエクスポートして別の環境にインポートし、同じ統計情報をもとにしたクエリプランで実行することができます。

0 0
0 203

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

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

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

0 0
0 12

優れた執筆者は、題名で読者を引き込み、答えを記事のどこかに隠すべきだと考えられています。 だとすると、私は出来の悪い執筆者ということになってしまいます。私の自尊心は見知らぬインターネットユーザーの皆さんのご意見にかかっていますので、お手柔らかにお願いします。

0 0
0 290

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

INFORMATION_SCHEMA スキーマを使用して取得できます。

INFORMATION_SCHEMA はシステム用スキーマのため、デフォルトでは管理ポータルの SQL メニューに表示されません。

表示させる方法は以下の通りです。

  1. 管理ポータル→システムエクスプローラ→SQL メニューを開きます。
  2. スキーマのプルダウン左にある「システム」をチェックします。
  3. スキーマのプルダウンから INFORMATION_SCHEMA を選択します。

0 0
0 301