📋
.hdbtable
¿Qué es?
- Archivo de definición de tabla en SAP HANA
- Usa sintaxis CDS (Core Data Services)
- Similar a entidades con campos y tipos
- Se despliega automáticamente con HANA deployment
Ubicación típica:
db/src/tables/ProductRatings.hdbtable
Beneficios:
- Versionado con el código
- Migraciones automáticas
- Integraciones con APIs OData
🔧
Sintaxis CDS
Elementos básicos:
- namespace: Identificador único (ej: com.logali)
- entity: Define la tabla
- key: Campo primario
- Tipos: String, Integer, Decimal, Date, Time, Boolean
Anotaciones comunes:
- @cds.persistence.name: Nombre en BD
- @title: Etiqueta legible
- @readonly: Campo de solo lectura
- @mandatory: Campo obligatorio
💡 Tip: Las anotaciones ofrecen metadatos que Fiori y otros tools usan automáticamente.
⭐
Caso: Tabla de Ratings
Estructura típica:
- id: UUID (clave primaria)
- productoId: Referencia a producto
- usuarioId: Quién escribió la review
- puntuacion: 1-5 estrellas
- comentario: Texto libre (long string)
- fecha: Cuándo se creó (timestamp)
Información adicional:
- Útil para e-commerce, marketplaces, productos SaaS
- Comentarios son buscables con índice fulltext
- Permite análisis de sentimiento
🔍
.hdbfulltextindex
¿Para qué?
- Indexa campos de texto para búsquedas rápidas
- Permite búsquedas tipo "contiene palabra"
- Ejemplo: "encuéntrame reviews con 'pantalla rota'"
Configuración:
- Apunta a la tabla y campo (ej: comentario)
- Define idioma (es, en, de, etc.)
- Se indexa automáticamente al insertar
Cuándo usar:
- Campos con texto libre > 100 caracteres
- Búsquedas frecuentes en ese campo
- NO para campos pequeños (IDs, números)
📝 Ejemplo Completo: Tabla ProductRatings
1. Archivo .hdbtable
db/src/tables/ProductRatings.hdbtable
namespace com.logali.ecommerce;
entity ProductRatings {
key id : UUID;
productoId : String;
usuarioId : String;
puntuacion : Integer enum { 1; 2; 3; 4; 5; };
comentario : String;
fechaCreacion : Timestamp default getCurrentTimestamp();
activo : Boolean default true;
}
2. Archivo .hdbfulltextindex
db/src/indexes/ProductRatings_Comments.hdbfulltextindex
index "com.logali.ecommerce::ProductRatings.Comment" on (
"ProductRatings"("comentario")
) type TEXT
LANGUAGE 'SPANISH'
FUZZY SEARCH ENABLED
📌 Nota:
FUZZY SEARCH permite encontrar palabras similares (ej: "pantala" encuentra "pantalla"). LANGUAGE = SPANISH activa stemming y stopwords en español.
3. Consultas de Ejemplo
Búsqueda simple por puntuación:
SELECT * FROM "ProductRatings"
WHERE puntuacion >= 4 AND activo = true
ORDER BY fechaCreacion DESC;
Búsqueda fulltext en comentarios:
SELECT id, productoId, puntuacion, comentario
FROM "ProductRatings"
WHERE CONTAINS(comentario, 'pantalla rota', FUZZY(0.8))
AND puntuacion <= 2;
Agregar: Rating promedio por producto:
SELECT
productoId,
AVG(puntuacion) as promedio,
COUNT(*) as totalReviews
FROM "ProductRatings"
WHERE activo = true
GROUP BY productoId;
💡 Tip:
CONTAINS() es la función específica para búsquedas fulltext. FUZZY(0.8) permite 20% de tolerancia en coincidencias.
4. Despliegue
cf deploy
📌 Flujo:
SAP HANA lee .hdbtable → crea tabla en BD → lee .hdbfulltextindex → crea índice. Todo automático con el despliegue.
5. Exponerla como API OData
using { com.logali.ecommerce.ProductRatings } from './tables/ProductRatings';
service ReviewService {
entity Ratings as projection on ProductRatings;
}
✅ Resultado:
Automáticamente expone GET /odata/v4/ReviewService/Ratings con búsqueda OData estándar ($filter, $search, $orderby).