可将 Oracle Analytics 与 Oracle Cloud Infrastructure (OCI) 函数集成,以便可以在数据流中使用它们转换数据。
您可以使用在 OCI 中创建的函数在 Oracle Analytics 中转换数据。例如,您可以使用语言转换函数将英语文本转换为西班牙语或德语。
您先在 Oracle Analytics 中注册 OCI 函数,然后具有 BI 服务管理员或 DV 内容作者权限的任何 Oracle Analytics 用户就可以在数据流中使用它们。
可在 OCI 控制台中创建函数,以便可以在 Oracle Analytics 数据流中使用它们转换数据。
关于在 Oracle Analytics 中注册 OCI 函数
在 Oracle Analytics 中注册 OCI 函数时,如果它在选择函数对话框中灰显,请检查是否为其配置了 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' 时,函数应以 JSON 对象形式按以下格式返回包含以下内容的函数定义(单词计数示例):status(returnCode 和 errorMessage)、outputs(输出列的 name 和 dataType)、parameters(输入参数的 name、description、type 等)、bucketName 等:
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 } }
在 func.py 中添加以下代码以在请求中的 funcMode 为 'describeFunction' 时返回 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 控制台中,依次单击开发人员服务和函数,然后按照屏幕上的说明来创建应用程序与一个或多个函数。有关详细信息,请参见有关在 OCI 中创建函数的文档。如果是第一次创建函数,请按照分步示例 Creating, Deploying, and Invoking a Helloworld Function(创建、部署和调用 Helloworld 函数)中的步骤操作。要在 Oracle Analytics 中使用的任何函数都必须包含自由形式标记 oac-compatible=true
(请参见上文的关于配置要在 Oracle Analytics 中使用的 OCI 函数)。
有关在 OCI 控制台中创建函数的提示
要将 Oracle Analytics 与 OCI 函数集成,请确保您具有所需的安全策略。
您在 Oracle Analytics Cloud 与 OCI 租户的连接中指定的 OCI 用户必须对您要使用的 OCI 资源所在的区间具有读取、写入和删除权限。确保该 OCI 用户所属的用户组至少具有以下 OCI 安全策略。从 Oracle Analytics 连接到 OCI 租户时,可以使用 OCI API 密钥或资源主体。
注:
对于资源主体,要将所有分析实例包含在一个区间下,请指定{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 函数转换 Oracle Analytics 中的数据。
任务 | 说明 | 详细信息 |
---|---|---|
在 OCI 中创建函数(需要函数开发人员权限) |
在 OCI 租户中,创建函数,并确保它们符合指定的先决条件以用于 Oracle Analytics。 |
|
分配 OCI 策略 | 确保您具有使用 API 密钥或资源主体进行连接所需的 OCI 策略。 | 将 OCI 函数与 Oracle Analytics 集成所需的策略 |
将 Oracle Analytics 连接到 OCI 租户(需要管理员或 DV 作者权限) | 在 Oracle Analytics 中,创建与 OCI 租户的连接。 | |
在 Oracle Analytics 中注册 OCI 函数(需要管理员或 DV 作者权限) | 在 Oracle Analytics 中,注册 OCI 函数,以便可以从数据流调用它们。 | |
使用 OCI 函数转换数据(需要管理员或 DV 作者权限) | 创建数据流,并使用应用定制脚本步骤调用 OCI 函数。 |