SnapLogic Python для чтения и выполнения файла SQL

У меня есть простой SQL-файл, который я хотел бы прочитать и выполнить с помощью Python Script Snap в SnapLogic. Я создал файл библиотеки выражений для ссылки на учетную запись Redshift и включил его в качестве параметра в конвейер.

У меня есть код ниже из другого поста. Есть ли способ ссылки на параметр конвейера для подключения к базе данных Redshift, чтения загруженного файла SQL и выполнения команд?

fd = open('shared/PythonExecuteTest.sql', 'r')
sqlFile = fd.read()
fd.close()

sqlCommands = sqlFile.split(';')

for command in sqlCommands:
    try:
        c.execute(command)
    except OperationalError, msg:
        print "Command skipped: ", msg

1 ответ

Решение

Вы можете получить доступ к параметрам конвейера в скриптах, используя $_,

Допустим, у вас есть параметр конвейера executionId, Затем для доступа к нему в сценарии вы можете сделать $_executionId,

Ниже приведен тестовый конвейер.

трубопровод

Со следующим параметром конвейера.

Параметр конвейера

Ниже приведены данные испытаний.

данные испытаний

Ниже приводится сценарий

# Import the interface required by the Script snap.
from com.snaplogic.scripting.language import ScriptHook
import java.util

class TransformScript(ScriptHook):
    def __init__(self, input, output, error, log):
        self.input = input
        self.output = output
        self.error = error
        self.log = log

    # The "execute()" method is called once when the pipeline is started
    # and allowed to process its inputs or just send data to its outputs.
    def execute(self):
        self.log.info("Executing Transform script")
        while self.input.hasNext():
            try:
                # Read the next document, wrap it in a map and write out the wrapper
                in_doc = self.input.next()
                wrapper = java.util.HashMap()
                wrapper['output'] = in_doc
                wrapper['output']['executionId'] = $_executionId

                self.output.write(in_doc, wrapper)
            except Exception as e:
                errWrapper = {
                    'errMsg' : str(e.args)
                }
                self.log.error("Error in python script")
                self.error.write(errWrapper)

        self.log.info("Finished executing the Transform script")

# The Script Snap will look for a ScriptHook object in the "hook"
# variable.  The snap will then call the hook's "execute" method.
hook = TransformScript(input, output, error, log)

Выход:

выход

Здесь вы можете увидеть, что executionId был прочитан из параметров конвейера.

Примечание. Доступ к параметрам конвейера из сценариев является допустимым сценарием, но доступ к другим внешним системам из сценария является сложным (поскольку вам потребуется загрузить необходимые библиотеки) и не рекомендуется. Используйте оснастки, предоставленные SnapLogic, для доступа к внешним системам. Кроме того, если вы хотите использовать другие библиотеки внутри скриптов, попробуйте придерживаться Javascript вместо того, чтобы переходить на python, потому что есть много CDN с открытым исходным кодом, которые вы можете использовать в своих скриптах.

Кроме того, вы не можете получить доступ к любой настроенной библиотеке выражений непосредственно из скрипта. Если вам нужна какая-то логика в сценарии, вы должны оставить ее в сценарии, а не где-то еще. И нет никакого смысла в доступе к именам учетных записей в сценарии (или средствах сопоставления), потому что, даже если вы знаете имя учетной записи, вы не можете использовать учетные данные / конфигурации, хранящиеся в этой учетной записи напрямую; это обрабатывается SnapLogic. Используйте предоставленные оснастки и картографы как можно больше.


Обновление № 1

  • Вы не можете получить доступ к учетной записи напрямую. Счета управляются и используются внутри оснастки. Вы можете создавать и настраивать учетные записи только через вкладку учетных записей соответствующей привязки.
  • Старайтесь не использовать как можно больше скриптов; особенно, если вы можете сделать то же самое, используя обычные снимки.

Обновление № 2

Простейшее решение этого требования заключается в следующем.

  • Прочитать файл с помощью программы чтения файлов
  • Сплит на основе ;
  • Выполните каждую команду SQL, используя Generic JDBC execute Snap
Другие вопросы по тегам