Amazon Redshift:标量udf执行失败

时间:2019-08-26 12:58:12

标签: amazon-redshift

尝试执行在redshift集群中创建的标量Python UDF,但收到以下错误消息。

在SQL Workbench / J连接器上收到错误消息

执行SQL命令时发生错误: 从emp中选择f_py_tokenize(name);

  

Amazon无效操作:ConnectionError:   HTTPSConnectionPool(host ='',port = 443):超过最大重试次数   网址:/xyz/rest/v2.0/tokenize(由   NewConnectionError(':无法建立新的conn详细信息:
  -----------------------------------------------错误:ConnectionError :HTTPSConnectionPool(host ='',port = 443):最大值   网址超出了重试次数:/xyz/rest/v2.0/tokenize(由   NewConnectionError(':无法建立新的conn代码:10000   上下文:UDF查询:203597位置:udf_client.cpp:369
  流程:query1_121_203597 [pid = 7420]
  -----------------------------------------------; [SQL State = XX000,DB Errorcode = 500310] 1条语句失败。

     

执行时间:0.8秒

在svl_udf_log表中找到错误消息

  

ConnectionError:HTTPSConnectionPool(host ='',port = 443):最大值   网址超出了重试次数:/xyz/rest/v2.0/tokenize(由   NewConnectionError(':无法建立新的连接:[Errno 13]   权限被拒绝'

我正在使用SQL Workbench / J连接器连接到redshift DB以执行查询。也使用了redshift的内置查询编辑器,但没有继续。

这是我的代码

create function f_py_tokenize (data varchar)
  returns varchar
stable
as $$
    import requests
    import json
    import urllib3
    urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
    url = 'https://<IP>/xyz/rest/v2.0/tokenize'
    tokentemplate="redshift-template2"
    tokengroup="redshift-group2"
    data = {"data": data, "tokentemplate": tokentemplate, "tokengroup": tokengroup}
    data_json = json.dumps(data)
    headers = {'Content-type': 'application/json'}
    basicAuth = ('user', 'pwd')
    session = requests.Session()
    session.verify = False
    response = session.post(url, data=data_json, headers=headers, auth=basicAuth, timeout=10)
    return response.json().get('token')
$$ language plpythonu;

上面的代码将POST请求发送到令牌化服务器,并返回接收到的结果。

如果作为python程序执行,但代码无法完美运行,但在redshift集群中无法作为UDF执行。我希望它也可以在UDF中使用。

0 个答案:

没有答案