📊aidp-essbase
- ソース
- GitHub で見る ↗
説明
Oracle Essbase 21c のキューブに対して MDX クエリを実行し、結果を AIDP ノートブック内の Spark DataFrame として具体化します。 次のような場合に使用: ユーザーが Essbase、MDX、Essbase 21c、OLAP キューブについて言及している場合、またはキューブデータを Spark に読み込みたい場合。 認証方式: HTTP Basic 認証。
原文を表示
Run an MDX query against an Oracle Essbase 21c cube and materialize the result as a Spark DataFrame in an AIDP notebook. Use when the user mentions Essbase, MDX, Essbase 21c, OLAP cube, or wants to read cube data into Spark. Auth is HTTP Basic.
ユースケース
- ✓Essbaseキューブに対してMDXクエリを実行したい
- ✓キューブデータをSparkDataFrameとして読み込みたい
- ✓AIDP ノートブック内でOLAPデータを分析したい
本文(日本語訳)
aidp-essbase — Essbase 21c MDX → Spark
次のような場合に使用
- ユーザーが Essbase 21c キューブに対して MDX SELECT を実行し、その結果を Spark に読み込みたい場合。
- ユーザーが「Essbase」「MDX」「OLAP キューブ」「Essbase REST」「21c キューブ」などに言及している場合。
使用しない場合
- EPM Cloud Planning(クラウドホスト型)の場合 →
aidp-epm-cloudを使用すること。
AIDP ノートブックの前提条件
pip install requests pandasを実行済みであること。- ヘルパーが
sys.pathに追加済みであること。 - Essbase REST URL および Basic 認証情報が用意されていること。
- AIDP → Essbase ホスト間のネットワーク疎通が確保されていること
(プライベートサブネット上に配置されていることが多いため、
nc -zv <host> 9000で疎通確認を行うこと)。
認証方式: HTTP Basic
Essbase 21c REST API は Authorization: Basic base64(user:pass) 形式を要求します。
JET UI は IDCS OAuth にリダイレクトしますが、REST エンドポイントは Basic 認証のみに対応しています。
OCI セッションの JWT を Bearer として渡しても、IDプロバイダーが異なるため認証は失敗します。
ユーザー名には Essbase のサービス管理者アカウント(例: Oacadmin1)を使用してください。
Essbase ホストが AIDP クラスターに信頼されていない内部 CA チェーン(例: cealinfra.com)を使用している場合は、
セッションヘルパーに verify_tls=False を渡してください。
https://ess21c.cealinfra.com/ に対して動作検証済みです。
import os, urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 内部CA用
from oracle_ai_data_platform_connectors.auth import http_basic_session
from oracle_ai_data_platform_connectors.rest.essbase import (
execute_mdx, mdx_result_to_spark_dataframe,
)
session = http_basic_session(
username=os.environ["ESSBASE_USER"],
password=os.environ["ESSBASE_PASSWORD"],
base_url=os.environ["ESSBASE_BASE_URL"],
verify_tls=False, # 信頼済みパブリックCAの場合は True に設定
)
mdx_query = """
SELECT
{[Measures].[Sales]} ON COLUMNS,
{[Product].[Product Family].Members} ON ROWS
FROM [Sample.Basic]
WHERE ([Year].[2026], [Scenario].[Actual])
"""
response = execute_mdx(
session=session,
base_url=os.environ["ESSBASE_BASE_URL"],
application=os.environ["ESSBASE_APPLICATION"],
cube=os.environ["ESSBASE_CUBE"],
mdx_query=mdx_query,
)
df = mdx_result_to_spark_dataframe(spark, response)
df.show(20)
print("cells:", df.count())
注意事項
-
MDX の波括弧
{...}は必須です。 メンバーセットは必ず波括弧で囲んでください。[Product].[Product Family].Membersをそのまま記述すると 400 エラーになります。 -
WHERE 句(スライサー)による POV 指定について。
WHEREで次元を省略した場合、Essbase はその次元のデフォルト値(多くの場合、親メンバー)を使用するため、 集計済みデータや空データが返される可能性があります。 -
ネットワーク接続について。 Essbase 21c は通常プライベートホスト(ポート 9000 / 9001)上に展開されます。 MDX エラーの調査に入る前に、ネットワーク疎通を必ず確認してください。
-
#Missingセルについて。 キューブ上の空のインターセクションは文字列リテラル"#Missing"として返されます。 ヘルパーはそのまま保持するため、必要に応じて型変換を行ってください。 -
空結果でも HTTP 200 が返ります。 MDX がどのデータにもマッチしない場合でも、Essbase は 200 を返します。 HTTP ステータスに依存せず、常に
df.count() == 0で空チェックを行ってください。
参照
- ヘルパー: scripts/oracle_ai_data_platform_connectors/rest/essbase.py
- Essbase 21c REST ドキュメント: https://docs.oracle.com/en/database/other-databases/essbase/21/essoa/
原文(English)を表示
aidp-essbase — Essbase 21c MDX → Spark
When to use
- User wants to run an MDX SELECT against an Essbase 21c cube and load the result into Spark.
- User mentions: "Essbase", "MDX", "OLAP cube", "Essbase REST", "21c cube".
When NOT to use
- For EPM Cloud Planning (cloud-hosted) → use
aidp-epm-cloud.
Prerequisites in the AIDP notebook
pip install requests pandas.- Helpers on
sys.path. - Essbase REST URL + Basic credentials.
- Network reachability AIDP → Essbase host (often on a private subnet — confirm
nc -zv <host> 9000).
Auth: HTTP Basic
Essbase 21c REST API expects Authorization: Basic base64(user:pass). The JET UI redirects to IDCS OAuth, but the REST surface is Basic-only — passing an OCI session JWT as Bearer fails (different identity provider). Username is the Essbase service-admin (e.g. Oacadmin1).
If your Essbase host uses an internal CA chain not trusted by the AIDP cluster (e.g. cealinfra.com), pass verify_tls=False to the session helper. Live-validated against https://ess21c.cealinfra.com/.
import os, urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # internal CA
from oracle_ai_data_platform_connectors.auth import http_basic_session
from oracle_ai_data_platform_connectors.rest.essbase import (
execute_mdx, mdx_result_to_spark_dataframe,
)
session = http_basic_session(
username=os.environ["ESSBASE_USER"],
password=os.environ["ESSBASE_PASSWORD"],
base_url=os.environ["ESSBASE_BASE_URL"],
verify_tls=False, # set True for trusted public CAs
)
mdx_query = """
SELECT
{[Measures].[Sales]} ON COLUMNS,
{[Product].[Product Family].Members} ON ROWS
FROM [Sample.Basic]
WHERE ([Year].[2026], [Scenario].[Actual])
"""
response = execute_mdx(
session=session,
base_url=os.environ["ESSBASE_BASE_URL"],
application=os.environ["ESSBASE_APPLICATION"],
cube=os.environ["ESSBASE_CUBE"],
mdx_query=mdx_query,
)
df = mdx_result_to_spark_dataframe(spark, response)
df.show(20)
print("cells:", df.count())
Gotchas
- MDX braces
{...}are required around member sets — bare[Product].[Product Family].Membersreturns 400. - WHERE slicer for POV — if you skip dimensions in
WHERE, Essbase uses dimension defaults, which may be parents (returns aggregated/empty data depending on aggregation). - Network — Essbase 21c is typically deployed on a private host (port 9000 / 9001). Confirm reachability before chasing MDX errors.
#Missingcells — empty cube intersections return the literal"#Missing". Helper preserves; cast as needed.- HTTP 200 with empty result — Essbase returns 200 even when MDX matches nothing. Always check
df.count() == 0rather than relying on the HTTP status.
References
- Helpers: scripts/oracle_ai_data_platform_connectors/rest/essbase.py
- Essbase 21c REST docs: https://docs.oracle.com/en/database/other-databases/essbase/21/essoa/
原文・著作権は Anthropic および各プラグイン作者に帰属します。日本語訳は Claude API による自動翻訳です。