SAP HANA

SAP HANAのhdbtableとhdbview:デザインタイムオブジェクトの使い方とトラブルシューティング

SAP HANAのhdbtableとhdbviewについて、役割の違い、定義・依存関係・デプロイ・アクティベーション時の確認ポイントを実務向けに整理します。

hdbtableとhdbviewの関係テーブル定義から依存ビュー、アプリケーションへつながる構造を示すhdbtableとhdbviewの関係テーブル定義から依存ビュー、アプリケーションへつながる構造を示す依存依存利用hdbtable列、データ型、制約、キーを…基礎hdbviewテーブルのデータを参照・整…結合・集約hdbview再利用できる論理データモ…アプリケーション・連携デプロイ済みデータベース…CertPas オリジナル図解
hdbtableを基礎に、基礎ビュー、結合・集約ビュー、アプリケーションへつながる構成図
目次
  1. hdbtableとhdbviewの役割
  2. hdbtableでテーブルを定義する
  3. hdbviewで参照ロジックを管理する
  4. hdbtableとhdbviewの依存関係
  5. デプロイとアクティベーションの実務
  6. よくある失敗と切り分け
  7. 運用前の確認項目
  8. まとめ

hdbtableとhdbviewの役割

SAP HANAの開発では、データベースに直接SQLを実行してオブジェクトを作成する方法に加えて、リポジトリで定義を管理し、デプロイ時にデータベースオブジェクトを生成する方法があります。hdbtablehdbviewは、このような開発成果物として扱う代表的なデザインタイムオブジェクトです。

.hdbtableはテーブルの構造を定義します。列、SQLデータ型、NULL許可、主キー、格納方式などを定義し、デプロイによってデータベース上のテーブルを生成または更新します。.hdbviewはビューの定義を保持し、基になるテーブルやビューに対するSELECTロジックをデータベースオブジェクトとして作成します。

両者を使い分ける基本は、データを保持するか検索結果を論理的に組み立てるかです。アプリケーションの永続データはhdbtable、複数のテーブルを結合した参照モデルや公開用の読み取りインターフェースはhdbviewで管理します。

開発全体の位置付けを確認する場合は、SAP HANA開発の全体像も参照してください。

hdbtableとhdbviewのデプロイ手順実務での検証とデプロイの順序を整理するhdbtableとhdbviewのデプロイ手順実務での検証とデプロイの順序を整理する準備準備完了確認改善成果物を定義明示的な名前と列を持つテ…依存関係を確参照先、スキーマ、権限を確…デプロイ・アクティベートリポジトリのデプロイを実…データベース状態を検証定義、サンプル結果、性能…CertPas オリジナル図解
hdbtableとhdbviewの定義から依存関係確認、アクティベーション、データベース検証までの手順図

hdbtableでテーブルを定義する

hdbtableの定義では、テーブル名、スキーマ、列、データ型、NULL制約、主キーなどを明確にします。実際のプロジェクトでは、アプリケーションが参照する列名とデータ型を先に確定し、後からビューやSQLScriptがその契約に依存する構成にします。

テーブル定義
├─ スキーマとオブジェクト名
├─ 列名とSQL型
├─ NULL許可
├─ 主キー
└─ 格納方式や追加属性

主キーは単なる重複排除の設定ではありません。更新処理、参照整合性、後続のビュー設計に影響するため、業務上の一意性を表す列を選びます。キーを後から変更する場合は、既存データ、参照オブジェクト、デプロイ順序をまとめて確認します。

列のデータ型は、アプリケーション側の型と一致させます。金額では通貨や小数精度、日時ではタイムゾーンの扱い、コード値では文字列長を決めてから定義します。暗黙の型変換に依存すると、ビューの結合条件や入力パラメータで予期しない結果が発生します。

大量データを扱うテーブルでは、列ストアを前提にした設計が一般的です。更新頻度が高い小規模な制御テーブルなどでは、用途に応じて格納方式を検討します。格納方式は性能だけでなく、更新処理、バックアップ、運用監視にも関係するため、テーブル単位で判断します。

hdbtableとhdbviewの比較開発作業ごとに適したデザインタイムオブジェクトを明確にするhdbtableとhdbviewの比較開発作業ごとに適したデザインタイムオブジェクトを明確にするビューがテーブルに依存hdbtable:データを保持テーブル構造、列、キー、制…hdbview:ロジックを公開選択、結合、フィルタ、集…CertPas オリジナル図解
永続テーブル構造を管理するhdbtableと、再利用可能な検索ロジックを管理するhdbviewの比較

hdbviewで参照ロジックを管理する

hdbviewは、テーブルや他のビューから必要な列と行を抽出し、利用者向けの論理モデルを作るために使います。ビューの定義には、SELECT文、結合、集約、フィルタ、別名、依存オブジェクトなどを含めます。

ビューを設計するときは、次の順で確認すると作業が安定します。

  1. 入力となるテーブルとビューを確定する
  2. 結合キーと結合種別を確認する
  3. 必要な列だけを選択する
  4. 集約単位とフィルタ条件を決める
  5. 依存関係を定義する
  6. 開発環境でアクティベートし、結果を確認する

ビューの列名は、利用側が理解しやすい名前にします。SELECT *に依存すると、基になるテーブルの列追加がビューの出力や連携処理に影響しやすくなります。公開用ビューでは出力列を明示し、業務項目の意味が分かる別名を付けます。

計算ロジックが複雑になった場合は、ビューにすべての処理を集約せず、用途に応じてSQLScriptのプロシージャやテーブル関数へ分割します。グラフィカルな分析モデルが必要な場合は、SAP HANAの計算ビューで扱う設計との境界も確認します。

