Я пытаюсь экспортировать данные из SQL Server в Azure, используя ODI и пользовательский LKM.Шаги в моем LKM выглядят так:
![enter image description here](https://i.stack.imgur.com/kgeD2.png)
На шаге "Загрузка данных" я использую SQLServerBulkCopy, но когда KM пытается выполнить execut bulkCopy.setDestinationTableName (destinationTable));
Получает ошибку:
![enter image description here](https://i.stack.imgur.com/wV9AE.png)
ODI-1228: сбой задачи SrcSet0 (загрузка)на целевом соединении MICROSOFT_SQL_SERVER BJE-Azure-TEST.Причина: java.sql.SQLException: [FMWGEN] [Драйвер JDBC SQLServer] [SQLServer] Неверный синтаксис рядом с '/'.на weblogic.jdbc.sqlserverbase.ddb_.b (неизвестный источник) на weblogic.jdbc.sqlserverbase.ddb_.a (неизвестный источник) на weblogic.jdbc.sqlserverbase.ddb9.b (неизвестный источник) на weblogic.jdbc.sqlserverbase..a (неизвестный источник) на weblogic.jdbc.sqlserver.tds.ddr.v (неизвестный источник) на weblogic.jdbc.sqlserver.tds.ddr.a (неизвестный источник) на weblogic.jdbc.sqlserver.tds.ddq.a(Неизвестный источник) на weblogic.jdbc.sqlserver.tds.ddr.a (Неизвестный источник) на weblogic.jdbc.sqlserver.ddj.m (Неизвестный источник) на weblogic.jdbc.sqlserverbase.ddel.e (Неизвестный источник) на weblogic.jdbc.sqlserverbase.ddel.a (Неизвестный источник) на weblogic.jdbc.sqlserverbase.ddde.a (Неизвестный источник) на weblogic.jdbc.sqlserverbase.ddel.v (Неизвестный источник) на weblogic.jdbc.sqlserverbase.ddelr.(Неизвестный источник) в weblogic.jdbc.sqlserverbase.ddde.execute (Неизвестный источник) в oracle.odi.runtime.agent.execution.sql.SQLCommand.execute (SQLCommand.java:163) в oracle.odi.runtime.agent.execute.sql.SQLExecutor.execute (SQLExecutor.java:102) в oracle.odi.runtime.agent.execution.sql.SQLExecutor.execute (SQLExecutor.java:1) при oracle.odi.runtime.agent.execution.TaskExecutionHandler.handleTask (TaskExecutionHandler.java:50) в com.sunopsis.dwg.dbobj.SnpSessTaskSql.processTask (SnpSessTaskSql.java: 2925) по адресу com.sunopsis.dwg.dbobj.SnpSessTaskSql.treatTask (SnpSessTaskSql.java:2637) по адресу com.sunopsis.dwg.dbobj.SnpSessStep.treatAttachedTasks:s.pj.dbobj.SnpSessStep.treatSessStep (SnpSessStep.java:468) в com.sunopsis.dwg.dbobj.SnpSession.treatSession (SnpSession.java:2093) в oracle.odi.runtime.agest.processor.essessReReception0oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor.access $ 0 (StartSessRequestProcessor.java:304) в oracle.odi.runtime.agent.processor.impl.StartSessRequestProcessor $ StartSessTask.doExecute (StartSessRequestProcessor.java:874) в oracle.odi.runtime.agent.processor.task.AgentTask.execute (AgentTask.java.1): 1runtime.agent.support.DefaultAgentTaskExecutor $ 2.run (DefaultAgentTaskExecutor.java:84) в java.lang.Thread.run (Thread.java:745)
Код в шаге «Загрузка данных»:
<%
import com.microsoft.sqlserver.jdbc;
import com.microsoft.sqlserver.jdbc.SQLServerBulkCopy;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//String selectQuery = "select TOP(10) " +odiRef.getColList("", "[EXPRESSION]", ", ", "", "")+ " from " +odiRef.getSrcTablesList("", "[SCHEMA].[TABLE_NAME] AS [POP_TAB_ALIAS]", ", ", ""); //+ " where (1=1) " +odiRef.getJoinList("and ","([EXPRESSION])"," and ","") + odiRef.getFilterList("and ","([EXPRESSION])"," and ","") + odiRef.getGrpBy() + odiRef.getHaving();
String selectQuery = "select TOP(10) R03_DATA.Id, R03_DATA.ItemId, R03_DATA.StepId, R03_DATA.StepName, R03_DATA.ResultState, R03_DATA.ResultString, R03_DATA.ResultDecimal, R03_DATA.LimitLow, R03_DATA.LimitHigh, R03_DATA.ComparisonType, R03_DATA.Unit, R03_DATA.StationNo, R03_DATA.FailGroup, R03_DATA.ResultType, R03_DATA.Report, R03_DATA.Error, R03_DATA.Executiontime from dbo.r03_data AS R03_DATA ";
String sourceUrl = "***connection to MS SQL***";
String destinationUrl = "***connection to Azure ***";
String destinationTable = "r03_data";
//destinationTable = odiRef.getTable("L", "COLL_NAME", "A");
ResultSet SourceData;
ResultSet DestinationData;
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
try {
out.println("--select query: " +selectQuery);
Connection sourceConnection = DriverManager.getConnection(sourceUrl);
Statement stmt = sourceConnection.createStatement();
Connection destinationConnection = DriverManager.getConnection(destinationUrl);
Statement destStmt = destinationConnection.createStatement();
SQLServerBulkCopy bulkCopy = new SQLServerBulkCopy(destinationConnection);
SourceData = stmt.executeQuery(selectQuery);
DestinationData = destStmt.executeQuery(selectQuery);
bulkCopy.setDestinationTableName(destinationTable);
out.println("--destination table: " +destinationTable);
out.println("--select query: " +selectQuery);
} catch(SQLException se)
{
out.println("--Exception Occured while running Flex SQL. :"+se);
}
%>
Я предполагаю, что SQLServerBulkCopy пытается записать что-то в out.println, а после этого ODI хочет выполнить это.
Я тоже не уверен, что делаю это правильно.Существует другой метод?