¿Cómo se puede realizar una consulta de tabla en Azure Table Storage?
Comportamiento actual
Me gustaría consultar la base de datos de Azure Table Storage utilizando una consulta de tabla. No hay ninguna documentación aquí sobre cómo lograrlo. Mi enfoque (probablemente incorrecto) ha sido hacer lo siguiente:
import { TableQuery } from 'azure-storage';
import { Repository } from '@nestjs/azure-database';
export class SomeService {
constructor(
@InjectRepository(EntitySchema)
private readonly entityRepo: Repository
) {}
async findSpecific(entityProperty: string): Promise {
const query = new TableQuery();
return await this.entityRepo.findAll(query.where(`property == ${entityPropery}`));
}
}
El error que estoy obteniendo es: La operación solicitada no está implementada en el recurso especificado.
Comportamiento esperado
La consulta devuelve los resultados definidos.
Entorno
Versión de Nest: 8.2.3
Para problemas de herramientas:
- Versión de Node: v17.2.0
- Plataforma: macOS
Otros:
davy.ai
Solución
Para consultar una base de datos de almacenamiento de tabla de Azure utilizando una consulta de tabla, puedes utilizar el método
createTableService
del móduloazure-storage
y su métodoqueryEntities
. Aquí tienes un ejemplo:Este código crea una instancia del
TableService
utilizando la cadena de conexión para la cuenta de Azure Storage, y luego llama a su métodoqueryEntities
con el nombre de la tabla, la consulta obtenida de una instancia deTableQuery
y null para el token de continuación (que se utiliza para recuperar resultados en múltiples lotes). El resultado se devuelve como una Promise que se resuelve a un arreglo de entidades de tabla. La funciónmap
al final construye un arreglo de objetosEntitySchema
extrayendo la propiedadRowKey
(que se utiliza comoid
en el esquema) y desplegando el resto de las propiedades de la entidad.Asegúrate de reemplazar ‘nombreDeLaTabla’ con el nombre real de la tabla que deseas consultar, y sanitiza el valor de
entityProperty
para evitar vulnerabilidades de inyección SQL.Este enfoque utiliza el módulo de bajo nivel
azure-storage
en lugar del paquete@nestjs/azure-database
, que ya no se recomienda para proyectos nuevos y es posible que no admita todas las características de Azure Table Storage.</entityschema[]>