整合 Oracle Analytics 與 Oracle Cloud Infrastructure (OCI) Functions,以便在資料流程中使用這些函數轉換資料。
您可以在 Oracle Analytics 中使用 OCI 建立的函數來轉換資料。例如,您可以使用語言轉換函數將英文文字轉換成西班牙文或德文。
您可以先在 Oracle Analytics 註冊 OCI Functions,之後任何具備「BI 服務管理員」或「DV 內容作者」權限的 Oracle Analytics 使用者便能夠在資料流程中使用這些函數。
在 OCI 主控台中建立函數,以便在 Oracle Analytics 資料流程中使用這些函數轉換資料。
關於在 Oracle Analytics 註冊 OCI Functions
當您在 Oracle Analytics 中註冊 OCI 函數時,如果該函數在選取函數對話方塊中顯示為灰色,請檢查函數是否已設定 oac-compatible 標記且使用正確的 funcMode 值進行呼叫。

.png
關於在 Oracle Analytics 設定使用 OCI Functions
要在 Oracle Analytics 中使用的 OCI 函數必須具有 oac-compatible 標記,而且函數程式碼必須包含 funcMode 變數。請在 OCI 主控台中設定以下設定值:
oac-compatible,然後將值設為 true。
funcMode 變數包含在函數程式碼中。Oracle Analytics 會使用 funcMode=describeFunction 傳送註冊 OCI 函數的要求,然後使用 funcMode=executeFunction 傳送呼叫 OCI 函數的要求。func.py 中的處理程式函數應以 describeFunction 或 executeFunction 模式運作。只要透過要求中的輸入變數 funcMode 值,即可完成此作業,如下所示。
以下是計算字數的 OCI Functions 要求和回應格式 (使用 python) 範例。
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 的資料流程呼叫已註冊的函數時,要求物件會是下列格式,其中的引數包含資料欄名稱、輸入 (bucketName、fileName、fileExtension、fileName、method 和 rowID) 及輸出 (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 專案 CLI) 或 API 來建立函數。例如,在 OCI 主控台中,依序按一下開發人員服務和函數,依照畫面中的指示建立應用程式和一或多個函數。如需詳細資訊,請參閱 Creating Functions in OCI Documentation。如果您是第一次建立函數,請依照端對端範例 Creating, Deploying, and Invoking a Helloworld Function 中的步驟進行。任何要在 Oracle Analytics 中使用的函數都必須包含任意形式標記 oac-compatible=true (請參閱上述的關於在 Oracle Analytics 設定使用 OCI Functions)。
在 OCI 主控台建立函數時的一些秘訣
若要整合 Oracle Analytics 與 OCI Functions,請確保您有必要的安全原則。
您在 Oracle Analytics Cloud 與 OCI 租用戶之間的連線指定的 OCI 使用者,對於包含您要使用之 OCI 資源的區間,必須具備讀取、寫入和刪除許可權。確定 OCI 使用者屬於具備以下最低 OCI 安全原則的使用者群組。當您從 Oracle Analytics 連線 OCI 租用戶時,可以使用 OCI API 金鑰或資源主體。
註:
對於資源主體,若要包含區間下的所有 Analytics 執行處理,請指定:{request.principal.type='analyticsinstance', request.principal.compartment.id='<compartmentA_ocid>'},而不是 {request.principal.id='<analytics_instance_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 Functions 轉換 Oracle Analytics 的資料。
| 作業 | 描述 | 其他資訊 |
|---|---|---|
|
在 OCI 中建立函數 (需要函數開發人員權限) |
在您的 OCI 租用戶建立函數,並確定函數符合為搭配 Oracle Analytics 使用而指定的先決條件。 |
|
| 指定 OCI 原則 | 請確保您擁有使用 API 金鑰或資源主體連線所需的 OCI 原則。 | 整合 OCI Functions 與 Oracle Analytics 所需的原則 |
| 將 Oracle Analytics 連線至您的 OCI 租用戶 (需要管理員或 DV 作者權限) | 在 Oracle Analytics 中,建立您的 OCI 租用戶連線。 | |
| 在 Oracle Analytics 註冊 OCI Functions (需要管理員或 DV 作者權限) | 在 Oracle Analytics 註冊 OCI Functions 以便從資料流程呼叫。 | |
| 使用 OCI Functions 轉換資料 (需要管理員或 DV 作者權限) | 建立資料流程,然後使用套用自訂命令檔步驟呼叫 OCI 函數。 |