Невозможно использовать TransformFunction в vertica_sdk - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь выполнить пример строкового токенизатора vertica, написанный на python.

Вот ссылка на указанный пример: https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/ExtendingVertica/UDx/TransformFunctions/Python/ExampleStringTokenizer.htm?TocPath=Extending Vertica | Developing% 20User-Defined%20Extensions% 20 (UDxs) | Transform% 20Functions% 20 (UDTFs) | Python% 20API | _____ 2

Вот так выглядит мой код

import vertica_sdk
class StringTokenizer(vertica_sdk.TransformFunction):
    """
    Transform function which tokenizes its inputs.
    For each input string, each of the whitespace-separated tokens of that
    string is produced as output.
    """
    def processPartition(self, server_interface, input, output):
        while True:
            for token in input.getString(0).split():
                output.setString(0, token)
                output.next()
            if not input.next():
                break


class StringTokenizerFactory(vertica_sdk.TransformFunctionFactory):
    def getPrototype(self, server_interface, arg_types, return_type):
        arg_types.addVarchar()
        return_type.addVarchar()
    def getReturnType(self, server_interface, arg_types, return_type):
        return_type.addColumn(arg_types.getColumnType(0), "tokens")
    def createTransformFunction(cls, server_interface):
        return StringTokenizer()

Это то, что я получаю как мойвывод при выполнении команды.

create library sampy as '/home/dbadmin/udx/tokenize.py' language 'Python';

вывод

ROLLBACK 2175:  An error occurred when loading library file on node v_prmtest_node0001, message:
Failure in UDx RPC call InvokeCheckLibrary(): Error calling setupExecContext() in User Defined Object [] at [/scratch_a/release/svrtar19690/vbuild/vertica/OSS/UDxFence/PythonInterface.cpp:168], error code: 0, message: Error [/scratch_a/release/svrtar19690/vbuild/vertica/OSS/UDxFence/PythonInterface.cpp:204] function ['import']
(Python error type [<class 'AttributeError'>])
Traceback (most recent call last):
  File "/home/dbadmin/PRMTEST/v_prmtest_node0001_catalog/Libraries/02d86d505e41731d36151e9e9da31afc00b0000000561680/sampy_02d86d505e41731d36151e9e9da31afc00b0000000561680.py", line 2, in <module>
    class StringTokenizer(vertica_sdk.TransformFunction):
AttributeError: module 'vertica_sdk' has no attribute 'TransformFunction'

1 Ответ

0 голосов
/ 13 февраля 2019

Функция преобразования присутствует в палате vertica версии 9.

Причина, по которой я не смог выполнить свой код, заключается в том, что я использовал Vertica версии 8. Пользовательские функции преобразования Python поддерживаются тольков версии Vertica 9 или выше.UDTF могут быть написаны для Vertica 8 на Java, C ++ или R.

...