У меня есть конкретный запрос с объединениями и псевдонимами, и мне нужно получить имя столбца для запроса REST в Talend.
Я использую Talend Open Studio for Data Integration 6.2, и у меня есть база данных Oracle 11g с учетной записью только для чтения. Я могу выполнять сценарии с помощью Talend, например, запрос:
select
u.name as "user",
f.name as "food",
e.rate
from
Users as u
join Eval as e on u.user_id = e.user_id
join Food as f on e.food_id = f.food_id
where
1 = 1
должен дать следующий результат:
+------+--------+------+
| user | food | rate |
+------+--------+------+
| Baba | Donuts | 16.0 |
| Baba | Cheese | 20.0 |
| Keke | Pasta | 12.5 |
| Keke | Cheese | 15.0 |
+------+--------+------+
И я пытаюсь получить столбцы (в правильном порядке) следующим образом, используя скрипты или Talend:
+--------+
| Column |
+--------+
| user |
| food |
| rate |
+--------+
Есть ли способ запросить базу данных Oracle, чтобы получить столбцы или использовать talend для их извлечения?
Благодаря Marmite Bomber был обнаружен дубликат здесь для подхода Oracle. Теперь нам нужен Talend подход к проблеме.


Вот ссылка на ветку сообщества оракула, которая должна ответить на ваш вопрос
Это полезно, если нам нужны столбцы из таблицы, но в моем запросе у меня есть несколько таблиц, и мне не нужны все столбцы из всех таблиц, а только выбранные.
Я не могу написать комментарий, поэтому публикую это как ответ:
SELECT column_name
FROM all_tab_cols
WHERE table_name = 'table_name_here'
Извините, йога, ваш ответ неверен. По вашему запросу вы можете получить столбец только из определенной таблицы. При вашем подходе к ответу на вопрос вы должны создать временную таблицу на основе запроса, а затем выбрать имена столбцов. Проблема в том, что я не могу писать в базу данных по требованиям безопасности.
Вы можете попробовать это на tJavaRow, следуя вашему компоненту DBInput:
for (java.lang.reflect.Field field: row1.getClass().getDeclaredFields()) {
context.columnName = field.getName();
System.out.println("Field name is " + context.columnName );
}
Замечено в справочном центре Talend здесь: https://community.talend.com/t5/Design-and-Development/resolved-how-to-get-the-column-names-in-a-data-flow/td-p/99172
Вы можете расширить это и поместить список столбцов в свой выходной поток:
//add this inside the loop, and 'columnNames' as an output row in tJavaRow schema
output_row.columnNames+=context.columnName+";";
С tNormalize после tJavaRow вы получите ожидаемый результат.
Спасибо ! Он работает отлично, я также добавляю «rownum = 1» в предложение where для повышения производительности :)
См. ответ на повторяющийся вопрос здесь, вы можете использовать подход
DBMS_SQLилиJDBC.