hdbtableとhdbviewの依存関係

hdbtableとhdbviewの依存関係は、デプロイ順序とアクティベーション結果を左右します。ビューが参照するテーブルが存在しない状態では、ビューの作成やアクティベーションが失敗します。テーブル、基礎ビュー、集約ビューの順に依存関係を整理します。

hdbtable
   ↓
基礎hdbview
   ↓
結合・集約hdbview
   ↓
アプリケーションや外部連携

依存関係はファイル名だけで判断せず、定義内のスキーマ、オブジェクト名、参照先を確認します。別パッケージのオブジェクトを参照する場合は、対象オブジェクトが同じ開発環境に存在し、デプロイ対象に含まれていることを確認します。

エラーが依存関係に見える場合は、まず元のエラーメッセージを確認します。参照先が見つからない、権限が不足している、SQL構文が不正である、既存オブジェクトと定義が衝突している、といった原因を分けて調査します。

オブジェクトの生成後は、SAP HANAデータベースエクスプローラーやSAP HANA cockpitで、対象スキーマのテーブルとビュー、定義、依存関係、エラー情報を確認できます。管理者権限が必要な操作と開発者権限で実行できる操作を分離し、共有環境では直接変更を避けます。

デプロイとアクティベーションの実務

デザインタイムオブジェクトは、ファイルを保存しただけではデータベース上の実行オブジェクトになりません。開発ツールやリポジトリのデプロイ処理を実行し、構文検証、依存関係の解決、データベースオブジェクトの生成、アクティベーション結果を確認します。

デプロイ前には、次の項目をチェックします。

  • 対象パッケージと対象システムが正しい
  • スキーマ名とオブジェクト名が意図した値になっている
  • 参照先のhdbtableまたはhdbviewがデプロイ対象に含まれている
  • 既存オブジェクトへの変更がデータ互換性を保っている
  • 開発用の接続ユーザーに必要な権限がある
  • 変更履歴とロールバック方法を記録している

変更を本番へ移送する場合は、ソース定義、依存オブジェクト、移送順序を一つの変更単位として管理します。手動で本番データベースのテーブル定義を変更すると、リポジトリ上の定義との不整合が生じます。

アプリケーションロジックと連携する場合は、SAP HANA SQLScriptプロシージャの設計も確認します。テーブルやビューの列変更がプロシージャの入力、出力、結合条件に影響するため、関連成果物を同じ変更計画で検証します。

よくある失敗と切り分け

オブジェクトがアクティベートされない

最初に、対象ファイルの構文、参照先の存在、スキーマ名、開発ユーザーの権限を確認します。ビューの場合は、参照テーブルの列名やデータ型が定義と一致しているかを確認します。エラーが連鎖しているときは、最初に失敗したオブジェクトから直します。

ビューの結果が想定より多い

結合条件が一意性を保っているか確認します。1対多の結合では、基準側の1行が複数行に展開されます。集約が必要な場合は、業務上の集約単位を明示し、結合前後のレコード数を比較します。

列追加後に利用側が失敗する

hdbtableの列追加だけでなく、ビューの出力、プロシージャの参照、アプリケーションのマッピング、外部連携の項目定義を確認します。出力契約を変更する場合は、旧列を一定期間維持する方式や、後継ビューを用意する方式を検討します。

デプロイ後に古い定義が表示される

接続先のデータベース、スキーマ、パッケージを確認します。SAP HANAデータベースエクスプローラーで対象オブジェクトの定義と最終変更状態を確認し、開発環境と検証環境を取り違えていないことを確かめます。

直接SQLで修正した変更が消える

リポジトリ管理対象のオブジェクトは、次回のデプロイでデザインタイム定義が反映されます。恒久的な変更はhdbtableまたはhdbviewの定義へ戻し、変更履歴を残してからデプロイします。HDIベースの構成を扱う場合は、SAP HANA HDIコンテナのデプロイ単位と権限モデルも確認します。

運用前の確認項目

本番利用前には、機能確認だけでなく、権限、性能、変更手順、監視方法を確認します。ビューは読み取り専用に見えても、複雑な結合や集約によって大きなメモリ使用量や長い実行時間を生むことがあります。

代表的な検索条件で実行計画と処理時間を確認し、不要な列、不要な結合、過剰なネストを整理します。性能問題の調査では、SQL文だけでなく、データ量、更新頻度、同時実行数、基礎オブジェクトの設計をまとめて評価します。

権限は、開発、検証、本番で分離します。アプリケーションユーザーには必要なビューやプロシージャへの権限だけを付与し、テーブルへの直接更新権限を与えるかどうかを用途ごとに決めます。変更作業を行うユーザーには、デプロイに必要な権限と監査記録を設定します。

運用手順には、デプロイ前バックアップ、変更対象、依存関係、検証SQL、エラー時の戻し方を記載します。データ定義の変更とアプリケーションのリリースを分離する場合は、両者の互換期間を明確にします。

まとめ

hdbtableはテーブル構造を、hdbviewは参照ロジックをデザインタイムオブジェクトとして管理します。安定した運用には、依存関係の整理明示的な列定義、デプロイ後のデータベース確認が重要です。

ファイルを作成するだけで完了とせず、アクティベーション結果、権限、データ件数、実行性能、利用側への影響まで確認します。変更をリポジトリ上の定義へ集約することで、環境間の差異を抑え、再現可能なデプロイを実現できます。

ブログ一覧へ戻る