我有一个包含联接和别名的特定查询,我需要在Talend中检索REST请求的列名。
我正在使用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,已为here确定了Oracle方法的重复项。现在我们需要一个Talend方法来解决这个问题。
答案 0 :(得分:1)
您可以在DBInput组件之后的tJavaRow上进行尝试:
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+";";
在tJavaRow之后使用tNormalize,您应该获得预期的结果。
答案 1 :(得分:0)
这是指向oracle社区线程的链接,该链接应回答您的问题
答案 2 :(得分:0)
我无法发表评论,因此将其发布为答案:
def checkos(longName) {
if (longName.contains('Windows Server 2008')){
return 'Windows Server 2008' }
else { return null }
}
checkos('Microsoft Windows Server 2008 R2 Enterprise')