Please take this survey to help us learn more about how you use third party tools. Your input is greatly appreciated!

Passing List of Params while Calling REST API using PythonUDx

Hi Team,
I need a quick help in getting to know that: How can I pass below request packet to udx function which will call api with this request format,
Request:
[ {
"id" : ,
"values" : {
"variable_name1" : "value1",
"variable_name2" : "value2",
} },
{
"id" : ,
"values" : {
"variable_name1" : "value1",
"variable_name3" : "value3",
} }
]

Thanks

Answers

  • Bryan_HBryan_H Employee

    Could you elaborate more on the use case and data flow? If this is a parameter to the UDx, I would think you could convert to string and pass as VARCHAR. Or is it used inside the UDx? If so, return as string / VARCHAR, then parse into a flex table or flex column.

  • @Bryan_H said:
    Could you elaborate more on the use case and data flow? If this is a parameter to the UDx, I would think you could convert to string and pass as VARCHAR. Or is it used inside the UDx? If so, return as string / VARCHAR, then parse into a flex table or flex column.

    Hi Bryan,
    arg1=[{},{},{}]
    Let say, my udx function is GetApiResponse(arg1). In this scenario, how it will work as I want to pass list as a param to Udx function.
    Thanks !!

  • Bryan_HBryan_H Employee

    How about this python script "json_demo.py":

    import json
    import vertica_sdk

    class json_demo(vertica_sdk.ScalarFunction):
    def processBlock(self, server_interface, arg_reader, res_writer):
    while True:
    x = arg_reader.getString(0)
    d = json.loads(x)
    res_writer.setString(d["success"]+" "+str(d["status"])+" "+d["message"])
    res_writer.next()
    if not arg_reader.next():
    break

    class json_demo_factory(vertica_sdk.ScalarFunctionFactory):
    def getPrototype(self, srv_interface, arg_types, return_type):
    arg_types.addVarchar()
    return_type.addVarchar()
    def getReturnType(self, srv_interface, arg_types, return_type):
    return_type.addVarchar(80)
    def createScalarFunction(self, srv):
    return json_demo()

    Use this SQL to test:

    \set libfile '\''`pwd`'/json_demo.py\''
    CREATE LIBRARY JsonDemoFunctions AS :libfile LANGUAGE 'Python';

    -- Step 2: Create functions
    CREATE FUNCTION json_demo AS NAME 'json_demo_factory' LIBRARY JsonDemoFunctions;

    -- Step 3: Test
    SELECT json_demo('{"success": "true", "status": 200, "message": "Hello"}');

    -- Step 4: Clean up
    DROP LIBRARY JsonDemoFunctions CASCADE;

  • @Bryan_H said:
    How about this python script "json_demo.py":

    import json
    import vertica_sdk

    class json_demo(vertica_sdk.ScalarFunction):
    def processBlock(self, server_interface, arg_reader, res_writer):
    while True:
    x = arg_reader.getString(0)
    d = json.loads(x)
    res_writer.setString(d["success"]+" "+str(d["status"])+" "+d["message"])
    res_writer.next()
    if not arg_reader.next():
    break

    class json_demo_factory(vertica_sdk.ScalarFunctionFactory):
    def getPrototype(self, srv_interface, arg_types, return_type):
    arg_types.addVarchar()
    return_type.addVarchar()
    def getReturnType(self, srv_interface, arg_types, return_type):
    return_type.addVarchar(80)
    def createScalarFunction(self, srv):
    return json_demo()

    Use this SQL to test:

    \set libfile '\''`pwd`'/json_demo.py\''
    CREATE LIBRARY JsonDemoFunctions AS :libfile LANGUAGE 'Python';

    -- Step 2: Create functions
    CREATE FUNCTION json_demo AS NAME 'json_demo_factory' LIBRARY JsonDemoFunctions;

    -- Step 3: Test
    SELECT json_demo('{"success": "true", "status": 200, "message": "Hello"}');

    -- Step 4: Clean up
    DROP LIBRARY JsonDemoFunctions CASCADE;

    Thanks Bryan !!

Leave a Comment

BoldItalicStrikethroughOrdered listUnordered list
Emoji
Image
Align leftAlign centerAlign rightToggle HTML viewToggle full pageToggle lights
Drop image/file

Can't find what you're looking for? Search the Vertica Documentation, Knowledge Base, or Blog for more information.