Ошибка при экспорте данных из SQL Server в Azure с использованием SQLServerBulkCopy - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь экспортировать данные из SQL Server в Azure, используя ODI и пользовательский LKM.Шаги в моем LKM выглядят так:

enter image description here

На шаге "Загрузка данных" я использую SQLServerBulkCopy, но когда KM пытается выполнить execut bulkCopy.setDestinationTableName (destinationTable));

Получает ошибку:

enter image description here

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 хочет выполнить это.

Я тоже не уверен, что делаю это правильно.Существует другой метод?

...