記事 Toshihiko Minamoto · 2021年9月14日 10m read リレーショナルデータベースにおけるEntity-Attribute-Valueモデル。 グローバル変数はテーブルでエミュレートする必要がありますか? パート2. より産業向けのグローバルストレージスキーム この連載の第1回では、リレーショナルデータベースにおけるEAV(Entity-Attribute-Value)モデルを取り上げ、テーブルにエンティティ、属性、および値を保存することのメリットとデメリットについて確認しました。 このアプローチには柔軟性という点でメリットがあるにもかかわらず、特にデータの論理構造と物理ストレージの基本的な不一致などによりさまざまな問題が引き起こされるという深刻なデメリットがあります。 こういった問題を解決するために、階層情報の保存向けに最適化されたグローバル変数を、EAVアプローチが通常処理するタスクに使用できるかどうかを確認することにしました。 パート1では、オンラインストア向けのカタログをテーブルを使って作成し、その後で1つのグローバル変数のみで作成しました。 それでは、複数のグローバル変数で同じ構造を実装してみることにしましょう。 #SQL #グローバル #データベース #パフォーマンス #ヒントとコツ #リレーショナルテーブル #非構造化データ #Caché #InterSystems IRIS #InterSystems IRIS for Health Open Exchange app 0 0 0 191
記事 Tomoko Furuzono · 2020年9月17日 17m read SQLクエリパフォーマンスの監視 Caché 2017以降のSQLエンジンには新しい統計一式が含まれています。 これらの統計は、クエリの実行回数とその実行所要時間を記録します。 これは、多くのSQLステートメントを含むアプリケーションのパフォーマンスを監視する人や最適化を試みる人にとっては宝物のような機能ですが、一部の人々が望むほどデータにアクセスするのは簡単ではありません。 #SQL #パフォーマンス #監視 #Caché #InterSystems IRIS 0 0 0 186
記事 Tomoko Furuzono · 2020年9月7日 6m read フリーテキスト検索:SQL開発者が秘密にしているテキストフィールドの検索方法* アプリケーションに、効率的に検索したいフリーテキストを含むフィールドがありますか?これまで複数の方法を試してみたものの、顧客が要求するパフォーマンスを満たせなかった経験はありませんか?私は変わった手段を使ってあらゆる問題を解決できると思っていませんか。もうご存じですよね。私ができるのは、パフォーマンス低下に対処する優れたソリューションを提供することです。 #iFind #オブジェクトデータモデル #ObjectScript #SQL #インデックス付け #Caché #InterSystems IRIS 0 0 0 182
記事 Tomoko Furuzono · 2022年3月29日 1m read プログラムでCSVファイルを1行ずつ読み込む方法 これは、InterSystems FAQサイトの記事です。 %SQL.Util.Proceduresクラスの CSV() プロシジャを使用することにより、実現できます。下記が使用例のコードとなります。(test.csvというファイルが c:\temp にあるという前提) #ObjectScript #SQL #Caché #InterSystems IRIS 0 0 0 174
記事 Toshihiko Minamoto · 2022年4月1日 7m read InterSystems IRIS の新しい埋め込み SQL #SQL #InterSystems IRIS 0 0 0 168
記事 Minoru Horita · 2020年12月14日 14m read 知っておくと便利なクエリパフォーマンスのコツ - Tune Table 優れた執筆者は、題名で読者を引き込み、答えを記事のどこかに隠すべきだと考えられています。 だとすると、私は出来の悪い執筆者ということになってしまいます。私の自尊心は見知らぬインターネットユーザーの皆さんのご意見にかかっていますので、お手柔らかにお願いします。 #SQL #パフォーマンス #Caché #InterSystems IRIS 0 0 0 154
記事 Toshihiko Minamoto · 2021年4月19日 8m read 配列プロパティ要素のための SQL インデックス クラスの中で配列プロパティを使い、その要素 (キーと値の両方) によってスピーディに検索を実行できると非常に便利な場合があります (EAV モデルの場合は特に重宝します)。 それでは、簡単な例を見てみましょう。 #ObjectScript #SQL #インデックス付け #パフォーマンス #Caché 1 0 0 152
記事 Megumi Kakechi · 2020年12月15日 1m read プログラムでクエリキャッシュを削除する方法 これはInterSystems FAQ サイトの記事です。 %SYSTEM.SQL クラスの Purge* メソッドを使用して削除することが可能です。 ※各メソッドの詳細は、以下ドキュメントをご参照ください。 %SYSTEM.SQLクラスについて【IRIS】 %SYSTEM.SQLクラスについて #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 150
記事 Toshihiko Minamoto · 2021年12月7日 31m read MLとIntegratedMLでCovid-19のICU入室予測を実行する(パート1) キーワード: IRIS、IntegratedML、機械学習、Covid-19、Kaggle 目的 最近、Covid-19患者がICU(集中治療室)に入室するかどうかを予測するKaggleデータセットがあることに気づきました。 231列のバイタルサインや観測で構成される1925件の遭遇記録が含まれる表計算シートで、最後の「ICU」列では「Yes」を示す1と「No」を示す0が使用されています。 既知のデータに基づいて、患者がICUに入室するかどうかを予測することがタスクです。 このデータセットは、「従来型ML」タスクと呼ばれるものの良い例のようです。 データ量は適切で、品質も比較的適切なようです。 IntegratedMLデモキットに直接適用できる可能性が高いようなのですが、通常のMLパイプラインと潜在的なIntegratedMLアプローチに基づいて簡易テストを行うには、どのようなアプローチが最も単純なのでしょうか。 範囲 次のような通常のMLステップを簡単に実行します。 #AI #IntegratedML #SQL #機械学習 #InterSystems IRIS Open Exchange app 0 0 0 148
記事 Hiroshi Sato · 2020年12月8日 1m read SQLでユニークな番号を自動付番する方法 これはInterSystems FAQ サイトの記事です。 連番を生成する関数($INCREMENT)を使用してユニークな番号を自動付番することができます。 SQLのSELECT文で使用する場合には OracleのSequence相当の機能を実装したクラスを利用する方法があります。 サンプルを以下のGitHubリポジトリより取得することができます。 OracleのSequence機能を実装するサンプル #SQL #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 143
記事 Mihoko Iijima · 2021年3月5日 1m read ID を指定してインデックスを再構築する方法 これは InterSystems FAQ サイトの記事です。 永続クラス(=テーブル)定義に提供される %BuildIndices() メソッドの引数に、インデックスを再構築したい ID の開始値と終了値を指定することにより、その範囲内のインデックスのみが再構築できます。 例えば、Sample.Person クラスにある NameIDX インデックスと ZipCode インデックスを ID=10~20 のみ再構築する場合は、以下のように実行します(ID の範囲は、第5引数、第6引数に指定してます)。 #SQL #インデックス付け #オブジェクトデータモデル #ヒントとコツ #リレーショナルテーブル #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 141
記事 Mihoko Iijima · 2021年2月12日 3m read SQL から ObjectScript で記述したプログラムを実行して値を返す方法 これは InterSystems FAQ サイトの記事です。 以下例のクラスメソッド getLatestID() のように ObjectScript のクラスメソッドを用意します。返したい値を戻り値に指定し、SQLストアドプロシージャ(SqlProc)キーワードを指定するだけで値が返せます。 ClassMethod getLatestID() As %Integer [ SqlName = getLatestID, SqlProc ] { set latestID=$Order(^ISJ.TestClass1D(""),-1) quit latestID } 操作を試す場合は、以下のクラス定義をご準備ください。 #ObjectScript #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 138
記事 Mihoko Iijima · 2021年9月14日 1m read 管理ポータルから任意のSQL実行結果をCSVファイルに出力する方法 これは InterSystems FAQ サイトの記事です。 管理ポータルの SQL 画面(管理ポータル > システムエクスプローラ > SQL)で、任意の SQL を実行した後、結果の行数などが表示されいる行の右端にある「印刷」のリンクから、CSVファイル出力を選択できます。 「クエリ印刷」画面で「ファイルにエクスポート」をチェックすると「ファイル形式」の欄が表示されます。 形式に「CSV」を指定し、出力ファイル名を指定したあと「エクスポート」ボタンをクリックすると出力できます。 注意:古いバージョンでは正しくCSV出力が行えない場合もあります。新しいバージョンをぜひご利用ください。 #SQL #ヒントとコツ #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 132
記事 Toshihiko Minamoto · 2020年10月19日 5m read SQL パフォーマンスリソース SQL パフォーマンスリソース SQL のパフォーマンスについて語るとき、最も重要なトピックとして取り上げられるのが「Indices」、「TuneTable」、「Show Plan」の 3 つです。 添付の PDF にはこれらのトピックに関する過去のプレゼン資料が含まれていますので、それぞれの基礎を一度に確認していただけます。 当社のドキュメンテーションでは、これらのトピックの詳細に加え、SQL パフォーマンスの他のトピックについてもカバーしておりますので、下のリンクからお読みください。 eラーニングをご利用いただくと、これらのトピックをもっと深く理解していただけます。 また、開発者コミュニティによる記事の中にも SQL パフォーマンスについて書かれたものが複数ありますので、関連するリンクを下に記載しております。 下に記載する情報には同じ内容が多く含まれています。 SQL パフォーマンスにおける最も重要な要素を以下に紹介します。 利用可能なインデックスの種類 あるインデックスの種類を他の種類の代わりに使用する TuneTable がテーブルに集める情報とそれが Optimizer に対して意味する内容 Show Plan を読んでクエリの善し悪しを深く理解する方法 #SQL #パフォーマンス #InterSystems IRIS 0 0 0 132
記事 Mihoko Iijima · 2021年8月30日 2m read クエリをチューニングする方法 これは InterSystems FAQ サイトの記事です。 InterSystems 製品には、テーブルのコンテンツに関する統計を収集し、クエリの最適化に役立てる「テーブルチューニング機能」があります。 設定方法は、以下のドキュメントをご参照ください。 テーブルのチューニングについて【IRIS】 テーブルのチューニングについて ターミナルでは次のコマンドを実行します。 Do $system.SQL.TuneTable("<テーブル名>",0,1) また、以下の資料もご参照ください。 1) パフォーマンス調査の基礎知識として必要なグローバル構造の解説やSQLの動作の仕組みからクエリプランの見方の解説 インターシステムズ・シンポジア2011の資料 2) パフォーマンスチューニングの例(P13~) インターシステムズ・シンポジア2012の資料 3) ビットマップ・インデックスの圧縮やオプティマイザ・ヒントなど、Caché SQLのパフォーマンスを最大限に引き出すための情報について インターシステムズ・シンポジア2014の資料 4) パフォーマンスに困ったときにどこに着目し、どのツールで調べていくか、お客様から日々ご相談をいただくカスタマーサポートから、解決に向かうアプローチの「イロハ」をご紹介するビデオ 動画:Performance 101 5) 開発者コミュティのパフォーマンス関連情報(performanceタグ) performanceタグ #SQL #パフォーマンス #ヒントとコツ #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 130
記事 Toshihiko Minamoto · 2020年12月23日 3m read 動的SQLの新旧対照表 新しい動的 SQL クラス(%SQL.Statement および %StatementResult)のパフォーマンスは %ResultSet より優れてはいますが、%ResultSet の使用方法をせっかく学習したので、しばらくの間新しい方を使用せずにいましたが、 やっとチートシートを作ったので、新しいコードを書いたり古いコードを書き直す際に役立てています。 皆さんのお役に立てればいいなと思っています。 次に示すのは、私のチートシートの詳細版です。 #Code Snippet #SQL #ベストプラクティス #Caché 0 0 0 129
記事 Tomoko Furuzono · 2022年3月29日 1m read SQLでのNULLデータの取り扱い これは、InterSystems FAQサイトの記事です。 SQLの場合、NULLデータと空文字列 ('')は区別されます。それぞれの設定・確認方法は、以下のようになります。 (1) NULLデータ 【SQL】 insert into test (a) values (NULL)select * from test where a IS NULL 【InterSystems ObjectScript】 set x=##class(User.test).%New()set x.a="" (2) 空文字列 ('') 【SQL】 #ObjectScript #SQL #Caché #InterSystems IRIS 0 0 0 128
記事 Toshihiko Minamoto · 2022年5月10日 4m read まったく新しい LOAD DATA コマンドのコツとヒント 最近、LOAD DATA という素晴らしい新機能を使用することがありました。この記事では、初めて使用した際の体験についてお話しします。 以下の箇条書きには優先順がなく、他の評価も含まれません。 これらは、LOAD DATA コマンドを使用したときに私が気付いたことを記したものです。 また、プレビューリリースである IRIS バージョン 2021.2.0.617 を使用していることも記しておきたいと思います。 そのため、ここに記録されたことは、それ以降の IRIS バージョンに適用しない可能性があります。 それでも誰かのお役に立てるかもしれません。 #CSV #JDBC #SQL #コンテスト #ヒントとコツ #InterSystems IRIS Open Exchange app 0 0 0 123
記事 Mihoko Iijima · 2020年12月20日 3m read 揮発性テーブルのビットマップ・インデックスの圧縮(維持管理)方法 これは InterSystems FAQ サイトの記事です 揮発性テーブル(多数のINSERT、DELETEが行われるテーブル)では、ビットマップ・インデックス用ストレージは徐々に効率が低下する可能性があります。 例えば、以下の定義からなるデータが数千件あり、一定期間保持した後 TRUNCATE TABLE で一括削除を行うオペレーションが繰り返し行われているとします。 Class MyWork.MonthData Extends (%Persistent, %Populate) { /// 満足度 Property Satisfaction As %String(VALUELIST = ",満足,やや満足,やや不満,不満,"); /// 年齢 Property Age As %Integer(MAXVAL = 70, MINVAL = 20); Index AgeIdx On Age [ Type = bitmap ]; } #SQL #インデックス付け #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 119
記事 Toshihiko Minamoto · 2021年2月16日 8m read グローバルをクラスにマッピングする技術 1/3 グローバルをクラスにマッピングする技術 (1/3) グローバルをクラスにマッピングする技術 (1/3) 古くなった MUMPS アプリケーションに新たな生命を吹き込みたいとお考えですか? 以下にご紹介するステップを実行すれば、既存のグローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。 本記事を含む合計 3 回の連載を通じてご紹介する簡単なステップを使えば、すべてのグローバル (特殊なものは除く) を Caché のクラスにマッピングできるようになります。 特殊なものについては、私が長年に渡って集めた様々な種類のマッピングを zip ファイルにまとめて提供いたします。 これは新しいデータを対象としたステップではありません。グローバルがないという方は、デフォルトのストレージをお使いください。 #マッピング #SQL #グローバル #Caché 1 0 0 114
記事 Tomoko Furuzono · 2021年4月13日 1m read SQLクエリーの監査ログを取得する方法 これは、InterSystems FAQサイトの記事です。 SQLクエリーの文字列を監査ログに残すことができます。 詳細は、以下のドキュメントをご参照下さい。 システム監査イベントについて ※%SQLで始まるイベントをご覧ください。 InterSystems SQL の使用法 ※監査関連ページをご覧ください。 #SQL #Caché #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 111
記事 Toshihiko Minamoto · 2022年6月21日 3m read SQLgateway を使ったデータベース移行 @Yuri Marx のお陰で、非常に優れた Postgres から IRIS へのデータベース移行の例を確認できました。 私の個人的な問題は、DBeaver を移行ツールとして使用することです。特に、以前の IRIS(それから Caché)の強みの 1 つは、JBDC または ODBC でアクセスできる限り任意の外部 Db にアクセスできる SQLgateways を利用できることであったためです。 そこで、これを実演するために、パッケージを拡張しました。 #Docker #SQL # データのインポートとエクスポート #InterSystems IRIS Open Exchange app 0 0 0 107
記事 Toshihiko Minamoto · 2021年2月18日 9m read グローバルをクラスにマッピングする技術 (2/3) 古くなった MUMPS アプリケーションの新たな生命を吹き込みたいとお考えでしたら、以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。 今回ご紹介する例には、パート 1 ではカバーしなかった内容を 4 つないし 5 つ程度盛り込んでいます。 その後は親子マッピングの例を紹介して完結となります。それを修得したらマッピングはもう完璧でしょう。 前回と同じ免責事項: これらの記事を読んでもグローバルがよく理解できないという方は、WRC (Support@InterSystems.com) までメールでお問い合わせください。喜んでサポートさせていただきます。 グローバルをクラスにマッピングするステップ。 #マッピング #SQL #グローバル #Caché 1 0 0 104
記事 Hiroshi Sato · 2020年12月16日 2m read SQLインジェクションに対する対策 これはInterSystems FAQ サイトの記事です。 SQLインジェクションに関しては、様々なWebサイトで対策等が公開されていますが、InterSystems SQLを使ったアプリケーションでも、他のRDBMSと同様にそれらの対策を適切に実施することで、SQLインジェクションは防げると考えられます。 さらに、InterSystems Data Platform(以下IRIS)の場合、一般的なRDBMSに比較して、SQLインジェクションを実行しづらい、幾つかの施策が組み込まれています。 #SQL #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 96
記事 Toshihiko Minamoto · 2021年5月18日 12m read インデックス処理 第2部: インデックス処理 クラスにどのようなインデックスが必要であるのか、それをどのように定義するのかについて理解できたので、 次に、どのように処理するのかについて確認しましょう。 #SQL #インデックス付け #パフォーマンス #ベストプラクティス #Caché #InterSystems IRIS 0 0 0 93
記事 Megumi Kakechi · 2023年2月12日 3m read %TimeStamp型プロパティを使用した範囲指定のクエリが遅い場合の対処方法 これは InterSystems FAQ サイトの記事です。 日時検索で、TimeStamp型のクエリのパフォーマンスが出ない場合の対処法をご紹介します。 %TimeStamp データ型形式 (yyyy-mm-dd hh:mm:ss.ffff)は、人が読めることを目的とした ODBC 日付形式の文字列として格納されます。そのため、どうしてもデータサイズが大きくなりクエリの実行に時間がかかってしまいます。%TimeStamp型のプロパティにインデックスを作成している場合にも、クエリオプティマイザはそのインデックスを優先して最適化するようにはなっておりません。 #SQL #ヒントとコツ #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 93
記事 Mihoko Iijima · 2021年3月9日 1m read 指定テーブルの全フィールドをSQLで取得する方法 これは InterSystems FAQ サイトの記事です。 INFORMATION_SCHEMA スキーマを使用して取得できます。 INFORMATION_SCHEMA はシステム用スキーマのため、デフォルトでは管理ポータルの SQL メニューに表示されません。 表示させる方法は以下の通りです。 管理ポータル→システムエクスプローラ→SQL メニューを開きます。 スキーマのプルダウン左にある「システム」をチェックします。 スキーマのプルダウンから INFORMATION_SCHEMA を選択します。 #SQL #ヒントとコツ #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 92
記事 Megumi Kakechi · 2022年11月28日 2m read IRIS SQLでは OFFSET/LIMIT句のような機能をサポートしてますか? Question: IRISでは、PostgreSQLやMySQLで使うことができる、開始位置や取得件数を指定する OFFSET句やLIMIT句をサポートしているでしょうか? Answer: 残念ながらサポートしていません。ただ、代わりに使える同様の方法がありますのでご紹介します。 以下のようなSQLクエリをIRIS SQLで行うとします。 #SQL #ヒントとコツ #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 90
記事 Tomoko Furuzono · 2020年9月15日 14m read Cachéでのカスタムインデックスタイプの作成 Cachéデータベースのオブジェクトおよびリレーショナルデータモデルは、標準、ビットマップ #オブジェクトデータモデル #SQL #インデックス付け #データベース #Caché #InterSystems IRIS 0 0 0 84
記事 Megumi Kakechi · 2022年9月21日 2m read SQL ゲートウェイを使用した外部データベースへのアクセス方法について SQL ゲートウェイ接続を使用した、外部データベースへのアクセス方法についてご説明します。 手順は以下になります。 1. 外部ソースへの SQL ゲートウェイ接続の作成を行います ※こちらの例では、IRISの別インスタンスへの接続を試しています。 ※ODBCを使用される場合は、事前にシステムDSN(64bit)の準備が必要です。管理ポータルより [システム管理] > [構成] > [接続性] > [SQLゲートウェイ接続] の 新規接続作成 ボタンをクリックします。 接続の種類を選択し、必要項目を設定します。以下のサンプルは、ODBC接続(別IRISインスタンスのDSN設定)を行っています。 #JDBC #ODBC #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 84