テーブル定義のデータが格納されるグローバル変数名について
これは InterSystems FAQ サイトの記事です。
バージョン2017.2以降から、CREATE TABLE文で作成したテーブル定義のデータを格納するグローバル変数の命名ルールが変わり ^EPgS.D8T6.1 のようなハッシュ化したグローバル変数名が設定されます。(この変更はパフォーマンス向上のために追加されました。)
※ バージョン2017.1以前については、永続クラス定義のルールと同一です。詳細は関連記事「永続クラス定義のデータが格納されるグローバル変数名について」をご参照ください。
以下のテーブル定義を作成すると、同名の永続クラス定義が作成されます。
CREATETABLE Test.Product(
ProductID VARCHAR(10) PRIMARY KEY,
ProductName VARCHAR(50),
Price INTEGER
)永続クラス:Test.Productの定義は以下の通りです。(パラメータ:USEEXTENTSETに1が設定されます)
{
Property ProductID As %Library.String(MAXLEN = 10) [ SqlColumnNumber = 2 ];
Property ProductName As %Library.String(MAXLEN = 50) [ SqlColumnNumber = 3 ];
Property Price As %Library.Integer(MAXVAL = 2147483647, MINVAL = -2147483648) [ SqlColumnNumber = 4 ];
Parameter USEEXTENTSET = 1;
/// Bitmap Extent Index auto-generated by DDL CREATE TABLE statement. Do not edit the SqlName of this index.
Index DDLBEIndex [ Extent, SqlName = "%%DDLBEIndex", Type = bitmap ];
/// DDL Primary Key Specification
Index PRODUCTPKEY1 On ProductID [ PrimaryKey, SqlName = PRODUCT_PKEY1, Type = index, Unique ];
Storage Default
{
<Data name="ProductDefaultData">
<Value name="1">
<Value>ProductID</Value>
</Value>
<Value name="2">
<Value>ProductName</Value>
</Value>
<Value name="3">
<Value>Price</Value>
</Value>
</Data>
<DataLocation>^CCar.Wt3i.1</DataLocation>
<DefaultData>ProductDefaultData</DefaultData>
<ExtentLocation>^CCar.Wt3i</ExtentLocation>
<ExtentSize>0</ExtentSize>
<IdFunction>sequence</IdFunction>
<IdLocation>^CCar.Wt3i.1</IdLocation>
<Index name="DDLBEIndex">
<Location>^CCar.Wt3i.2</Location>
</Index>
<Index name="IDKEY">
<Location>^CCar.Wt3i.1</Location>
</Index>
<Index name="PRODUCTPKEY1">
<Location>^CCar.Wt3i.3</Location>
</Index>
<IndexLocation>^CCar.Wt3i.I</IndexLocation>
<StreamLocation>^CCar.Wt3i.S</StreamLocation>
<Type>%Storage.Persistent</Type>
}
}
ExtentLocation:このクラスのグローバル名の生成に使用されるハッシュ値
DataLocation:レコードデータが登録されるグローバル変数名です。
Location:各インデックス固有のグローバル変数名が指定されます。
IndexLocation:この定義では、多くの場合使用されません。
StreamLocation:ストリームプロパティのデータが格納される変数です。
ストレージ定義に表示される情報について詳細は、ドキュメント「グローバル命名方法:USEEXTENTSET=1 の場合」をご参照ください。
2023.1以前のドキュメントは「ハッシュ化したグローバル名」をご参照ください。
2017.1以前と同様の命名ルール(^スキーマ名.テーブル名D、I、S のグローバル変数名)を使用する場合は、CREATE TABLE文実行時に以下のクラスパラメータを指定します。
WITH %CLASSPARAMETER USEEXTENTSET = 0
CREATE TABLE Test2.Product(
ProductID VARCHAR(10) PRIMARY KEY,
ProductName VARCHAR(50),
Price INTEGER
)
WITH %CLASSPARAMETER USEEXTENTSET = 0永続クラス定義:Test2.Productのパラメータ:USEEXTENTSETは以下のように定義されます。
永続クラス定義:Test2.Productのストレージ定義は以下の通りです。
{
<Data name="ProductDefaultData">
<Value name="1">
<Value>ProductID</Value>
</Value>
<Value name="2">
<Value>ProductName</Value>
</Value>
<Value name="3">
<Value>Price</Value>
</Value>
</Data>
<DataLocation>^Test2.ProductD</DataLocation>
<DefaultData>ProductDefaultData</DefaultData>
<IdFunction>sequence</IdFunction>
<IdLocation>^Test2.ProductD</IdLocation>
<IndexLocation>^Test2.ProductI</IndexLocation>
<StreamLocation>^Test2.ProductS</StreamLocation>
<Type>%Storage.Persistent</Type>
}
WITHで指定したテーブルのオプションについては詳しくは、ドキュメント「テーブルのオプション」をご参照ください。