2010-11-19 11 views
12

¿Alguien sabe la forma correcta de consultar el almacenamiento de tabla azul para un valor nulo? Por lo que he leído, es posible (aunque hay un error que lo impide en el almacenamiento de desarrollo). Sin embargo, me siguen dando el siguiente error cuando lo hago en el almacenamiento en la nube en vivo:Consulta de almacenamiento de tabla azul para valores nulos

Una de las entradas de petición no es válida.

Esta es una versión simplificada de la consulta LINQ que he reunido.

var query = from fooBar in fooBarSVC.CreateQuery<FooBar>("FooBars") 
     where fooBar.PartitionKey == kPartitionID 
      && fooBar.Code == kfooBarCode 
      && fooBar.Effective_Date <= kFooBarDate.ToUniversalTime() 
      && (fooBar.Termination_Date > kFooBarDate.ToUniversalTime() || fooBar.Termination_Date == null) 
     select fooBar; 

Si ejecuto la consulta sin verificar si hay nulo, funciona bien. Sé que una posible solución sería ejecutar una segunda consulta en la colección que trae esta consulta. No me importa hacer eso si es necesario, pero me gustaría saber si puedo lograr que este enfoque funcione primero.

¿Alguien ve algo obvio que estoy haciendo mal?

Respuesta

27

El problema es que debido a que el almacenamiento de tabla azul no tiene un esquema, la columna nula en realidad no existe. Esta es la razón por la cual su consulta no es válida. no existe una columna nula en el almacenamiento de tabla. Podría hacer algo como almacenar una cadena vacía si realmente tiene que hacerlo. Realmente, el problema fundamental aquí es que el almacenamiento de tablas Azure realmente no está diseñado para ser consultado por ninguna columna que no sea la clave de la partición y la clave de la fila. Cada vez que realiza una consulta en una de estas columnas no estándar, realiza un escaneo de tabla. Si comienza a obtener muchos datos, tendrá una tasa muy alta de tiempos de espera de consultas. Sugiero configurar un índice manual para este tipo de consultas. Por ejemplo, puede almacenar los mismos datos en la misma tabla pero con diferentes valores para la clave de fila. En definitiva, si su aplicación no se está volviendo loca, simplemente usaría SQL Azure ya que sería mucho más flexible para los tipos de consultas que está haciendo.

Actualización: Azure tiene una gran guía sobre el diseño de almacenamiento de tablas que yo recomendaría leer. http://azure.microsoft.com/en-us/documentation/articles/storage-table-design-guide/

+0

Nathan, gracias por su respuesta. Esto fue útil. – Brosto

+0

@Nathan Totten: ¡Buena respuesta! –

Cuestiones relacionadas