Creación de tablas virtuales

Objective

After completing this lesson, you will be able to cree y administre tablas virtuales en esquemas clásicos y contenedores HDI, y consuma tablas virtuales de fuentes remotas.

Tablas virtuales

Acceso a objetos remotos

Para acceder a datos de objetos específicos de un sistema remoto (objetos remotos), SAP HANA implementa tablas virtuales. Las tablas virtuales son objetos de catálogo y se encuentran en un esquema.

Una tabla virtual da acceso a un objeto remoto (una tabla o una vista en el siguiente ejemplo).

Esta diapositiva explica el concepto de tablas virtuales.

Nota

Aquí llamamos deliberadamente artefactos en el sistema remoto "objetos", y no "tablas", por al menos dos razones:
  • En primer lugar, el tipo de artefactos remotos depende del sistema remoto. En un sistema de base de datos, por supuesto, podrían ser tablas. Pero en un sistema de archivos, no hay tablas, sino archivos. Un archivo .csv o .txt con una estructura bien definida se puede convertir en una tabla virtual, pero esto depende de la capacidad del adaptador y requiere una definición de metadatos para identificar tipos de columna, entre otros.
  • Además, incluso en un sistema de base de datos remoto, hay tablas y vistas clásicas. La mayoría de los adaptadores pueden acceder a tablas remotas y vistas remotas de forma similar.

Una vez creadas las tablas virtuales, los procesos de base de datos pueden consumirlas como si se encontraran físicamente en la base de datos de destino. Sin embargo, el principio clave de las tablas virtuales es que no almacenan los datos en la base de datos local, sino solo los metadatos. En su lugar, exponen datos remotos a través de su fuente remota de soporte cada vez que se ejecuta una consulta encima de ellos.

Nota

Es posible un enfoque alternativo, que es consumir datos remotos sin tablas virtuales. Se denomina Base de datos vinculada y solo está disponible con fuentes remotas de Smart Data Access. El concepto, los beneficios y las limitaciones se analizan más adelante.

Definición de tabla virtual

Una tabla virtual tiene dos partes en sus definiciones:

  • El identificador de la tabla virtual
  • El identificador de objeto remoto, incluida la referencia a la fuente remota
Esta diapositiva ofrece un resumen de los atributos de la tabla virtual.

Nota

El nombre de la base de datos remota puede ser <NULL> incluso si el sistema remoto es realmente una base de datos. Esto se debe a que en algunas configuraciones, por ejemplo, con SAP HANA como sistema remoto, el objeto fuente remoto ya determina la base de datos con el host y el puerto.

Con otros tipos de sistemas remotos, una única fuente remota puede hacer referencia a un servidor de base de datos en el que se puede acceder a varias bases de datos. Aquí es donde se necesita la configuración de la base de datos remota en una definición de tabla virtual.

Consideración de seguridad para tablas virtuales

Al crear tablas virtuales, debe cumplir una serie de requisitos previos relacionados no solo con la disponibilidad de la fuente remota y el sistema remoto, sino también con las autorizaciones implementadas en ambos sistemas. Aquí están.

En el sistema local

Para crear una tabla virtual, los requisitos previos para el usuario local son los siguientes:

  • Al usuario local que ha creado la fuente remota se le concede automáticamente la autorización para crear tablas virtuales en esta fuente remota.
  • Cualquier otro uso requiere el privilegio CREATE VIRTUAL TABLE en la fuente remota.
  • En cualquier caso, el usuario local necesita CREATE ANY privilegios en el esquema donde se almacenará la tabla virtual.

En el sistema remoto

La configuración de credenciales de la fuente remota (o una credencial secundaria existente para su usuario en esa fuente remota) determina qué usuario remoto accede al objeto remoto/fuente.

Atención

Si no existen credenciales para la fuente remota (ni el usuario técnico ni las credenciales secundarias), no se podrá acceder a los objetos remotos. Esto se puede trabajar para algunos tipos de fuentes remotas, pero generalmente no se recomienda.

Como regla general, cuando crea una tabla virtual que apunta a un sistema de base de datos remoto, el usuario remoto derivado de la definición de fuente remota (o una credencial secundaria existente asociada a su usuario) solo necesita laCATALOG READautorización (SAP HANA) o un equivalente, pero NO necesariamente una autorización SELECT en la tabla remota o vista (o su esquema que lo contiene).

Nota

Esto permite una configuración de seguridad conveniente al utilizar credenciales secundarias; de hecho, un usuario que no tenga más del privilegio CATALOG READ (o equivalente) puede crear tablas virtuales sin poder seleccionar los datos de los objetos fuente correspondientes.

¿Cómo crear una tabla virtual?

