【SAP】プールテーブル/クラスタテーブルを3分で解説

ABAP

SAP中級者~上級者向けにプールテーブル/クラスタテーブルとは何か?を3分で解説します。

プールテーブルもクラスタテーブルもどちらもSAPにおける特殊なテーブルの1種。SELECT文における外部結合/ 内部結合が行えない等の制約があるテーブルで、一般的な透過テーブルと分けて理解する必要があります。

このページでは、プールテーブル/クラスタテーブルって何?どういうテーブルなの?透過テーブルと何が違う?という疑問に3分でお答えします。

このページで学べる内容
  • 3種類のSAPテーブルの整理
  • プールテーブルとは?
  • クラスタテーブルとは?
  • プールテーブル/クラスタテーブル利用時の注意点

一段上のABAPエンジニアを目指す方であれば知っておいて損はない重要知識です。是非最後までご覧ください。

スポンサーリンク

【SAP】テーブルには3種類ある

SAPのテーブルは以下のように大きく3つに分類することができます。

SAPにおけるテーブル3分類
  • 透過テーブル
  • プールテーブル
  • クラスタテーブル

これらの違いはざっくり言ってしまうと「データベースへの保存方法」です。

このページの前提となるSAPのデータベースについて初めに補足しておきます。

【前提知識】SAP:データベースインターフェース

SAPでは利用できるデータベースは多岐にわたります。代表的なものをあげると「Microsoft SQL Server」や「Oracle」「HANA」など。その他にもマイナーなデータベースまで幅広く利用することが可能です。

実際はそれぞれのデータベースごとに固有の制約があったり、それぞれで発行すべきSQL文なども微妙に異なったりするのですが、普段我々SAPエンジニアはその差異をあまり意識することはありません。

利用しているデータベースがOracleであれ、 Microsoft SQL Serverであれ、HANAであれ基本的には同じABAP命令で操作することが可能ですし、SE16N:テーブルブラウザでテーブルデータを参照する際も別にデータベースが何か?を気にすることはないのです。

このデータベースごとの差異を吸収しているのが、SAPにおけるデータベースインターフェースという仕組みです。データベースインターフェースは、SAPのアプリケーションとデータベースの中間層に位置する「翻訳機」のような役割を果たします。

もし、こデータベースインターフェースが存在しなかったら、利用しているデータベースに応じてABAP命令を微妙に使い分けたり、SE16N:テーブルブラウザでテーブルデータを参照する際にデータの見え方が微妙に異なっていたりしてしまいます。

つまり、まずここで押さえておきたい内容は「SAP上で見えているテーブルの形と、実際にデータベース上で保存されているテーブルの形は微妙に異なる場合がある」ということ。この前提知識がないと、プールテーブル/クラスタテーブルを正確に理解することは難しいでしょう。

透過テーブル

最も一般的なテーブルは透過テーブルです。アドオンテーブルやほとんどのSAP標準テーブルは透過テーブルに該当します。

透過テーブルは、SE11:ABAPディクショナリ上で登録した構造と同じ構造(SAPで見たままの構造)でデータベース上に保存されるテーブルのこと。

初心者研修などで「透過テーブルって何?」と思う方も多いかと思いますが、SAPでは普通のテーブルのことを透過テーブルと呼ぶんだな・・・と理解しておけばまずはOKです。

一方でプールテーブルとクラスタテーブルはデータベース上での保存のされ方が、 SE11:ABAPディクショナリ で見た時と異なって保存されます。ここからは本題「プールテーブルとクラスタテーブルとは何か」から解説していきます。

プールテーブルとは

プールテーブルは、テーブルプールに割り当てられたテーブル(テーブルプールに保存されるテーブル)のことです。

どういうこと?となりますよね?順を追って説明していきます。

プールテーブル SAP

プールテーブルの保存方式

以下テーブルAとテーブルBはプールテーブルをSE16N:テーブルブラウザで参照した際のイメージです。SAPから見た際のデータの持ち方は、保持透過テーブルと何ら変わりがありません。

blank

もう一度説明をしますが、もしこれが透過テーブルの場合であればこの形のままデータベース上に保存されます。ですが、プールテーブルの場合は、実はデータベース上では異なる形で登録されます。

プールテーブル SAP

プールテーブルは簡単に言えば複数のテーブルが1つのテーブルにまとまって登録されているだけテーブルプールという1つのテーブル上に保存されるのがプールテーブルです。

少しややこしいのですが、プールテーブルが保存されている先がテーブルプールです。


テーブルプールの構造は以下のように決まっています。

テーブルプールの格納イメージ

テーブルプールは、ご覧のように一番左の項目に「テーブル名」を持っています。

