はじめに
Oracle Analytics Cloud : データセットで、データベースの表のデータアクセスの設定では、"自動キャッシュ"と"ライブ"が設定できます。複数のデータベースの表からなるデータセットを作成したとき、
ある表は"自動キャッシュ"で、別の表が"ライブ"と設定している場合、どのような動きになるかみてみたいと思います。
前提
・データセットを作成したことがある
・データセットで、データアクセスの設定をしたことがある
・開発者メニューを設定したことがある
"拡張"をクリック、"開発者オプションの有効化"をON(右側にツマミを移動)し、保存します。
複数表からなるデータセットの用意
複数表からなるデータセットを作成します。
PRODUCTS表、SALES表をデータセットに追加します
PRODUCTS表のデータアクセスの設定を"自動キャッシュ"に変更します。
PRODUCTS表を右クリックします。メニューで"定義の編集"をクリックします。
データアクセスで、ライブから自動キャッシュに変更します。自動キャッシュをクリックします。
同様に、SALES表で"ライブ"に設定されていることを確認します。
下部の結合ダイアグラムをクリックします。SALES表を右クリックし、メニューから定義の編集をクリックします。
データアクセスが"ライブ"になっていることを確認します。OKをクリックします。
データセットを保存します。右上部の保存アイコンをクリックします。
データセットの名前を入力します。
DS_SALESLIVE_PRODUCTSCACHEと入力し、OKをクリックします。
ワークブックを作成する
DS_SALESLIVE_PRODUCTSCACHEのデータセットを使ってワークブックを作成します。
DS_SALESLIVE_PRODUCTSCACHEデータセットを開き、"ワークブックの作成"をクリックします。
SALES表からTIME_ID、SALES_AMOUNTを選択し、右の空白のキャンバスにドロップします。
列を複数選択するときは、TIME_IDをクリックし、Ctrlキーを押しながらSALES_AMOUNTをクリックします。
PRODUCTS表からPROD_NAMEをクリックします。PROD_NAMEをドラッグし上部のフィルタペインにドロップします。
PROD_NAMEで、1つ選択します。128MB SDメモリ・カードをクリックします。
下図のように問合せエラーになることがあります。詳細をクリックします。
"状態: HY000。コード: 43121。[nQSError: 43121] 最大行制限を超過しています" とでており、こちらは、OACがデータベースに対して物理SQLで問合せをした後、受け取った結果がOACで設定されている最大行制限を超える場合に出力されるエラーです。
つまり、以下のようなことが考えられます。データアクセスが"自動キャッシュ"のPRODUCTS表と"ライブ"のSALES表を結合して、結果を取得しますが、混在していると、OACでの結合となるためSALES表からデータをとってきます。その際、最大行制限が超過してしまった。ということになります。
最大行制限は、2023/1/27現在、以下です。今回は1 OCPUの環境のため125000行の制限を超過したことになります。
https://docs.oracle.com/cd/E83857_01/paas/analytics-cloud/acoci/create-services.html#GUID-7D6DB4EE-8DD5-44C5-9B6E-9FA847463A5F
実際どのような物理SQLが発行されているかは、開発者モードで確認できます。
開発メニューを開きます。
リフレッシュをクリックし、再度実行します。"実行ログ"のタブで、下部の方にスクロールダウンします。物理SQLが表示されていますが、PROD_NAME,PROD_IDの検索条件はついていないことがわかります。以下エラーも出力されています。
[nQSError: 43119] Query Failed:
[nQSError: 43121] Max Row Limit Exceeded
このように複数のデータベースの表からのデータセットをつかっていて、データアクセスの設定で"自動キャッシュ"と"ライブ"が混在しているときに、結合はOAC側で実施されます。その際、最大行数の制限が超過したエラーがでた場合、データセット内のデータアクセスの設定を"ライブ"にすることで対処できます。
両方を"ライブ"にした場合は、PROD_NAMEの絞り込みもDB側で実施されます。
以上