Introducción
Recientemente ejecuté un escenario en la base de datos SAP HANA para el cual necesitaba un conjunto de datos inicial grande para una tabla específica, y otro conjunto de datos delta grande que consistía en eliminaciones, actualizaciones e inserciones en el conjunto de datos inicial. Busqué en Google algo como "generador de datos para HANA" pero no encontré lo que buscaba. Por lo tanto, escribí un procedimiento de base de datos para llenar mi tabla con los datos que necesitaba. Dado que otros podrían encontrar útil el script, amplié el script para facilitar su reutilización. El resultado lo puedes encontrar en este blog.
El procedimiento
inserta, actualiza o elimina datos de una sola tabla, utilizando principalmente operaciones basadas en conjuntos para un alto rendimiento. Las inserciones y actualizaciones se basan en la definición de campos de la tabla proporcionada y contienen datos aleatorios. Por ejemplo, para un campo entero, se inserta un valor entero aleatorio, y para un campo basado en caracteres, se inserta una cadena aleatoria de caracteres. El procedimiento utiliza las tablas de metadatos de HANA para recuperar la definición de la tabla. Las actualizaciones o eliminaciones de registros se realizan de forma aleatoria en función de la primera columna de la clave principal.
En mi pequeño sistema de pruebas, logré una velocidad de inserción de 9 millones de registros por minuto para una tabla con solo unos pocos campos. Eso fue mucho más rápido que la primera versión del script, que no era basada en conjuntos.
Cómo ejecutar el procedimiento generador de datos
Sigue los siguientes pasos para generar datos para tu tabla
-
Descarga el código en este
repositorio de Git
y cópialo en la consola SQL
-
Crea una secuencia con la siguiente declaración: "CREATE SEQUENCE GENERATEDATASEQ1". Una secuencia con ese nombre se utiliza en el procedimiento.
-
Llama al procedimiento utilizando la siguiente declaración:
CALL "GenerateData" (
IP_SCHEMA_NAME => '<NOMBRE_ESQUEMA>',
IP_TABLE_NAME => '<NOMBRE_TABLA>',
IP_INSERT_NUM_RECORDS => <Número de registros a insertar>,
IP_MAX_STRING_SIZE => <Tamaño máximo de cadena insertada. Las cadenas se limitan automáticamente en la longitud del campo>,
IP_DELETE_NUM_RECORDS => <Número de registros a eliminar>,
IP_UPDATE_NUM_RECORDS => <Número de registros a actualizar>
);
Limitaciones
Ten en cuenta las siguientes limitaciones, o ajusta el código para trabajar en torno a ellas:
-
Solo admite tablas con una clave principal. La clave principal debe contener al menos una columna que pueda contener valores enteros. Los tipos de datos binarios no son compatibles en absoluto.
-
Creado con HANA 2, SPS04, no garantizado que funcione con paquetes de servicios más antiguos.
-
Los valores generados aleatoriamente dificultan la compresión. Por lo tanto, es probable que veas una compresión mínima que no se puede comparar con casos de uso reales.
Ejemplo
Como ejemplo, se crea una tabla con la siguiente declaración:
CREATE SCHEMA GENERATEDATA;
SET SCHEMA GENERATEDATA;
CREATE
Pedro Pascal
Se unió el 07/03/2018