扫描所有记录


ScanResult scanAll(ScanRequest request)

功能

扫描操作,每个扫描过的记录消耗1个读配额(即使不满足过滤条件),每个Lazy二级索引需要1个额外读配额

方法参数

request : ScanRequest : required

ScanRequest包括以下部分

1.tableName : String : required

指定扫描的表名

2.indexName :String : optional

指定扫描的二级索引名,如果不指定,即扫描主记录

3.startKey : Map< String, Datum > :optional

查询范围开始,包含startKey,如果startKey不是完整键,而是部分key的前缀,则实际查询的startKey为{startKey, 最小可能的后缀}补全形式

4.stopKey : Map< String, Datum > :optional

查询范围结束,不包含stopKey,如果stopKey不是完整键,而是部分key的前缀,则实际查询的stopKey为{stopKey, 最大可能的后缀}补全形式

5.attributes : List< String > :optional

需要返回的属性列表,不指定表示返回所有属性

6.condition : String : optional

类SQL WHERE语句的查询条件。 注意:与SQL不同,此条件仅作为过滤条件,不影响具体查询计划(index, startKey, endKey),进行范围查询时需要显示设置index和startKey以及endKey。每个扫描的记录均计入读配额,即使不满足查询条件。尽量避免使用条件过滤,尤其是当过滤掉的记录占一半以上时,强烈不建议使用。

7.limit :int : optinal

返回记录的数目限制,如果满足条件的记录有limit条或更多,则一定会返回limit数量的记录,即使quota不足。limit 默认为10

8.reverse : boolean : optional

是否进行逆序扫描,进行逆序扫描时startKey应大于endKey

注意:逆序查询效率较低,谨慎使用,建议设置对应的Key为逆序存储

9.inGlobalOrder :boolean :optional

是否全局有序扫描,对于设置了实体组键且开启了哈希的表,需要设置该值为true才能保证结果有序

10.action :ScanAction : optional

scan时的连带操作,包括COUNT,DELETE和UPDATE, 类似SQL的select count(*) / update XXX / delete XXX from table where XXX 语义

方法返回值

scanResult : ScanResult

scanResult包括以下内容

1.records : List< Map< String,Datum > >

扫描到的记录

2.nextStartKey : Map< String,Datum >

下一个需要扫描的记录主键,NULL表示达到制定的结束位置

异常错误码

INTERNAL_ERROR(1) : 服务器异常

ACCESS_DENIED(4) : 用户对该表没有读权限

VALIDATION_FAILED(5): 参数设置错误

THROUGHPUT_EXCEED(8): 当前读写速度已超过该表的读写配额

RESOURCE_NOT_FOUND(9) : 所指定的表不存在

限制

limit 值的最大限制和每个集群的配置有关

注意

scan在quota不足的情况,返回的记录数可能会小于limit

scanAll则会内部多次进行rpc调用,直到nextStartKey为null或者达到limit限制

scanAll耗时较长,调用此接口建议将client超时时间调到较大值

示例

示例表为例,下面给出扫描记录的示例代码

$scan = new ScanRequest(array(
  "tableName" => $tableName,
  "indexName" => "mtime",
  "startKey" => array(
    "userId" => DatumUtil::datum("user1"),
  ),
  "stopKey" => array(
    "userId" => DatumUtil::datum("user1"),
  ),
  "condition" => "title REGEXP '.*[0-5]' AND noteId > 5",
  "attributes" => array("noteId", "title", "mtime"),
  "limit" => 20000 // 返回的记录条数限制
));

$tableClient->scanAll($scan);

results matching ""

    No results matching ""