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