Это скрипт, который отлично работает с psql shell:
insert into tempsdf select * from source where source.id = '123';
Вот некоторые из моих тестов в SqlActivity с использованием Data-Pipelines:
Тест 1 : Использование? '
insert into mytable select * from source where source.id = ?;
- отлично работает, если используется через параметр «script» и «scriptURI» объекта SqlActivity.
где "ScriptArgument" : "123"
здесь? может заменить значение условия, но не само условие.
Тест 2: Использование параметров работает, когда команда задана только с помощью опции «script»
где http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-custom-templates.html ( когда вы используете только параметры, убедитесь, что вы удалили неиспользуемые скриптыArguments - в противном случае он все равно будет бросать и ошибка) FAILED TESTS и inferences: insert в? выберите * из источника, где source.id =?; вставить? выберите * из источника, где source.id = '123'; Обе вышеприведенные команды не работают, потому что Названия таблиц не могут использоваться для заполнителей для аргументов сценария. '?' 's может использоваться только для передачи значений для условия сравнения и значений столбца. insert into # {myTable} select * from source где source.id = # {мой ID}; - не работает, если используется как «SciptURI» вставить в tempsdf select * из источника, где source.id = # {myId}; - не работает при использовании с 'ScriptURI' Выше 2 команды не работают, потому что Параметры не могут быть оценены, если скрипт хранится в S3. вставить в tempsdf select * из источника, где source.id = $ 1; - не работает с 'scriptURI' вставить в значения tempsdf ($ 1, $ 2, $ 3); - не работает. с использованием $ 's - не работает ни в одной комбинации Другие тесты: "ScriptArgument" : «123» «ScriptArgument»: «456» «ScriptArgument»: «789» scriptArguments будет следовать порядку, который вы вставляете и заменяет «?» в скрипте. insert into #{myTable} select * from source where source.id = ?;
- Работает нормально, если используется через ' скрипт ' insert into #{myTable} select * from source where source.id = #{myId};
#{myTable}
, #{myId}
- параметры, значение которых могут быть объявлены в шаблоне.
insert into tempsdf values (?,?,?);
- работает как scriptURI, скрипт и переводится на insert into tempsdf values ('123','456','789');