Oracle AnalyticsをOracle Cloud Infrastructure (OCI)関数と統合し、それらをデータ・フローで使用してデータを変換できるようにします。
OCIで作成された関数を使用してOracle Analytics内のデータを変換できます。たとえば、言語変換関数を使用して、英語のテキストをスペイン語またはドイツ語に変換できます。
まず、Oracle AnalyticsでOCI関数を登録すると、BIサービス管理者またはDVコンテンツ作成者権限を持つすべてのOracle Analyticsユーザーがデータ・フローでそれらを使用できるようになります。
OCIコンソールで関数を作成し、それらを使用して、Oracle Analyticsデータ・フローのデータを変換できるようにします。
Oracle AnalyticsでのOCI関数の登録について
OCI関数をOracle Analyticsに登録する際、「関数の選択」ダイアログでグレー表示されている場合、それがoac-compatibleタグで構成済であり、正しいfuncMode値で起動されていることを確認してください。

.pngの説明
Oracle Analyticsで使用するOCI関数の構成について
Oracle Analyticsで使用するOCI関数にはoac-compatibleタグがあり、関数コードにはfuncMode変数を含める必要があります。OCIコンソールでこれらの設定を構成します:
oac-compatibleを使用してフリー・フォーム・タグを関数に追加して、値trueに設定します。
funcMode変数を関数コードに含めます。Oracle Analyticsは、funcMode=describeFunctionでOCI関数を登録するリクエスト、およびfuncMode=executeFunctionでOCI関数を起動するリクエストを送信します。func.py内のハンドラ関数は、describeFunctionモードまたはexecuteFunctionモードで操作する必要があります。次に示すリクエストの入力変数funcModeの値に基づいて、これを実行できます。
pythonでの語数の例におけるOCI関数のリクエストおよびレスポンス形式を次に示します。
funcMode = describeFunction
{ "funcMode": "describeFunction"}リクエストのfuncModeが'describeFunction'の場合、関数はステータス(returnCodeおよびerrorMessage)、出力(出力列の名前、データ型)、パラメータ(入力パラメータの名前、説明、タイプなど)、bucketNameなどを含む関数定義を、次の形式のJSONオブジェクトとして返します(語数の例):
funcDefinition = {
"status": {
"returnCode": 0,
"errorMessage": ""
},
"funcDescription": {
"outputs": [
{"name": "word_count", "dataType": "integer"}
],
"parameters": [
{"name": "textColumn", "displayName": "Text Column",
"description": "Choose column to count words", "required": True,
"value": {"type": "column"}}
],
"bucketName": "bucket-OCI-FAAS",
"isOutputJoinableWithInput": True
}
}リクエスト内のfuncModeが'describeFunction'である場合、次のコードをfunc.pyに追加して、funcDefinitionを返します。
def handler(ctx, data: io.BytesIO = None):
response_data = ""
try:
body = json.loads(data.getvalue())
funcMode = body.get("funcMode")
if funcMode == 'describeFunction':
response_data = json.dumps(funcDefinition)
except (Exception, ValueError) as ex:
response_data = json.dumps(
{"error": "{0}".format(str(ex))})
return response.Response(
ctx, response_data,
headers={"Content-Type": "application/json"}
)funcMode = executeFunction - funcModeが'executeFunction'の場合、実際の関数ロジックを実行し、レスポンスを出力とともにOracle Analyticsに返信する必要があります。登録されている関数がOracle Analyticsのデータフローから起動される場合、リクエスト・オブジェクトは、argsの列名、input(bucketName、fileName、fileExtension、fileName、method、rowID)およびoutput(bucketName、fileName、fileExtension)を含む次のような形式になります。
{
"args":
{
"textColumn": "REVIEW"
},
"funcMode": "executeFunction",
"input":
{
"bucketName": "bucket-OCI-FAAS",
"fileExtension": ".csv",
"fileName": "oac-fn-e99cd4fddb3844be89c7af6ea4bbeb76-input",
"method": "csv",
"rowID": "row_id"
},
"output":
{
"bucketName": "bucket-OCI-FAAS",
"fileExtension": ".csv",
"fileName": "oac-fn-e99cd4fddb3844be89c7af6ea4bbeb76-output"
}
}OCIでの関数の作成について
OCIコンソール、コマンド・ライン(Fn Project CLI)またはAPIを使用して、関数を作成できます。たとえば、OCIコンソールで、「開発者サービス」、「ファンクション」を順にクリックし、画面上の指示に従って、アプリケーションおよび1つ以上の関数を作成します。詳細は、OCIでの関数の作成ドキュメントを参照してください。初めて関数を作成している場合、エンド・ツー・エンドの例Helloworld関数の作成、デプロイおよび起動のステップに従ってください。Oracle Analyticsで使用するすべての関数には、フリー・フォーム・タグoac-compatible=trueを含める必要があります(前述のOracle Analyticsで使用するOCI関数の構成についてを参照)。
OCIコンソールでの関数の作成のヒント
Oracle AnalyticsをOCI関数と統合するには、必要なセキュリティ・ポリシーがあることを確認します。
Oracle Analytics CloudとOCIテナンシ間の接続で指定するOCIユーザーには、使用するOCIリソースを含むコンパートメントに対する読取り、書込みおよび削除権限が必要です。OCIユーザーが次の最小限のOCIセキュリティ・ポリシーを持つユーザー・グループに属していることを確認してくださいOCIテナンシにOracle Analyticsから接続する場合は、OCI APIキーまたはリソース・プリンシパルを使用できます。
注:
リソース・プリンシパルの場合、コンパートメント下のすべての分析インスタンスを含めるには、{request.principal.id='<analytics_instance_ocid>'}のかわりに{request.principal.type='analyticsinstance', request.principal.compartment.id='<compartmentA_ocid>'}を指定します。| APIキー・ポリシー | リソース・プリンシパル・ポリシー |
|---|---|
Allow group <group_name> to use functions-family in compartment <compartment_name> |
Allow any-user to use functions-family in compartment <compartment_name> where all {request.principal.id='<analytics_instance_ocid>'} |
Allow group <group_name> to read buckets in compartment <compartment_name> |
Allow any-user to read buckets in compartment <compartment_name> where all {request.principal.id='<analytics_instance_ocid>'} |
Allow group <group_name> to manage objects in compartment <compartment_name> where target.bucket.name='<staging_bucket_name>' |
Allow any-user to manage objects in compartment <compartment_name> where all {request.principal.id='<analytics_instance_ocid>', target.bucket.name='<staging_bucket_name>'} |
Allow group <group_name> to read objectstorage-namespaces in tenancy |
Allow any-user to read objectstorage-namespaces in tenancy where all {request.principal.id='<analytics_instance_ocid>'} |
| 動的グループ・ポリシー | 説明 |
|---|---|
Allow dynamic-group <dynamic_group> to manage objects in compartment <compartment_name> where target.bucket.name='<staging_bucket_name>' |
動的グループのステージング・バケットへのアクセスを提供します。 |
一致ルールの例: <dynamic_group>.{resource.type = 'fnfunc', resource.compartment.id = '<compartment_ocid>'}。ここで、<compartment_ocid>は関数を含むコンパートメントのOracle Cloud IDです。
下にリストされた順序で、次に示す大まかなタスクに従い、OCI関数を使用してOracle Analyticsのデータを変換します。
| タスク | 説明 | 詳細情報 |
|---|---|---|
|
OCIでの関数の作成(関数の開発者権限が必要) |
OCIテナンシで関数を作成し、それらが、Oracle Analyticsで使用するために指定された前提条件に準拠していることを確認してください。 |
|
| OCIポリシーの割当て | APIキーまたはリソース・プリンシパルを使用して接続するために必要なOCIポリシーがあることを確認します。 | OCI関数とOracle Analyticsの統合に必要なポリシー |
| OCIテナンシへのOracle Analyticsの接続(管理者またはDV作成者権限が必要) | Oracle Analyticsで、OCIテナンシへの接続を作成します。 | |
| Oracle AnalyticsでのOCI関数の登録(管理者またはDV作成者権限が必要) | Oracle Analyticsで、OCI関数をデータ・フローから呼び出せるように登録します。 | |
| OCI関数を使用したデータの変換(管理者またはDV作成者権限が必要) | データ・フローを作成し、「カスタム・スクリプトの適用」ステップを使用して、OCI関数を起動します。 |