Una tabla virtual se puede crear de dos maneras diferentes:

  • Desde el explorador de base de datos de SAP HANA, utilizando el catálogo
  • Con una sentencia SQL

Configuración de tabla virtual con la interfaz gráfica de usuario

Con el editor basado en formularios, utiliza una fuente remota existente para enumerar los objetos a los que da acceso y, a continuación, crear objetos virtuales para uno o varios de ellos.

Esta diapositiva muestra cómo utilizar la lista remota de objetos fuente.

Con el enfoque basado en formularios, primero selecciona objetos remotos y, a continuación, define dónde almacenar la tabla virtual y cómo nombrarlos.

Analicemos primero los diferentes elementos que identifican objetos remotos.

  • La fuente remota es un elemento obligatorio, como se ha comentado anteriormente.
  • El elemento Base de datos se utiliza para algunos tipos de fuentes remotas (es decir, algunos adaptadores), cuando la fuente remota no hace referencia a una base de datos específica.

    Un caso de uso común es cuando un sistema de base de datos remoto puede dar acceso a más de una base de datos desde un único host y puerto.

    Para SAP HANA como sistema remoto, la fuente remota siempre especifica una única base de datos de destino. Como consecuencia, la parte de la base de datos siempre es <NULL>.

  • Esquema

    El esquema es un artefacto clásico en topología de base de datos. En la mayoría de los sistemas de base de datos, incluidos SAP HANA, las tablas, las vistas y muchos otros objetos, se encuentran en esquemas. Sin embargo, el concepto de esquema no siempre existe. Por ejemplo, con el adaptador de fichero SDI, no hay ningún esquema. Por lo tanto, la parte Esquema también es <NULL>.

  • Objeto

    Finalmente, el objeto remoto se identifica con su nombre. Este elemento es obligatorio en cualquier definición de tabla virtual.

Una vez que haya seleccionado uno o varios objetos para los que crear una tabla virtual, debe definir los identificadores de las tablas virtuales en su sistema SAP HANA local (destino).

  • Si crea una única tabla virtual, la ventana de diálogo le pedirá el nombre del objeto. Por el contrario, si crea varias tablas virtuales, la ventana de diálogo, como se muestra en el ejemplo, le pide un prefijo que se añadirá a todos los nombres de los objetos remotos.

    Consejo

    En general, se recomienda utilizar un prefijo que ayude a identificar tablas virtuales. Como recordatorio, incluso si las tablas virtuales tienen un icono dedicado en el explorador de catálogos, aún se enumeran con otras tablas de filas y columnas clásicas, por lo que un prefijo específico puede ayudar.
  • Por último, pero no menos importante, se debe especificar el esquema donde crear las nuevas tablas virtuales. De forma predeterminada, se establece el esquema de su usuario.

Inicie este vídeo para aprender a crear una tabla virtual con la interfaz gráfica de usuario del explorador de base de datos de SAP HANA.

Configuración de tabla virtual con SQL

Además de la lista de objetos fuente remotos en el explorador de base de datos SAP HANA, puede crear tablas virtuales con sentencias SQL. Esto es útil cuando ya conoce los identificadores de objetos remotos, especialmente si desea crear tablas virtuales en masa.

La sentencia es la siguiente:

Code Snippet
12
CREATE VIRTUAL TABLE <schema>.<virtual_table_name> AT <remote_source>.<database>.<schema>.<object_name>;

La información que ya se ha analizado sobre cómo definir los objetos remotos al crear una tabla virtual desde la interfaz gráfica de usuario se aplica de la misma manera. Como en cualquier sentencia SQL en SAP HANA, los identificadores deben estar entre comillas dobles o se interpretan automáticamente como que no distinguen entre mayúsculas y minúsculas (y se almacenan en mayúsculas).

En algunos escenarios, es posible que <database> y/o <schema> remotos deban fijarse en "<NULL>".

Atención

Incluso si utiliza identificadores sin comillas para la fuente remota o el nombre de objeto, el valor <NULL> para una base de datos o esquema, si procede, debe citarse SIEMPRE. Sin las comillas dobles, la sentencia SQL fallará.

Este es un ejemplo de dos sentencias SQL para crear las mismas tablas virtuales que las que hemos creado anteriormente basadas en objetos en el esquema EPM_MODEL remoto (fuente CL_RS_OP_SDA):

Code Snippet
12345
CREATE VIRTUAL TABLE "CL_DATA_ENGINEER_FED"."VT_SNWD_PO" AT "CL_RS_OP_SDA"."<NULL>"."EPM_MODEL"."SNWD_PO"; CREATE VIRTUAL TABLE "CL_DATA_ENGINEER_FED"."VT_SNWD_PO_I" AT "CL_RS_OP_SDA"."<NULL>"."EPM_MODEL"."SNWD_PO_I";

