このような文字列を SSAS、特に SSAS 2008 に格納することの意味について、私が発見できたことは次のとおりです。
まず、Business Intelligence Development Studio などの標準の MS ETL (抽出/変換/読み込み、つまりデータ インポート) ツールは、大きなテキスト フィールド、特に varchar(max) フィールドをインポートできないようにしようとする場合がありますが、回避策があり、効果的であることが証明されています。自分。(BIDS の場合、XML ファイルの DataSize 要素を手動で設定する必要があり、163315555 バイトのマジック サイズになる可能性があります。これを理解したMatija Lahに感謝します。)
第 2 に、私が知る限り、長くて一意の文字列を大量に格納しても、SSAS で使用されるディスク上のデータ構造が混乱することはありません。また、ディスク上の文字列データのサイズは、データ ソース内の文字列データと同じ大きさである必要があります。SSAS ハンドル文字列に関する大まかな情報を次に示します。
- 中核となる OLAP データ構造 (ディメンションの属性やメジャー グループのファクトなど) には、文字列が直接含まれているわけではありません。代わりに、実際の文字列データを含む「文字列ストア」ファイル (拡張子 .ksstore、.asstore、.bsstore、または .string.data) へのオフセットが含まれます。
- 特定の文字列ストア内で、各文字列は 1 回だけ表されます。ソース データ テーブルの複数の行に重複した文字列が含まれている場合、SSAS/MOLAP レベルでは、重複した文字列値ではなく、重複したファイル オフセットに変換されます。
- ソース文字列の長さが n の場合、文字列ストア内の対応するデータ構造には 8 バイト程度のオーバーヘッドがあり、1 文字あたり 2*n バイトが加算されます。(文字列は、本質的に SSAS では 2 バイトの Unicode 形式で格納されます。)
- この件に関する素晴らしい詳細については、本Microsoft SQL Server 2008 Analysis Services Unleashed、特に第 20 章「The Physical Data Model」をお勧めします。
- 少なくとも私の実験では、文字列ストア ファイルは圧縮されていないようです。少なくとも、圧縮されていない文字列ストアよりも著しく小さいわけではありません。
SSAS MOLAP に保存されている場合でも、SQL テーブルに保存されている場合でも、テキスト データが同じ大きさのバイト数を取ることを実験的に確認しました。特に、ディメンション テーブルの 1 つから "select sum(len(myfield)) from mytable" を実行し、SSAS データ ディレクトリ内の対応する属性のファイルのサイズと比較しました。サイズは SQL で 172MB、SQL サーバーで 304MB でした。(一意のものをすべて合計すると、SQL サイズは 147MB でしたすべての文字列ではなく文字列です。) 私の場合、サイズの違いは主に文字エンコーディングによって説明されました。私のソースSQLデータは1文字あたり1バイトで保存されますが、SSASはすべての文字列を1文字あたり2バイトで保存します。AttributeHierarchyOptimizedState=FullyOptimized を使用して属性を最適化したかどうかに関係なく、.kssstore ファイルのサイズが、この属性に関連付けられている他のすべてのファイルのサイズを完全に支配していることがわかりました。
第 3 に、文字列ストア ファイルのサイズには 4 GB の上限があり、特定のディメンションや属性などに関連付けることができる一意のテキストの量が制限されます。私の場合、限界まであと 10% 未満ですが、これは一部の人に影響を与える可能性があります。(元の投稿の簡単な桁数の計算: 1M ファクト * 10,000 バイト/ファクト = 10GB 相当のテキスト。) この制限に達した場合、キューブの「処理」時間で明らかにヒットします。どうやら、ROLAP ディメンションにも適用されるようです。これを回避するためのハックがあるかもしれません。ここを参照してください。Sql Server 2012 では、この 4 GB の制限がなくなる可能性があることに注意してください。
第 4 に、長い一意の文字列が SSAS で問題を引き起こす場合、それらはメモリ内表現のレベルで発生するようです。潜在的な問題の 1 つ (詳しくは調べていません) は、これらの余分な文字列をメモリにキャッシュすると、SSAS が他の重要なデータ構造をメモリに保持できなくなり、パフォーマンスが低下することです。The Microsoft Data Warehouse Toolkitという本で示唆されているもう 1 つの問題(私はまだこの主張を他の場所で見つけていません) は、SSAS がメモリ内のデータ構造に対して拡張的な文字列パディングを行っていることです。
「リレーショナル データベースには、可変長の文字列列が格納されます...ただし、SQL Server ツールセットの他の部分では、これらの列が最大幅まで埋められます。注目すべき点として、Integration Services と Analysis Services は、文字列列がメモリに読み込まれるときに、文字列列をスペースで埋めます。 Integration Services と Analysis Services はどちらも物理メモリを使用するため、必要以上に広い文字列列を宣言するとコストがかかります。」
結論として、これまでのところ、長い文字列データをキューブに格納することは便利だと思われます。また、問題が発生する理由はまだ見つかっていないので、試してみます。うまくいかない場合は、更新を提供しようとします。