つまり、保存のされ方を図示すると以下のようになります。

なんとなく「1つのテーブルに保存」の意味が分かるかと思います。何度も繰り返しますがプールテーブルは、テーブルプールにまとめて格納されるのです。

テーブルプールの構造

テーブルプールは4つの項目を持ちます。詳細まで把握している必要はありませんが、参考として覚えておくと役立つかもしれません。

先ほどのテーブルプールの画像と合わせて学んでみてください。

項目データ型説明
Tabname CHAR(10)テーブルの名称が入ります
Varkey CHAR (1~110)プールテーブルの全てのキー項目が文字列として入ります
Dataln INT2(5)↓のデータの長さ
Vardata RAW (n)プールテーブルのキー項目以外の全てのデータが入ります

クラスタテーブル

実はプールテーブルの概念を理解してしまえば、クラスタテーブルの理解は早いです。クラスタテーブルも「1つのテーブル」に格納されているという意味で全く同じです。

画像に alt 属性が指定されていません。ファイル名: 3d7d380b5de68448338720a224d68e89-1024x334.png



クラスタテーブルの場合は、保存される先のテーブルをテーブルクラスタと呼びます。

単語の使い分けが難しいので、しっかりと整理しておきましょう。

プールテーブルとクラスタテーブルの違い

では、プールテーブルとクラスタテーブルは何が違うのでしょうか?答えは「クラスタテーブルは主要キーで内部結合されている」ということです。

プールテーブルでは、データがそのまま格納されているのに対して、クラスタテーブルは「主要キーで内部結合された状態」で保存されているということです。先ほどのテーブルをクラスタテーブルバージョンで表すと以下のようになります。

テーブルクラスタの構造

項目データ型説明
CLKEYn* n 番目のキー項目を表す
例)CLKEY1、CLKEY2・・
Pageno INT2(5) 継続レコードの番号
Timestamp CHAR(14) タイムスタンプ
Pagelg INT2(5) ↓のデータの長さ
Vardata RAW (n) プールテーブルのキー項目以外の全てのデータが入ります

テーブルプールと違い、項目数は固定ではなくなります。これは、キー項目を何個にするかの指定によって異なるためです。

継続レコードとは?

上記表中青線ハイライト部分の「継続レコード」について解説します。継続レコードとは「何番目のレコードか?」という情報を持つ項目になります。

キー項目以外の項目、すなわち「Verdata」の最大長は有限です。※最大長は、データベースによって異なります。

テーブルプールでは、内部結合を行わないそのままのデータであるため、最大長を越えるデータが生まれることはありませんが、テーブルクラスタでは内部結合の結果次第で項目数が増加するため、最大長を越える場合があります。

その際、継続レコード項目で1,2,3と項番を振ることによって最大長越えのキー項目に対応をしています。項番は0から始まる昇順で採番されます。

プールテーブルとクラスタテーブルの注意点

プールテーブル / クラスタテーブル利用時の注意点を3点ご説明しておきます。

注意点①:NativeSQLが利用できない

NativeSQLとは、データベースを直接読みに行くSQLのことを指します。

データベース上では、上記で解説してきたようにキー項目以外は全て文字列で結合されている状態ので、データベース上を直接読むNativeSQLは利用できません。OpenSQLは利用可能です。

OpenSQLとNativeSQLの違いはこちらで詳しく解説しております。

注意点②:キー項目以外を抽出条件に入れてはいけない

SELECT文のWHERE句でキー項目以外の項目を抽出条件に入れると著しくパフォーマンスが悪化します。上記で述べた通り、キー項目以外の項目は文字列で結合されている状態です。

したがって、それらを抽出条件に入れてしまうと、結合を分解し処理することになるので、その分パフォーマンスが悪化します。

SELECT文で内部結合・外部結合ができない

内部結合・外部結合はできません。これが一番重要な内容です。

プールテーブル / クラスタテーブルは特殊な形で保存されているデータであるため、OpenSQLを利用しても結合操作が行えないという点に注意しましょう。

結論、プールテーブル/クラスタテーブルは内部結合・外部結合ができない、とだけ覚えておけばあまり困ることはありません。

SAP/ABAPを1から勉強したい方は

SAP/ABAPを1から学習したい初心者の方向けに、できるだけ網羅的にABAPが理解できるよう以下ページに知識体系を整理しています。

特に初心者のうちは、どこから学べばよいか?どう勉強すれば良いか?すらわからない状態になりがち。

ある程度の知識を持ったうえで、はじめて実践的な理解へとつながります。

是非、一度ご覧になってみてください。

タイトルとURLをコピーしました