Si el usuario de sesión es CL_DATA_ENGINEER_FED, se podría omitir la mención de este esquema en el identificador de tabla virtual.

Inicie este vídeo para aprender a crear una tabla virtual con una sentencia SQL.

Definición de tabla virtual en un proyecto de SAP Business Application Studio

Acceso a objetos remotos desde un contenedor HDI

Cuando trabaja en proyectos de desarrollo o modelado en SAP Business Application Studio, tiene la posibilidad de consumir fuentes remotas y crear tablas virtuales desde dentro de un módulo de base de datos de SAP HANA (que contiene artefactos en tiempo de diseño), que se despliega en un contenedor HDI (artefactos de tiempo de ejecución).

Para ello se utiliza un artefacto de tipo diseño dedicado, .hdbvirtualtable.

Como recordatorio, una fuente remota en SAP HANA no es un objeto de esquema. Por lo tanto, no puede crear una fuente remota dentro del módulo HDB de un proyecto. Sin embargo, puede configurar su proyecto para que consuma una fuente remota existente.

Veamos cómo hacer esto.

Cómo consumir objetos remotos

El consumo de objetos remotos desde dentro de un contenedor HDI depende de los siguientes requisitos previos:

  • Se está ejecutando un servicio proporcionado por el usuario en el espacio de Cloud Foundry en el que tiene previsto desplegar su servicio de contenedor HDI.

    A este servicio proporcionado por el usuario se le debe asignar un usuario con las siguientes autorizaciones:

    CREATE VIRTUAL TABLE en la fuente remota que desea utilizar.

  • El servicio proporcionado por el usuario está vinculado a su proyecto en la definición de dependencia del archivo mta.yaml
  • Un archivo .hdbGrant proporciona los privilegios relevantes al usuario propietario del objeto HDI (#OO) que será propietario de los objetos de contenedor HDI.

Nota

El proyecto debe desplegarse correctamente después de realizar estas modificaciones, de modo que el propietario del objeto reciba realmente las autorizaciones relevantes, lo que le permite crear tablas virtuales.

Creación de tablas virtuales en SAP Business Application Studio

Para crear una tabla virtual en SAP Business Application Studio, cree un archivo de tiempo de diseño .hdbvirtualtable correspondiente. Este archivo se puede editar en un editor de texto o en un editor dedicado. Este último aporta un beneficio, que es la capacidad de leer la jerarquía de objetos fuente remota.

Esta diapositiva muestra cómo crear una tabla virtual en SAP Business Application Studio.

En un editor de texto, el mismo objeto de tiempo de diseño tendrá el siguiente aspecto:

Code Snippet
12
VIRTUAL TABLE "CL_V_SNWD_PO" AT "CL_RS_OP_SDA"."<NULL>"."EPM_MODEL"."SNWD_PO"

Se recomienda utilizar las comillas dobles para evitar inconsistencias en el uso de mayúsculas y minúsculas. En función de la convención para fijar nombres que haya elegido, también puede ser obligatoria. Por ejemplo, si planea utilizar nombres de objeto mezclando minúsculas y mayúsculas, si utiliza áreas de nombres en identificadores de objeto y/o estos identificadores incluyen puntos.

Nota

Tanto si utiliza delimitadores de comillas dobles como si no en general, la palabra clave "<NULL>" siempre debe estar entre comillas siempre que se utilice en una definición de tabla virtual. Esto se ilustra en el campo Nombre de base de datos en el ejemplo anterior.

En comparación con las tablas virtuales creadas en un esquema clásico, las que defina con un archivo de tiempo de diseño en un proyecto de SAP Business Application NO especifican un esquema, como es el caso de los proyectos de SAP Business Application Studio para cualquier otro objeto, como tablas, vistas de columna, etc.

En caso de que su convención para fijar nombres incluya un área de nombres en el identificador de objeto, debe añadir esta área de nombres como prefijo en el campo Nombre de tabla virtual de la siguiente manera: <name.space.specification>::<virtual_table_name>

Inicie este vídeo para aprender a crear tablas virtuales con archivos de tiempo de diseño en un proyecto de SAP Business Application Studio.

Consumir una tabla virtual

Una vez que una tabla virtual se ha creado correctamente, cualquier usuario con las autorizaciones adecuadas puede consumirla. Veamos las autorizaciones necesarias:

  • En el sistema local: SELECT privilegio en el objeto virtual.

    Este es el privilegio clásico necesario para acceder a los datos desde una tabla. Se puede conceder a un usuario o (preferiblemente) a un rol, ya sea en una tabla virtual específica o en todo el esquema.

  • En el sistema remoto: SELECT en el objeto remoto

    El consumo de una tabla virtual requiere que el usuario remoto derivado de la definición de fuente remota (usuario técnico o una credencial secundaria asignada a usted para esta fuente remota) conceda acceso al objeto remoto. En un sistema de base de datos remoto, esto generalmente se concede mediante una autorización SELECT.

    Nota

    En los sistemas fuente que no son bases de datos, por ejemplo, un sistema de archivos, puede haber una forma diferente de configurar el acceso a los datos. En estos casos, no siempre es posible utilizar credenciales secundarias. Por ejemplo, el FileAdapter de la integración de datos inteligentes de SAP HANA puede almacenar un token para asegurar el acceso a un repositorio de archivos. Este token se utiliza en la definición de seguridad de origen remoto.

Administración de fuente remota

Más allá de la creación de una fuente remota, un administrador de aprovisionamiento de datos es responsable de su mantenimiento. Esto incluye, por ejemplo, autorizaciones de fuentes remotas, modificaciones en la definición de fuentes remotas o en la configuración de seguridad. Esto también puede ser el borrado de una fuente remota cuando ya no sea necesaria.

Hagamos hincapié en un aspecto muy importante de este mantenimiento. Las tablas virtuales dependen de una fuente remota. Por lo tanto, en cuanto se define una tabla virtual sobre una fuente remota, NO PUEDE eliminar la fuente remota mientras conserva las tablas virtuales.

Afortunadamente, puede modificar la definición de fuente remota aunque tenga tablas virtuales definidas.

Actualización de privilegios en una fuente remota

Cuando se crea una fuente remota, el usuario que la ha creado es inicialmente la única con autorizaciones en esta fuente remota. Estos privilegios pueden o deben concederse a otros usuarios, dependiendo de cómo se configure el árbol de autorización en su organización.

Las autorizaciones de fuente remota son autorizaciones de objeto (hacen referencia a un objeto fuente remoto específico) y se pueden clasificar en dos categorías:

  • Autorizaciones de administración:
    • ALTER
    • DROP
  • Privilegios para operar la fuente remota:
    • CREATE VIRTUAL TABLE
    • LINKED DATABASE
    • CREATE REMOTE SUBSCRIPTION
    • PROCESS REMOTE SUBSCRIPTION EXCEPTION

Otro privilegio es CREDENTIAL ADMIN, que es necesario para administrar credenciales secundarias en una fuente remota que NO creó.

Todos estos privilegios se administran de forma clásica en el cockpit de SAP HANA o con sentencias GRANT y REVOKE en una consola SQL.

Modificación de una fuente remota

Para modificar una fuente remota, utilice la interfaz gráfica de usuario en SAP Database Explorer o ejecute una sentencia ALTER REMOTE SOURCE en una consola SQL.

Esto le permite modificar todos los elementos de una definición de fuente remota, EXCEPTO su nombre.

Nota

De hecho, el nombre de la fuente remota es lo que se utiliza para mantener la relación con las tablas virtuales creadas sobre la fuente remota.

Un escenario típico podría ser un sistema remoto que se mueve a un host diferente, la modificación de una configuración como el modo DML (lectura o lectura/escritura) o un esquema de alias. También podría ser una modificación en la definición de seguridad, por ejemplo, pasar del usuario técnico a las credenciales secundarias para permitir un acceso más detallado a objetos remotos.

Eliminación de una fuente remota

Teniendo en cuenta la diferencia entre modificar y eliminar una fuente remota, analicemos cómo eliminar una fuente remota.

Eliminación de una fuente remota mediante la interfaz gráfica de usuario

  1. En el explorador de base de datos de SAP HANA, navegue por el catálogo a la sección Fuentes remotas.
  2. Haga clic con el botón derecho en la fuente remota y seleccione Borrar.
  3. Seleccione la opción relevante:
    • Suelte la fuente remota si no hay otros objetos que dependan de ella
    • Soltar la fuente remota y cualquier otro objeto que dependa de ella
  4. Seleccione Eliminar.

Atención

Utilice la segunda opción con mucho cuidado, porque podría perder muchas tablas virtuales si elimina la fuente remota incorrecta.

Eliminar una fuente remota con SQL

En una consola SQL, elimina una fuente remota ejecutando una de las siguientes sentencias:

  • Para eliminar la fuente remota si no hay otros objetos que dependan de ella:
    Code Snippet
    1
    DROP REMOTE SOURCE <remote_source_name>;
  • Para eliminar la fuente remota y cualquier otro objeto que dependa de ella:
    Code Snippet
    1
    DROP REMOTE SOURCE <remote_source_name> CASCADE;

Atención

De nuevo, debe utilizar la opción CASCADE con mucho cuidado.