Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

如何获取数据源Oracle中的sys_context上下文信息 #1313

Closed
myokok opened this issue Sep 7, 2023 · 2 comments
Closed

如何获取数据源Oracle中的sys_context上下文信息 #1313

myokok opened this issue Sep 7, 2023 · 2 comments
Assignees

Comments

@myokok
Copy link

myokok commented Sep 7, 2023

Comment

请教个问题,我们的需求是Oracle数据传输到 Doris,有个值需通过Oracle中sys_context方法获取请求会话的上下文信息,该怎么操作呢?

@ply0011
Copy link
Collaborator

ply0011 commented Sep 8, 2023

在同步过程中,需要配合sys_context中查询到的数据进行加工处理,那么建议使用“增强js”节点中的查询能力和全局缓存能力完成

该节点可以填入javascript代码,更灵活的对每条源表数据进行加工

具体操作如下:
在源节点和目标节点中间,增加一个“增强js”节点,里面填写的代码可以参照下面的示范,根据实际情况进行编写

  1. 通过自定义sql查询能力,获取需要的数据
sys_context_result = source.executeQuery({sql: 'SELECT SYS_CONTEXT(...) FROM DUAL'})
  • source: 代表源库的连接,在这个场景,也就是oracle的连接
  • executeQuery: 固定的方法名
  • {sql: 'SELECT SYS_CONTEXT(...)'}: 入参,传入要执行的sql
  • sys_context_result: 返回查询的结果,此处应该是一个数组
  1. 如果查询出来的值不会随着同步数据而变化,则可以通过context.global进行缓存,不需要每次都去执行sql查询,降低源库压力
sys_context_result = context.global.sys_context_result
if(!context.global.sys_context_result) {
  // 没有缓存值,进行查询,并缓存
  context.global.sys_context_result = source.executeQuery({sql: 'SELECT SYS_CONTEXT(...) FROM DUAL'})
}
// 后续业务逻辑代码
...

如果使用的是Tapdata命令行,上面的操作会比较困难,建议前往Tapdata云版
云版连接

@ply0011 ply0011 self-assigned this Sep 8, 2023
@tjworks
Copy link
Contributor

tjworks commented May 25, 2024

Appears to be resolved

@tjworks tjworks closed this as completed May 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants