Скрипт выполнения строки SQL не может прочитать файл .sql. я получаю эту ошибку

01.02.2018 11:20:00 - Выполнить строку SQL script.0 - Мы не можем найти поле [C:\Users\abc\Documents\xyz\query\record.sql] во входном потоке!

Мои шаги включают -

  1. получить переменные - ввод
  2. Выполнить сценарий SQL строки - где я пытаюсь прочитать файл запроса
  3. вывод текстового файла

В сценарии SQL «Выполнение строки» я указал C:\Users\abc\Documents\xyz\query\record.sql в имени поля SQL.

ИЗМЕНИТЬ

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


person P.C    schedule 01.02.2018    source источник
comment
Что делает ваш скрипт SQL? Вы уверены, что он производит вывод?   -  person AlainD    schedule 03.02.2018


Ответы (2)


Я копирую/вставляю объяснение из документации двух параметров конфигурации из шага Выполнить скрипт Row SQL:

Имя поля SQL: поле, которое либо содержит SQL для выполнения, либо дополнительно указывает путь к файлу, содержащему SQL для выполнения.

и

Читать SQL из файла: если флажок установлен, параметр имени поля SQL указывает файл, содержащий SQL для выполнения, в противном случае параметр имени поля SQL указывает фактический SQL для выполнения. (Доступно с версии 5.0)

Таким образом, вы не можете указать путь к файлу в параметре Имя поля SQL, но вы можете указать поле из потока, которое содержит путь к файлу нужного sql. В противном случае вы должны определить в этой опции поле, содержащее текст sql.

Надеюсь, поможет.

ИЗМЕНИТЬ 1

Поскольку вам нужно выполнить запрос на выборку из файла, я бы рекомендовал шаг Dynamic SQL row, как показано на следующем изображении.

как работает динамическая строка SQL

Я думаю, что это сделает работу.

ИЗМЕНИТЬ 2

Следующее просто выполняет динамическое выполнение sql. Во-первых, вам нужно загрузить sql-запросы в поток. После этого задание будет выполнено для каждого sql. В этом задании устанавливается переменная, содержащая SQL-запрос, и затем выполняется преобразование. Это преобразование в основном представляет собой шаг Input Table, который динамически заполняет поле sql предыдущей установленной переменной sql.

выполнение динамического SQL-запроса Pentaho

Теперь я думаю, что это то, что вы ищете. Надеюсь, поможет.

person Felypp Oliveira    schedule 01.02.2018
comment
Одобряю с небольшим замечанием. Ни переменная Get, ни шаги Row-SQL не запустятся сами по себе. Вам нужно поставить Generate row с ограничением 1 перед переменной get. - person AlainD; 01.02.2018
comment
Ты прав. На самом деле Execute Row SQL Script не предназначен для запуска потока, но вы можете запустить его, используя другие шаги, а не только Generate Row, например. Data Grid и/или Input Table. - person Felypp Oliveira; 01.02.2018
comment
Итак, теперь я начал преобразование с создания строк с ограничением 1, и после этого я пытаюсь получить имя файла с опцией получения имени файла, а затем я передаю имя файла в скрипт Execute row SQL, а затем в имени поля SQL я передаю имя файла. но вместо выполнения файла .sql он печатает uri файла. - person P.C; 01.02.2018
comment
@P.C, вы можете попробовать шаг Data Grid. На вкладке Мета установите поле с именем имя файла типа String. На вкладке Данные задайте в столбце имя файла путь к файлу sql. Свяжите этот Data Grid с шагом Execute Row SQL Script. Установите здесь соединение, имя поля sql (должно быть имя файла) и установите флажок читать sql из файла . Это сделало работу за меня. Помните, что этот шаг не выводит строки из оператора select. Он предназначен в основном для выполнения операторов вставки/обновления/удаления. - person Felypp Oliveira; 02.02.2018
comment
Я пробовал это точно шаг за шагом, но в моем выходном файле выходным файлом снова является имя файла uri C:\Users\abc\Documents\xyz\query\record.sql, кроме того, я пытаюсь выполнить оператор выбора, выполнить скрипт строки sql должен работать, да? если нет, то можете ли вы предложить, какой вариант будет хорош для выполнения оператора select из файла? - person P.C; 02.02.2018
comment
@P.C, вы можете попробовать шаг Dynamic SQL row. В этом случае параметр имя поля SQL должен содержать запрос sql. В поле Шаблон SQL необходимо определить структуру возвращаемых данных (типы и порядок столбцов). Я добавлю пример в этот ответ. - person Felypp Oliveira; 02.02.2018
comment
это так не работает, мне нужна работа, которая может читать запрос и выводить текст сам по себе. определение макета возвращаемых данных не является опцией. прочитать файл sql - выполнить sql - текстовый вывод - person P.C; 02.02.2018
comment
@PC только что снова отредактировал мой ответ. Я думаю, это то, что вы ищете. - person Felypp Oliveira; 05.02.2018

Чтобы прочитать таблицу SQL, выполните шаг Table input и скопируйте и вставьте запрос в большую текстовую область.

Обратите внимание, что если у вас нет сложного соединения в запросе, вам редко приходится импортировать сценарии sql благодаря очень удобной кнопке Get SQL Statement.

Начните с оператора select без параметров. Как только это сработает, замените переменные на ${variable} и установите флажок Replace variable in script. (Предупреждаем, что есть некоторые ограничения из-за подготовленного оператора java SQL, например, у вас может не быть переменной в имени таблицы).

Если вы хотите получить сценарий из файла, сначала прочитайте файл с Table input в столбце и выберите этот столбец в Insert data from step из Table input.

Если у вас все еще есть переменные параметры либо в вашем файле, либо в имени таблиц, из которых вы выбираете, затем используйте Modified Javascript или Regex evaluator или любой другой шаг, чтобы заменить переменные их значением, и дайте полученный сценарий SQL для таблицу через Insert data from step.

Если у вас есть куча file.sql для чтения, не забудьте поставить галочку на кнопку Execute for each row.

Надеюсь это поможет.

person AlainD    schedule 03.02.2018
comment
Если вы хотите получить скрипт из файла, сначала прочитайте файл с помощью Table input..., как Table input используется для чтения файла? Насколько я знаю, этот шаг выполняет только выборки sql... - person Felypp Oliveira; 05.02.2018