尝试执行在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中使用。