Azure存储TableQuery Where节点与node.js

时间:2013-07-22 11:27:21

标签: node.js azure azure-table-storage

我正在构建并执行以下查询:

var queryDate = new Date(2013, 6, 22);
var query = azure.TableQuery
                 .select()
                 .from("WADLogsTable")
                 .where("Timestamp > ?", queryDate);

 tableService.queryEntities(query, function(err, entities){
     ......
 });

但是实体返回为空,如果我删除了where子句,则填充了实体集合?

对此查询有什么问题的想法?

如果我将查询对象转储到控制台,它看起来像 - {_fields:[],   _from:'WADLogsTable',   _where:['Timestamp gt datetime \'2013-07-21T23:00:00.000Z \''],   _top:null,   _partitionKey:null,   _nextPartitionKey:null,   _rowKey:null,   _nextRowKey:null}

1 个答案:

答案 0 :(得分:0)

由于您的查询不包含PartitionKey,因此您的查询会导致全表扫描。对于表服务的每个查询请求,最多可以返回1000个匹配实体。如果未找到匹配且有更多实体可用,则表服务返回一个继续令牌,该令牌应用于获取下一组实体。因此,在您的情况下发生的事情是表服务从顶部(第一个分区)开始,并尝试查找符合您的查询条件的实体。由于它没有找到任何东西,因此它不返回任何值。但是,如果您检查回复标题,则会看到x-ms-continuation-NextPartitionKeyx-ms-continuation-NextRowKey等标题。

为获得最佳效果,您的查询应始终包含PartitionKey 。请看一下这篇关于有效获取我之前写的诊断数据的博客文章:http://gauravmantri.com/2012/02/17/effective-way-of-fetching-diagnostics-data-from-windows-azure-diagnostics-table-hint-use-partitionkey/