Creating Virtual Tables

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 a artefactos en el sistema remoto "objetos", y no "tablas", por al menos dos motivos:
  • En primer lugar, el tipo de artefactos remotos depende del sistema remoto. En un sistema de base de datos, por supuesto, estas 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 puede convertirse 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 las pueden consumir como si estuvieran ubicadas 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 acceso a datos inteligentes. 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 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 no solo en relación con la disponibilidad de la fuente remota y el sistema remoto, sino también con las autorizaciones vigentes 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 el origen remoto.
  • En cualquier caso, el usuario local necesita CREATE ANY privilegios en el esquema en el que 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 para el usuario técnico ni para las credenciales secundarias), no es posible acceder a los objetos remotos. Esto se puede solucionar para algunos tipos de fuentes remotas, pero generalmente no se recomienda.

Como regla general, al crear una tabla virtual que apunte 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 equivalente, pero NO necesariamente una autorización SELECT en la tabla o vista remota (o su esquema que contiene).

Nota

Esto permite una configuración de seguridad conveniente al utilizar credenciales secundarias; de hecho, un usuario con no más que el 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, mediante el catálogo
  • Con una sentencia SQL

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

Con el editor basado en formulario, puede utilizar 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 de objetos fuente remotos.

Con el enfoque basado en formulario, primero debe seleccionar los objetos remotos y, a continuación, definir dónde almacenar la tabla virtual y cómo nombrarla.

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 base de datos siempre es <NULL>.

  • Esquema

    El esquema es un artefacto clásico en la 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 archivos 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, el cuadro de diálogo le pedirá el nombre del objeto. Por el contrario, si crea varias tablas virtuales, el cuadro 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 clásicas de filas y columnas, por lo que un prefijo específico puede ayudar.
  • Por último, pero no menos importante, se debe especificar el esquema en el que se deben crear las nuevas tablas virtuales. De forma predeterminada, es 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.

El enunciado es el siguiente:

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

La información ya analizada 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. Al igual que 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 el <database> remoto y/o <schema> 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, SIEMPRE debe estar entre comillas. 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 creamos anteriormente a partir de objetos en el esquema remoto EPM_MODEL (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 SAP HANA (que contiene artefactos de 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 hacerlo.

Cómo consumir objetos remotos

El consumo de objetos remotos desde dentro de un contenedor HDI se basa en 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 el servicio de contenedor HDI.

    Este servicio proporcionado por el usuario debe tener asignado un usuario con los siguientes privilegios:

    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 .hdbconcesiones otorga los privilegios relevantes al usuario Propietario del objeto HDI (#OO) que será propietario de los objetos del contenedor HDI.

Nota

El proyecto debe desplegarse correctamente después de realizar estas modificaciones, de modo que al propietario del objeto se le concedan 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 una ventaja, 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 en 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 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 en 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 creada correctamente una tabla virtual, 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 que se le haya asignado para esta fuente remota) dé acceso al objeto remoto. En un sistema de base de datos remoto, esto se concede generalmente a través de un privilegio 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 proteger el acceso a un repositorio de archivos. Este token se utiliza en la definición de seguridad de fuente remota.

Administración de fuentes remotas

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 fuente remota, modificaciones en la definición de fuente remota o en la configuración de seguridad. También puede ser el borrado de una fuente remota cuando ya no es 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 en la parte superior de una fuente remota, NO PUEDE eliminar la fuente remota conservando las tablas virtuales.

Afortunadamente, puede modificar la definición de fuente remota incluso si tiene tablas virtuales definidas en ella.

Actualizar autorizaciones en una fuente remota

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

Los privilegios de origen remoto son privilegios de objeto (hacen referencia a un objeto de origen 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 ha creado.

Todas estas autorizaciones se administran clásicamente en el cockpit de SAP HANA o con sentencias GRANT y REVOKE en una consola SQL.

Modificar una fuente remota

Para modificar una fuente remota, utilice la interfaz gráfica de usuario de 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 en la parte superior de 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. Esto también podría ser un cambio en la definición de seguridad, por ejemplo, pasar de usuario técnico a credenciales secundarias para permitir un acceso más preciso a objetos remotos.

Eliminar una fuente remota

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

Eliminar una fuente remota mediante la interfaz gráfica de usuario

  1. En el explorador de base de datos SAP HANA, navegue por el catálogo hasta la sección Fuentes remotas.
  2. Haga clic con el botón derecho en la fuente remota y seleccione Eliminar.
  3. Seleccione la opción relevante:
    • Suelte la fuente remota si no hay otros objetos que dependan de ella
    • Suelte 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, elimine 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

Una vez más, debe utilizar la opción CASCADE con mucho cuidado.