En mi entrada de blog introductoria relacionada con los servicios ABAP SQL (Consumo de entidades de vista de CDS mediante herramientas de cliente basadas en ODBC | Blogs de SAP), describí cómo exponer objetos CDS en un servicio SQL, cómo instalar el controlador ODBC para ABAP en Windows y cómo usarlo en Excel. En este blog, queremos mostrarle cómo usar el controlador ODBC para ABAP junto con Microsoft SQL Server.
SQL Server es una base de datos relacional bien conocida que permite crear objetos de bases de datos locales y acceder a ellos a través de SQL. Además, al igual que otros productos importantes de RDMS, admite una función federada que permite acceder a objetos de bases de datos remotas definidos en otras bases de datos. Las funciones de federación de bases de datos similares son, por ejemplo, SDA en SAP HANA o Db2 Federation en IBM Db2. En SQL Server, dichas bases de datos remotas configuradas se denominan «Servidores vinculados» («Fuentes remotas» en HANA SDA, «Fuentes de datos federadas» en IBM Db2).
Recientemente, el controlador ODBC para ABAP se mejoró y mejoró para permitir su uso con SQL Server. Por lo tanto, utilice al menos ODBC DRIVER FOR ABAP 1.0 – Patch Collection 5.
Si aún no ha definido un servicio SQL en su back-end ABAP y no ha instalado el controlador ODBC para ABAP en su host de Windows que contiene la instancia de SQL Server, siga el blog Consumo de entidades de vista de CDS mediante herramientas de cliente basadas en ODBC | Blogs de SAP). Agregue también un DSN (en el siguiente ejemplo llamado «ALX» en nuestro host de prueba de SQL Server).
SQL Server permite definir conexiones a bases de datos remotas y las llama «servidores vinculados». Puede usar un servidor vinculado para acceder a datos de diferentes orígenes de datos fuera de la instancia de SQL Server. SQL Server utiliza la interfaz de base de datos OLE DB para conectarse a las bases de datos remotas. De manera predeterminada, están disponibles varios proveedores OLE DB para productos de Microsoft. Se pueden conectar otros proveedores OLE DB específicos del proveedor (por ejemplo, para IBM Db2 y SAP HANA).
Ahora déjame mostrarte cómo definimos un servidor vinculado en el servidor SQL en nuestro escenario de prueba:
Para la base de datos ABAP, puede utilizar el «proveedor OLE DB de Microsoft para controladores ODBC» genérico. Este proveedor OLE DB proporciona un puente entre OLE DB y la interfaz ODBC.
Ahora puede definir un servidor vinculado para el «controlador ODBC para ABAP». En el General sección, simplemente ingrese el DSN preparado («ALX» en nuestro ejemplo):
En el Seguridad sección, eliges la opción “Estar hecho con este contexto de seguridad” e ingrese su nombre de usuario o contraseña ABAP. Tenga en cuenta que el cliente ABAP se define en las propiedades de DSN. El DSN también determina si el nombre de inicio de sesión remoto es un usuario ABAP o el nombre de alias de un usuario ABAP.
No es necesario cambiar nada más en el Opciones del servidor sección.
Una vez que se ha definido el servidor vinculado, puede abrir una nueva consulta en SQL Server Management Studio (SSMS) y ejecutar una consulta simple para recuperar datos del servidor ABAP. En nuestro ejemplo, consultamos el contenido de la tabla SYS.VIEWS.
Debe utilizar la sintaxis OPENQUERY para ejecutar la consulta de paso directamente en el destino. El servidor ABAP remoto compilará la consulta, la ejecutará y devolverá el resultado. SQL Server recupera el conjunto de resultados y puede unirlo con otros datos locales o remotos. Para más información, consulte OPENQUERY (Transact-SQL) – Servidor SQL | aprender.
Esta es solo una consulta de ejemplo. Para obtener más información sobre el dialecto SQL en los servicios ABAP SQL, consulte mi blog Consultas SQL en objetos CDS expuestos como servicio SQL | Blogs de SAP .
Como era de esperar, el plan de ejecución en SSMS parece bastante simple. La consulta se ejecuta completamente en el servidor ABAP de destino.
Con la sintaxis OPENQUERY, puede crear una consulta que combine datos remotos (obtenidos del servidor ABAP) con datos locales, como, por ejemplo, la salida de la vista del sistema. sys.bases de datos. Tenga en cuenta que este es solo un ejemplo de combinación cruzada, sin ninguna relación real entre estos dos conjuntos de datos.
SELECT *
FROM OPENQUERY(ALX, 'SELECT * FROM SYS.VIEWS')
cross join sys.databases
Estas consultas también se pueden encapsular en una definición de vista:
use testdb
go
create view joinABAP
as
SELECT *
FROM OPENQUERY(ALX, 'SELECT * FROM SYS.VIEWS') cross join sys.databases
GO
Un SELECCIONAR en la vista devolverá el conjunto de resultados deseado:
select top 10 * from dbo.joinABAP
where database_id = 5
go
Con estas consultas federadas, puede enriquecer los datos de una base de datos ABAP remota con datos locales de SQL Server o de otros servidores vinculados.
En algunos casos, es posible que solo desee extraer datos de un sistema ABAP e importarlos a una tabla de SQL Server local, a un archivo sin formato u otros destinos. Para este caso de uso, SQL Server ofrece un Importación y exportación de datos (64 bits) herramienta.
Después del inicio, la herramienta le pedirá una fuente de datos desde la cual se deben exportar los datos. Aquí eliges “Proveedor de datos de .Net Framework para Odbc”, que es otro controlador de puente genérico que permite usar controladores ODBC. Es interesante que en esta herramienta, Microsoft no ofrece el “Proveedor Microsoft OLE DB para controladores ODBC”puente que se utiliza para la definición de servidores vinculados. Sin embargo, como notará, este controlador de puente también funciona bien.
En la siguiente pantalla, complete las propiedades de conexión para el «Proveedor de datos de .Net Framework para Odbc». En este ejemplo, solo tiene que insertar el parámetro ConnectionString y la herramienta automáticamente dividirá esta cadena en subpropiedades. La forma de ConnectionString es como una cadena de conexión ODBC. Para el controlador ODBC, la forma más simple es la siguiente:
Dsn=
Después de esto, la herramienta de exportación/importación le pedirá una base de datos de destino. En este ejemplo, supongamos que desea importar datos a una base de datos local de SQL Server. Por lo tanto, eliges el “Cliente nativo de SQL Server 11.0 controlador” aquí e ingrese el nombre del servidor local y el nombre de una base de datos de prueba local (“testdb”).
En la pantalla siguiente, el asistente de importación y exportación le preguntará si desea exportar datos de tablas o vistas o si desea proporcionar su propia consulta SQL para extraer datos. En nuestras pruebas, el “.Net Framework Data Provider for Odbc” parece haber tenido problemas para extraer las tablas o vistas disponibles del sistema ABAP. Entonces, elegimos la segunda opción para extraer datos. Dado que aquí tenemos la opción de usar una simple consulta «SELECCIONAR *», esto tiene el mismo propósito.
Como ejemplo, hemos utilizado una consulta simple «SELECCIONAR * DESDE SYS.VIEWS» en la siguiente pantalla.
Si desea utilizar consultas más complejas, puede consultar el blog Consultas SQL en objetos CDS expuestos como servicio SQL | Blogs de SAPque describe el dialecto SQL para los servicios ABAP SQL con más detalle.
Como se mencionó en el blog anterior, el controlador ODBC para ABAP podría devolver datos de punto flotante decimal (el tipo específico del controlador SQL_DECFLOAT). Este tipo de datos no es compatible con SQL Server. Por lo tanto, si su consulta contiene dichos tipos de datos, debe insertar conversiones de tipos explícitas en la consulta (por ejemplo, a un tipo decimal de punto fijo que pueda contener los datos devueltos) para permitir que SQL Server importe los datos. Sin embargo, esto no es necesario en nuestro ejemplo aquí: nuestra consulta simple «SELECT * FROM SYS.VIEWS» devuelve solo tipos de datos similares a varchar y se puede consumir sin problemas.
Si desea importar a una tabla local de SQL Server, debe especificar una tabla existente en la siguiente pantalla o puede crear una nueva:
Para hacer esto, haga clic en Editar asignaciones. En esta pantalla, puede definir una tabla de destino y adaptar los tipos de columna de destino. También es posible que desee configurar el anulable bandera para columnas que podrían contener valores NULL.
ahora elige DE ACUERDO > Próximo > Próximo. Puede ignorar las advertencias y ejecutar la consulta inmediatamente eligiendo ejecutar inmediatamenteseguido por Próximo y Ejecutar. En nuestro caso, transferimos 623 filas de ABAP, a través de SYS.VIEWS, a una tabla de destino de SQL Server.
Tenga en cuenta que este asistente de exportación e importación crea un paquete SSIS (Servicios de integración de SQL Server), que puede ejecutarse directamente o guardarse y programarse para ejecutarse en otro momento.
Otros blogs relacionados con los servicios ABAP SQL o el controlador ODBC para ABAP:
Uso del controlador ODBC para ABAP en Linux | Blogs de SAP ,
Consumo de entidades de vista de CDS mediante herramientas de cliente basadas en ODBC | Blogs de SAP ,
Control de acceso para el servicio SQL de ABAP (1/3) – Establecer la escena | Blogs de SAP ,
Consultas SQL en objetos CDS expuestos como servicio SQL | Blogs de SAP
Enlaces a la documentación de SAP:
ODBC: plataforma ABAP, local (última versión)
ODBC: plataforma SAP BTP, ABAP (también conocida como Steampunk)
ODBC: S/4HANA Cloud (última versión)
Para todos los fanáticos de Microsoft SQL Server y ABAP: este blog describe cómo acceder a entidades CDS expuestas en una base de datos ABAP desde SQL Server. Usando un servidor vinculado para SQL Server, puede ejecutar consultas en una entidad ABAP CDS e incluso puede unir directamente datos de una entidad CDS con datos locales de SQL Server. Con el asistente de exportación e importación, puede extraer datos de ABAP en una tabla local de SQL Server u otros destinos.
Háganos saber cómo funciona esto para usted y no dude en publicar preguntas y sugerencias adicionales aquí o contactarnos directamente.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073