記事 Toshihiko Minamoto · 2022年2月24日 5m read 2021.2 SQL 機能スポットライト - ランタイムプランの選択 InterSystems IRIS Data Platform の 2021.2 リリースには、ミッションクリティカルなアプリケーションを高速で柔軟性に優れ、セキュアに開発するための刺激的な新機能が多数含まれています。 Embedded Python は間違いなく脚光を浴びています(正当な理由で!)が、SQL の分野でも、テーブルデータに関する詳細な統計情報を収集し、それを最適なクエリプランに提供する、より適応性の高いエンジンに向けて大きな一歩を踏み出しました。 この短い連載記事では、2021.2 で新しく追加された 3 つの要素について詳しく説明し、ランタイムプランの選択(RTPC)を手始めに、この目標に向かって進みます。 これらについて適切な順序で話していくのは困難です(この記事を書く上で、私がどれだけ順序を入れ替えたか想像できないほどです!) というのも、これらが相互に非常にうまく機能するためです。 そのため、ご自由に順序を変えてお読みください。 #SQL #リレーショナルテーブル #InterSystems IRIS 0 0 1 84
記事 Toshihiko Minamoto · 2021年3月1日 11m read グローバルをクラスにマッピングする技術 (4/3) グローバルをクラスにマッピングする技術 (4/3) 三連載のはずが 4 記事目に突入してしまいました。『銀河ヒッチハイク・ガイド』のファンという方はいませんか? 古くなった MUMPS アプリケーションに新たな生命を吹き込みたいとお考えですか? 以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。 上の内容に馴染みが無い方は、以下の記事を初めからお読みください。 グローバルをクラスにマッピングする技術 (1/3) グローバルをクラスにマッピングする技術 (2/3) グローバルをクラスにマッピングする技術 (3/3) #マッピング #SQL #オブジェクトデータモデル #グローバル #Caché 0 0 0 83
記事 Toshihiko Minamoto · 2022年3月1日 5m read 2021.2 SQL 機能スポットライト - スマートサンプリング & テーブル統計の自動化 これは、適応性とパフォーマンスに優れた SQL エクスペリエンスを提供する 2021.2 SQL 強化機能に関する連載第 2 回目の記事です。 この記事では、前の記事で説明したランタイムプランの選択機能の主要な入力であるテーブル統計の収集におけるイノベーションに焦点を当てます。 #SQL #リレーショナルテーブル #InterSystems IRIS 0 0 1 82
記事 Toshihiko Minamoto · 2021年2月25日 9m read グローバルをクラスにマッピングする技術 (3/3) 古くなった MUMPS アプリケーションに新たな生命を吹き込みたいとお考えですか? 以下にご紹介するステップを実行すれば、グローバルをクラスにマッピングし、美しいデータを Object や SQL に公開できます。 上の内容に馴染みが無い方は、以下の記事を初めからお読みください。 グローバルをマッピングする技術 1 グローバルをマッピングする技術 2 この記事の例では、典型的な親子構造をマッピングする方法をお見せします。 前回と同じ免責事項: これらの記事を読んでもグローバルがよく理解できないという方は、WRC (Support@InterSystems.com) までメールでお問い合わせください。喜んでサポートさせていただきます。 #マッピング #SQL #グローバル #Caché 1 0 0 81
記事 Megumi Kakechi · 2023年4月11日 4m read TIMESTAMP型の項目に対して、TO_CHAR() や TO_DATE() を用いた SELECT を実行するとエラーになります これは InterSystems FAQ サイトの記事です。 Question: TIMESTAMP型の項目に対して、TO_CHAR() や TO_DATE() を用いた SELECT を実行すると以下のエラーになります。 実行SQL: #SQL #ヒントとコツ #InterSystems IRIS #InterSystems IRIS for Health 2 0 0 73
記事 Toshihiko Minamoto · 2021年3月4日 10m read グローバルをクラスにマッピングする技術 (5/3) マッピングの例 三連載で 4 記事目を書いてしまったら、これまでのハイライトとして 5 記事目を書かないわけにはいかないでしょう! 注意: 何年か前に Dan Shusman 氏が私に「グローパルのマッピングは芸術だ」と言いました。 そのやり方に正解も不正解もありません。 どのようなマッピングを行うかは、データをどう解釈するかで決まります。 例のごとく、最終的な結論を出す方法は 1 つに限られません。 ここでご紹介する例の中には、同じ型のデータを異なる方法でマッピングする例がいくつかあります。 この記事の最後には、私が長年お客様のために書いてきたマッピングの例をまとめた zip ファイルをご用意しています。 過去 4 つの記事で触れた内容をまとめたハイライトとして、いくつか例を挙げていきたいと思います。 この記事は単なるハイライトですので、過去 4 記事ほどの詳細はカバーいたしません。 不明な点があれば、遠慮なくご連絡ください。もっと詳しく説明させていただきます。 #マッピング #SQL #オブジェクトデータモデル #Caché 1 0 0 71
記事 Toshihiko Minamoto · 2021年3月22日 5m read Outlier Selectivity (外れ値の選択性) について Caché 2013.1 より、InterSystems は特殊な値を持つフィールドが使われるクエリプランのセレクションを改善する目的で Outlier Selectivity (外れ値の選択性) を導入しました。 この記事では、「Project」テーブルを例に使い、Outlier Selectivity の概要やそれが SQL のパフォーマンスを向上させる仕組み、またクエリを書く際の注意点などについて解説したいと思います。 Selectivity (選択性) まずは、Selectivity についてさっと説明します。 Selectivity とは、テーブル内の 1 つの列の中にある値に関するメタ情報のことです。 データが典型的なかたちで分布されていると想定した場合、「このテーブル内のこの列に特定の値を持つすべての行を要求するとしたら、通常取得できるのはテーブル内のどの程度の割合であろうか?」という疑問の答えとなる情報です。 #SQL #Caché 0 0 0 70
記事 Toshihiko Minamoto · 2021年4月12日 24m read アトミックでない属性のインデックス作成 (1NF/2NF/3NF)露 からの引用行と列で特定される位置には、それぞれアプリケーションドメインの値が 1 つだけあります (それ以外は何もない)。 その目的によって、同じ値がアトミックであったり、なかったりします。 例えば、「4286」という値は、 「クレジットカードの PIN コード」を意味するのであれば、アトミックとなります (破損している場合や並び替えられている場合は、使用できません)。 単に「連続する番号」であれば、非アトミックとなります (いくつかに分割されていたり、並び替えられていても、値は意味を成します)。 この記事では、文字列や日付、($LB 形式の) 単純なリスト、「list of <...>」、「array of <...>」といったフィールドの型を伴う SQL クエリのパフォーマンスを向上させる標準的な方法にして検証します。 #ObjectScript #SQL #インデックス付け #オブジェクトデータモデル #パフォーマンス #Caché 0 1 0 69
記事 Mihoko Iijima · 2023年2月21日 3m read InterSystems Developer Hub:クリック1回で開始できるチュートリアル(4種)のご紹介 開発者の皆さん、こんにちは! 開発者向け情報を集めた「Developer Hub」ページが新たに登場しました! このページには、4種類のチュートリアルが用意されています。チュートリアはブラウザ上で動作し、VSCodeやIRISターミナル、管理ポータルなどチュートリアルで使用するすべての画面が1つのタブ内で開くようになっています。 チュートリアルを試すための事前準備は不要で、クリック1回ですぐにお試しいただけます!(ユーザ登録も不要です)(チュートリアル開始方法は、ページ末尾をご覧ください。) #ObjectScript #Python #REST API #SQL #チュートリアル #初心者 #機械学習 #相互運用性 #InterSystems IRIS #InterSystems IRIS for Health 2 0 0 69
記事 Megumi Kakechi · 2022年6月29日 1m read ODBCツール等からアクセスした際に表示されるカラム順を制御する方法 これは InterSystems FAQ サイトの記事です。 デフォルトではテーブルのカラムの順番はシステムが自動的に決定します。 順番を変更するにはクラス定義を行う際にプロパティ・キーワード SqlColumnNumber でプロパティ毎に明示的に順番を設定してください。 例: Property Name As %String [SqlColumnNumber = 2]; ドキュメントは以下をご参照ください。 #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 66
記事 Hiroshi Sato · 2022年3月23日 2m read 現在使っているリレーショナルデータベースからInterSystems IRIS Data Platformに移行することは可能ですか? 質問 現在使っているリレーショナルデータベースからInterSystems IRIS Data Platformに移行することは可能ですか? 答え InterSystems IRIS Data Platform(以下IRISと表記)は、SQLをサポートしていますので、多くの場合リレーショナルデータベースで構築されたアプリケーションは、大部分のコードを変更することなくIRISに移行することができます。 ただしSQLの各実装毎にSQL標準を拡張した仕様等があり、それにIRISが全て対応していませんので、コードの書き換えが必要なケースもあります。 また各実装が独自に用意した標準でない通信系API等にも対応していませんので、その場合にはJDBC、ODBCなどの標準的な通信APIに置き換える必要があり、かなり書き換えが必要になります。(使用されているSQL文等はそのまま流用可能な場合が多いです。) さらにそのままコードを移行できるケースであっても動作保証はできませんので、必ず動作確認のためのテスト作業は必要になります。 #SQL #ヒントとコツ #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 65
記事 Megumi Kakechi · 2023年2月2日 2m read 並列クエリについて(%PARALLEL) これは InterSystems FAQ サイトの記事です。 クエリパフォーマンスを最適化するための方法の一つとして、クエリ単位またはシステム全体でクエリの並列処理を使用することができます(標準機能)。 こちらは、特定のクエリに対しマルチプロセッサシステムでクエリの実行をプロセッサ間で分割して行うものです。並列処理の効果が得られる可能性がある場合のみ、クエリオプティマイザは並列処理を実行します。並列処理の対象はSELECT文のみとなります。 なお、並列プロセスの数は、CPUの数に応じて自動で調整するため、数の指定は行えません。現在のシステムのプロセッサ数は以下のコマンドで確認することができます。 #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 64
記事 Toshihiko Minamoto · 2021年9月30日 16m read Caché 2016.2のドキュメントデータモデルの紹介 はじめに Caché 2016.2のフィールドテストはかなり前から利用可能ですので、このバージョンで新しく追加されたドキュメントデータモデルという重要な機能に焦点を当てたいと思います。 このモデルは、オブジェクト、テーブル、および多次元配列など、データ処理をサポートするさまざまな方法として自然に追加されました。 プラットフォームがより柔軟になるため、さらに多くのユースケースに適したものになります。 #JSON #SQL #データモデル #ドキュメントデータモデル(NoSQL) 1 0 0 61
記事 Toshihiko Minamoto · 2022年12月8日 5m read InterSystems IRIS における一意のインデックスと null 値 一意のインデックスにまつわる興味深いパターンが最近持ちあがったので(isc.rest に関する内部ディスカッション)、コミュニティ向けに強調したいと思います。 動機付けのユースケースとして: ツリーを表すクラスがあるとします。各ノードには名前があるため、名前と親ノードでノードを一意にしたいと考えています。 各ルートノードにも一意の名前を持たせます。 この場合の自然な実装は以下のようになります。 #SQL #インデックス付け #Caché #InterSystems IRIS 0 0 0 60
記事 Mihoko Iijima · 2023年2月14日 4m read irissqlcli(IRIS SQLの高度なターミナル):InterSystemsデベロッパーツールコンテスト2023入賞作品のご紹介 開発者の皆さん、こんにちは! InterSystems デベロッパーツールコンテスト2023が開催され、21の応募作品の中から勝者が発表されました🏆 この記事では、世界のIRIS開発者の皆さんから注目を集めた作品をご紹介します。 最初は、Experts Nomination 第1位に輝いた @Dmitry Maslennikov さんの作品をご紹介します! #SQL #ツール #InterSystems IRIS #InterSystems IRIS for Health #IRIS contest 0 0 0 58
記事 Mihoko Iijima · 2021年7月5日 1m read Extent クエリの結果が ID 順にならないわけ これは InterSystems FAQ サイトの記事です。 %Persistent クラスに既定で生成される Extent クエリは、ID 順に結果セットを出力することを意図していませんので、これは、仕様通りの動きとなります。 並び順は、設定されているインデックスにより、変わることがあります。 #SQL #ヒントとコツ #Caché #Ensemble #HealthShare #iKnow #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 56
記事 Toshihiko Minamoto · 2022年8月25日 2m read クラス/テーブルのサイズ情報を計算する その昔、クラス/テーブルのデータ、ストリーム、インデックスのサイズを判断するのは簡単なことでした。%GSIZE を実行して、D、S、I グローバルをそれぞれ確認するだけで済みました。 ところが最近では、シャーディングや、最適化されたグローバル名、分離されたグローバルのインデックスでは以下のような %GSIZE 出力が生成されます。 #SQL #シャーディング #InterSystems IRIS Open Exchange app 1 0 0 53
記事 Tomoko Furuzono · 2023年4月11日 3m read データ更新中に、インデックスの再構築を実行する これは、InterSystems FAQサイトの記事です。データの登録/更新/削除を実行中でも、インデックスを再構築することは可能です。ただし、再構築中は更新途中の状態で参照されますので、専用ユーティリティを使用することをお勧めします。手順は以下の通りです。 追加予定のインデックス名をクエリオプティマイザから隠します。 インデックス定義を追加し、再構築を実施します。 再構築が完了したら、追加したインデックスをオプティマイザに公開します。 実行例は以下の通りです。Sample.Person の Home_State(連絡先住所の州情報)カラムに対して標準インデックス HomeStateIdx を定義する目的での例で記載します。 1、追加予定のインデックス名を Caché のクエリオプティマイザから隠します。 #SQL #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 46
記事 Mihoko Iijima · 2023年4月10日 4m read テーブル定義のデータが格納されるグローバル変数名について これは InterSystems FAQ サイトの記事です。 バージョン2017.2以降から、CREATE TABLE文で作成したテーブル定義のデータを格納するグローバル変数の命名ルールが変わり ^EPgS.D8T6.1 のようなハッシュ化したグローバル変数名が設定されます。(この変更はパフォーマンス向上のために追加されました。) ※ バージョン2017.1以前については、永続クラス定義のルールと同一です。詳細は関連記事「永続クラス定義のデータが格納されるグローバル変数名について」をご参照ください。 以下のテーブル定義を作成すると、同名の永続クラス定義が作成されます。 #SQL #データベース #ヒントとコツ #Caché #Ensemble #HealthShare #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 38
記事 Megumi Kakechi · 2023年5月1日 5m read 一時グローバルと IRISTEMP データベースについて IRISTEMPというデータベースをご存じでしょうか? 特定の処理に対してデータを無期限に保存する必要がなく、「同一プロセス内でのみ使用したい場合」や「IRISが起動中のみ使用したい場合」に、IRISTEMPデータベースに保存されるグローバルを使用できます。IRISTEMPデータベースに保存されるグローバルに対する操作は ”一切ジャーナルされない” ため、効率性を最大限にしたい作業に使用できます。 IRISTEMPデータベースに保存されるグローバル(データ)には、以下の種類があります。 #ObjectScript #SQL #ヒントとコツ #InterSystems IRIS #InterSystems IRIS for Health 1 0 1 38
記事 Toshihiko Minamoto · 2022年3月2日 5m read 2021.2 SQL 機能スポットライト - 高度なテーブル統計 これは、IRIS でリレーショナルデータをクエリするアナリストとアプリケーションに、さらに優れた適応性とパフォーマンスによるエクスペリエンスを提供する IRIS SQL のイノベーションをトピックとした短い連載の 3 つ目の記事です。 2021.2 では連載の最後の記事になるかもしれませんが、この分野ではさらにいくつかの機能強化が行われています。 この記事では、このリリースで収集し始めたヒストグラムという追加のテーブル統計について、もう少し詳しく説明します。 #SQL #リレーショナルテーブル #InterSystems IRIS 0 0 0 38
記事 Toshihiko Minamoto · 2023年2月8日 7m read 2020.1 の新機能: ユニバーサルクエリキャッシュ InterSystems IRIS 2020.1 には、重要なアプリケーションの構築を支援する新機能と機能改善が多数盛り込まれています。 2019.1 から 2020.1 までに行われた多数の大幅なパフォーマンス改善のほかに、最近の SQL の歴史において最も大きな変更点の 1 つであるユニバーサルクエリキャッシュ(UQC)が導入されています。 この記事では、SQL ベースのアプリケーションに対するそのインパクトについて、技術的な観点で詳しく説明しています。 #SQL #InterSystems IRIS 1 0 0 37
記事 Megumi Kakechi · 2023年3月28日 3m read テーブル名、カラム名、インデックス名の変更方法 これは InterSystems FAQ サイトの記事です。 テーブル名/カラム名/インデックス名を変更したい場合、以下のケース別に変更方法をご案内します。 A. テーブル名・カラム名の変更B. インデックス名の変更 -------------------------------------------------------------------------A. テーブル名・カラム名の変更する方法------------------------------------------------------------------------- #ObjectScript #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 35
記事 Mihoko Iijima · 2023年4月4日 7m read PythonからNativeAPIを利用してIRISに接続する AWS Lambda関数を作成するまでの流れ 開発者の皆さん、こんにちは。 Python Native APIを利用すると、IRISにあるグローバル変数の参照/更新をPythonから行えたり、メソッドやルーチンをPythonから実行することができます。 この記事では「AWS Lambda の IRIS Python Native API IRIS」の記事を参考に、NativeAPIを利用してPythonからIRISに接続するAWS Lambda関数を作成する流れで必要となる、レイヤー作成と関数用コードの作成例をご紹介します。 ※ 事前にAWSのEC2インスタンス(Ubuntu 20.04を選択)にIRISをインストールした環境を用意した状態からの例でご紹介します。 #AWS #Python #SQL #グローバル #InterSystems IRIS #InterSystems IRIS for Health 0 0 0 35
記事 Toshihiko Minamoto · 2023年4月26日 6m read 2022.3 のカラムナーストレージ Global Summit 2022 または 2022.2 ローンチウェビナーの内容からよく覚えていると思いますが、InterSystems IRIS の分析ソリューションに組み込むための目覚ましい新機能をリリースしようとしています。 分析クエリを桁違いに高速化する、代替の SQL テーブルデータ格納手法であるカラムナー(列指向)ストレージです。 もともと 2022.2 の実験的機能としてリリースされましたが、最新の 2022.3 開発者プレビューには多数の更新が含まれているため、別途ここで簡単に説明したいと思います。 #SQL #InterSystems IRIS Open Exchange app 0 0 0 35
記事 Megumi Kakechi · 2023年2月23日 3m read IRIS SQLクエリで取得した結果セットのランキング(順位)を算出する方法 弊社サポートセンターに、「IRIS SQLに Oracle の RANK() 関数のようものはありませんか?」というお問い合わせいただくことがあります。 IRIS2021.1以降のバージョンであれば、RANK() や ROW_NUMBER() などの ウィンドウ関数 がサポートされるようになりましたので、以下のように使用することができます。 #SQL #ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health 1 0 0 33
記事 Toshihiko Minamoto · 2023年5月2日 5m read カラムナーストレージを使用するケース InterSystems 2022.2 では、IRIS SQL テーブルを永続化する新しいオプションとして、分析クエリを桁違いに向上させられるカラムナーストレージを導入しました。 2022.2 と 2022.3 ではこの機能は実験的としてマークされていますが、次の 2023.1 リリースでは、完全にサポートされた本番機能に「卒業」する予定です。 製品ドキュメントとこの紹介動画では、IRIS では現在でもデフォルトであり、全顧客ベースで使用されている行ストレージと、このカラムナーストレージの違いがすでに説明されており、ユースケースに適切なストレージレイアウトの選択方法に関する大まかなガイダンスが提供されています。 この記事では、このテーマについて詳しく説明し、業界で実践されているモデリング原則、内部テスト、および早期アクセスプログラム参加者からのフィードバックに基づく推奨事項をいくつか紹介します。 #SQL #分析 #InterSystems IRIS 0 1 0 22