グローバル構造
列指向ストレージによるテーブルでは、各列のデータセットが別々のグローバルに格納されます。列グローバルのそれぞれでは、行の値要素のデータ型がすべて同じで、64,000 行ごとに別々の添え字に "チャンク化" されます。これは、$BIT 値の格納方法と同様です。例えば、100,000 行で構成するテーブルでは、列グローバルごとに 2 つの添え字があります。1 番目の添え字には先頭の 64,000 行の値が格納され、2 番目の添え字には、残りの 36,000 行の値が格納されます。InterSystems IRIS では、特殊なベクトル・エンコーディングを使用して、同じデータ型のデータが効率的に格納されます。
前のセクションで定義した TransactionHistory テーブルに以下のレコードがあるとします。
SELECT AccountNumber,TransactionDate,Description,Amount,Type FROM Sample.TransactionHistory
AccountNumber |
TransactionDate |
Description |
Amount |
Type |
10001234 |
2022年2月22日 |
預金口座への預金 |
40.00 |
預金 |
10001234 |
2022年3月14日 |
ベンダへの支払い |
-20.00 |
引き出し |
10002345 |
2022年7月30日 |
当座預金への振り替え |
-25.00 |
振り込み |
10002345 |
2022年8月13日 |
預金口座への預金 |
30.00 |
預金 |
必要に応じて、管理ポータルで [システムエクスプローラ]、[グローバル] の順にクリックすることで、グローバル・ストレージ構造を検査できます。このテーブルが置かれたネームスペースで [SQLテーブル名を表示] を選択して、テーブルに対応するグローバルを探し出すことができます。詳細は、"グローバルの管理" を参照してください。
データ/マスタ・グローバルは、各行の添え字を格納し、行の操作に関与するデータの参照に使用されます。データは列ごとに別々のグローバルに格納されるので、各添え字の行は空です。以下のコードはデータ/マスタ・グローバルの例です。
^THist = 4
^THist はグローバルの名前です。ここに示した名前は説明を目的としたものにすぎません。DDL を使用して作成したテーブル、または USEEXTENTSET=1 パラメータを指定して永続クラスで作成したテーブルでは、^EW3K.B3vA.1 のような名前で、より効率的なハッシュ化したグローバルが生成されます。永続クラス・テーブルで USEEXTENTSET=1 を指定していない場合、グローバルの名前は ^TableNameD の形式になります。SQL テーブルの投影された永続クラスでは、Storage クラス・メンバの <DataLocation> 要素にグローバルが格納されます。例えば以下のようにします。
Storage Default
{
...
<DataLocation>^THist</DataLocation>
...
}
このテーブルには、各列に 1 つずつ、合計で 5 つの追加のグローバルがあり、その名前は ^THist.V1、^THist.V2 のような形式になっています。このグローバルのそれぞれには、1 つの列の各行の値がベクトル・エンコーディングで格納されています。これは、同じ型の値で機能して、スパース・データを効率的にエンコードするように設計された内部データ型です実際のエンコーディングは内部処理ですが、[グローバル] ページと ZWRITE などの情報コマンドによって、判読できる形式で以下の情報が提供されます。
-
データの型
-
列にある、NULL ではない要素の数
-
ベクトルの長さ
このテーブルの行数は 64,000 未満なので、各列グローバルにある添え字は 1 つのみです。ここに示した各グローバルのデータは、読みやすくするために切り詰めています。
^THist.V1(1) = {"type":"integer", "count":4, "length":5, "vector":[,10001234,...]}
^THist.V2(1) = {"type":"integer", "count":4, "length":5, "vector":[,66162,...]}
^THist.V3(1) = {"type":"string", "count":4, "length":5, "vector":[,"Deposit to Savings",...]}
^THist.V4(1) = {"type":"decimal", "count":4, "length":5, "vector":[,40,...]}
^THist.V5(1) = {"type":"string", "count":4, "length":5, "vector":[,"Deposit",...]}
この列グローバルを 200,000 行のテーブルで作成すると、要素が 64,000 個の 3 つの添え字と要素が 8,000 個の 1 つの添え字にデータが分散します。列には NULL 値が存在するので、要素の数はグローバルの長さよりも小さくなります。
^MyCol.V1(1) = {"type":"integer", "count":63867, "length":64000, "vector":[,1,1,1,,...]}
^MyCol.V1(2) = {"type":"integer", "count":63880, "length":64000, "vector":[1,1,1,,1,...]}
^MyCol.V1(3) = {"type":"integer", "count":63937, "length":64000, "vector":[1,1,1,2,2,...]}
^MyCol.V1(4) = {"type":"integer", "count":7906, "length":8000, "vector":[1,1,1,,2,...]}