\Aliyun\OTSOTSClient

OTSClient.php 是 Aliyun OTS SDK for PHP 的入口。更多关于OTS的信息,请参考阿里云官网OTS文档 https://docs.aliyun.com/?/pub/ots#/pub/ots

OTSClient这个类实现了OTS服务的所有接口。用户可以通过创建OTSClient的对象,并调用它的方法来访问OTS服务的所有功能。

创建OTSClient对象时,你需要指定EndPoint, AccessKeyID, AccessKeySecret, 和InstanceName等参数。

OTSClient提供的每个API都接受一个array作为请求,并返回一个array代表返回。当遇到OTS客户端或者服务端错误时,OTSClientException或OTSServerException会抛出。我们提供了详细的样例来说明每个API的使用方法。

OTSClient会默认输出日志到屏幕(标准输出文件),你可以通过自定义日志处理函数来改变日志输出方式,或者关闭日志。为了让你的应用逻辑运行得更平稳,我们在OTSClient中实现了标准重试逻辑;如果需要改变重试逻辑,你可以参照RetryPolicy的文档。

Summary

Methods
Properties
Constants
__construct()
getClientConfig()
createTable()
deleteTable()
describeTable()
updateTable()
listTable()
putRow()
getRow()
updateRow()
deleteRow()
batchGetRow()
batchWriteRow()
getRange()
No public properties found
No constants found
No protected methods found
No protected properties found
N/A
No private methods found
No private properties found
N/A

Methods

__construct()

__construct(array<mixed,>  $args) 

OTSClient的构造函数

Parameters

array<mixed,> $args

OTS客户端配置,包括EndPoint, AccessKeyID, AccessKeySecret, 和InstanceName等参数。

Examples

创建一个OTSClient对象
use Aliyun\OTS\OTSClient as OTSClient;

$otsClient = new OTSClient(array(
    'EndPoint' => "http://<你的服务地址>",           # 这个地址从OTS的控制台的实例详情页面可以看到
    'AccessKeyID' => "你的Access Key ID",            # 请联系你的系统管理员获取
    'AccessKeySecret' => "你的Access Key Secret",    # 请联系你的系统管理员获取
    'InstanceName' => "你的实例名",
));

错误处理样例
use Aliyun\OTS\OTSServerException as OTSServerException;

try {
    // 在这个例子中,我们构造了一个非法的表名
    $request = array("table_name" => "bad#table name");
    $response = $otsClient->describeTable($request);
} catch (OTSServerException $e) {
    // 按照你的需要处理这个异常
    print $e->getOTSErrorCode() . "\n";
    print $e->getOTSErrorMessage() . "\n";
}
所有可选参数
use Aliyun\OTS\OTSClient as OTSClient;
use Aliyun\OTS\Retry\DefaultRetryPolicy as DefaultRetryPolicy;
use Aliyun\OTS\Retry\NoRetryPolicy as NoRetryPolicy;

function myErrorLogHandler($message) {
    print $message . "\n";
}

function myDebugLogHandler($message) {
    print $message . "\n";
}


$otsClient = new OTSClient(array(
    'EndPoint' => "http://<你的服务地址>",           # 这个地址从OTS的控制台的实例详情页面可以看到
    'AccessKeyID' => "你的Access Key ID",            # 请联系你的系统管理员获取
    'AccessKeySecret' => "你的Access Key Secret",    # 请联系你的系统管理员获取
    'InstanceName' => "你的实例名",

    // 以下是可选参数
    'ConnectionTimeout' => 2.0,                      # 与OTS建立连接的最大延时,默认 2.0秒
    'SocketTimeout' => 2.0,                          # 每次请求响应最大延时,默认2.0秒

    // 重试策略,默认为 DefaultRetryPolicy
    // 如果要关闭重试,可以设置为: 'RetryPolicy' => new NoRetryPolicy(),
    // 如果要自定义重试策略,你可以继承 \Aliyun\OTS\Retry\RetryPolicy 接口构造自己的重试策略
    'RetryPolicy' => new DefaultRetryPolicy(),

    // Error级别日志处理函数,用来打印OTS服务端返回错误时的日志
    // 如果设置为null则为关闭log
    'ErrorLogHandler' => "myErrorLogHandler",

    // Debug级别日志处理函数,用来打印正常的请求和响应信息
    // 如果设置为null则为关闭log
    'DebugLogHandler' => 'myDebugLogHandler',
));

getClientConfig()

getClientConfig() 

返回 OTSClientConfig 对象

Examples

指定日志输出方式
function myDebugLogHandler($message) {
    // 实现你自己的日志处理函数
    print "hey, it's my debug log handler, and the message is $message\n";
}

function myErrorLogHandler($message) {
    // 实现你自己的日志处理函数
    print "hey, it's my error log handler, and the message is $message\n";
}

$otsClient->getClientConfig()->debugLogHandler = "myDebugLogHandler";
$otsClient->getClientConfig()->errorLogHandler = "myErrorLogHandler";

// 试试看效果怎么样
$otsClient->listTable(array());
$otsClient->describeTable(array('table_name' => "bad#table name"));
关闭OTSClient中的日志
$otsClient->getClientConfig()->debugLogHandler = null;
$otsClient->getClientConfig()->errorLogHandler = null;

createTable()

createTable(array<mixed,>  $request) : array<mixed,>

创建表,并设定主键的个数、名称、顺序和类型,以及预留读写吞吐量。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

返回为空。CreateTable成功时不返回任何信息,这里返回一个空的array,与其他API保持一致。

Examples

$request = array(
    'table_meta' => array(
        'table_name' => 'MyTable',       // 表名为 MyTable
        'primary_key_schema' => array(
            'PK0' => 'INTEGER',          // 第一个主键列(又叫分片键)名称为PK0, 类型为 INTEGER
            'PK1' => 'STRING',           // 第二个主键列名称为PK1, 类型为STRING
        ),
    ),
    'reserved_throughput' => array(
        'capacity_unit' => array(
            'read' => 5,                 // 预留读写吞吐量设置为:5个读CU,和10个写CU
            'write' => 10,
        ),
    ),
);
$otsClient->createTable($request);

deleteTable()

deleteTable(array<mixed,>  $request) : array<mixed,>

根据表名删除一个表。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

返回为空。DeleteTable成功时不返回任何信息,这里返回一个空的array,与其他API保持一致。

Examples

$otsClient->deleteTable(array('table_name' => "MyTable"));

describeTable()

describeTable(array<mixed,>  $request) : array<mixed,>

获取一个表的信息,包括主键设计以及预留读写吞吐量信息。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

$response = $otsClient->describeTable(array('table_name' => "MyTable"));
print json_encode($response);

/* 样例输出:

{
    "table_meta": {
        "table_name": "MyTable",
        "primary_key_schema": {
            "PK0": "INTEGER",
            "PK1": "STRING"
        }
    },
    "capacity_unit_details": {
        "capacity_unit": {
            "read": 5,
            "write": 10
        },
        "last_increase_time": 1442224106,
        "last_decrease_time": null,
        "number_of_decreases_today": 0
    }
}

*/

updateTable()

updateTable(array<mixed,>  $request) : array<mixed,>

更新一个表,包括这个表的预留读写吞吐量。 这个API可以用来上调或者下调表的预留读写吞吐量。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

// 请注意调用UpdateTable有2分钟一次的限制,具体情况请参考OTS官网文档

$request = array(
    'table_name' => 'MyTable',
    'reserved_throughput' => array(
        'capacity_unit' => array(
            'read' => 20,                 // 预留读写吞吐量设置为:20个读CU,和30个写CU
            'write' => 30,
        ),
    ),

);
$response = $otsClient->updateTable($request);
print json_encode($response);

/* 样例输出:

{
    "capacity_unit_details": {
        "capacity_unit": {
            "read": 20,
            "write": 30
        },
        "last_increase_time": 1442225001,
        "last_decrease_time": null,
        "number_of_decreases_today": 0
    }
}

*/

只更新读或写CU的其中一项
$request = array(
    'table_name' => 'MyTable',
    'reserved_throughput' => array(
        'capacity_unit' => array(
            'read' => 20,                 // 只更新读预留吞吐量
        ),
    ),
);

// 或者

$request = array(
    'table_name' => 'MyTable',
    'reserved_throughput' => array(
        'capacity_unit' => array(
            'write' => 30,                 // 只更新写预留吞吐量
        ),
    ),
);

$response = $otsClient->updateTable($request);

listTable()

listTable(array<mixed,>  $request) : array<mixed,>

获取该实例下所有的表名。

Parameters

array<mixed,> $request

请求参数,为空。

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

// 假设有3个表:UserInfo, AccountInfo, 和BookInfo
$response = $otsClient->listTable(array());
print json_encode($response);

/* 样例输出:

[
    "AccountInfo",
    "BookInfo",
    "UserInfo"
]

*/

putRow()

putRow(array<mixed,>  $request) : array<mixed,>

写入一行数据。如果该行已经存在,则覆盖原有数据。返回该操作消耗的CU。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

$request = array(
    'table_name' => 'MyTable',
    'condition' => 'IGNORE',         // condition可以为IGNORE, EXPECT_EXIST, EXPECT_NOT_EXIST
    'primary_key' => array(          // 主键
        'PK0' => 123,
        'PK1' => 'abc',
    ),
    'attribute_columns' => array(    // 属性
        'attr0' => 456,                 // INTEGER类型
        'attr1' => 'Hangzhou',          // STRING类型
        'attr2' => 3.14,                // DOUBLE类型
        'attr3' => true,                // BOOLEAN类型
        'attr4' => array(               // BINARY类型
            'type' => 'BINARY',
            'value' => "a binary string",
        )
    )
);

$response = $otsClient->putRow($request);
print json_encode($response);

/* 样例输出:
{
    "consumed": {
        "capacity_unit": {
            "read": 0,
            "write": 1           // 本次操作消耗了1个写CU
        }
    }
}
*/

getRow()

getRow(array<mixed,>  $request) : array<mixed,>

读取一行数据。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

$request = array(
    'table_name' => 'MyTable',
    'primary_key' => array(          // 主键
        'PK0' => 123,
        'PK1' => 'abc',
    )
);
$response = $otsClient->getRow($request);
print json_encode($response);

/* 样例输出:
{
    "consumed": {
        "capacity_unit": {
            "read": 1,                 // 本次操作消耗了1个读CU
            "write": 0
        }
    },
    "row": {
        "primary_key_columns": {
            "PK0": 123,
            "PK1": "abc"
        },
        "attribute_columns": {
            "attr0": 456,
            "attr1": "Hangzhou",
            "attr2": 3.14,
            "attr3": true,
            "attr4": false,
            "attr5": {                  // 请注意BINARY类型的表示方法
                "type": "BINARY",
                "value": "a binary string"
            }
        }
    }
}

*/

指定读该行的某几列
$request = array(
    'table_name' => 'MyTable',
    'primary_key' => array(          // 主键
        'PK0' => 123,
        'PK1' => 'abc',
    ),
    'columns_to_get' => array(
        'attr0', 'attr3', 'attr5'    // 只读取 attr0, attr3, attr5 这几列
    ),
);
$response = $otsClient->getRow($request);
print json_encode($response);

/* 样例输出:
{
    "consumed": {
        "capacity_unit": {
            "read": 1,                 // 本次操作消耗了1个读CU
            "write": 0
        }
    },
    "row": {
        "primary_key_columns": {},
        "attribute_columns": {
            "attr0": 456,
            "attr3": true,
            "attr5": {                  // 请注意BINARY类型的表示方法
                "type": "BINARY",
                "value": "a binary string"
            }
        }
    }
}

*/

updateRow()

updateRow(array<mixed,>  $request) : array<mixed,>

更新一行数据。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

更新或追加该行的某几列
// 假设该行已经有1个属性列:attr0

$request = array(
    'table_name' => 'MyTable',
    'condition' => 'IGNORE',
    'primary_key' => array(          // 主键
        'PK0' => 123,
        'PK1' => 'abc',
    ),
    'attribute_columns_to_put' => array(
        'attr0' => 789,             // 如果该列已经存在,则更新该列的值
        'new_column' => 'abc',      // 如果该列不存在,则追加新列
    ),
);
$response = $otsClient->updateRow($request);
print json_encode($response);


/* 样例输出:
{
    "consumed": {
        "capacity_unit": {
            "read": 0,
            "write": 1           // 本次操作消耗了1个写CU
        }
    }
}
*/

删除该行的某几列
$request = array(
    'table_name' => 'MyTable',
    'condition' => 'IGNORE',
    'primary_key' => array(          // 主键
        'PK0' => 123,
        'PK1' => 'abc',
    ),
    'attribute_columns_to_delete' => array(
        'attr1',                     // 指定删除 attr1 attr2 两列
        'attr2'
    ),
);
$response = $otsClient->updateRow($request);
print json_encode($response);

/* 样例输出:
{
    "consumed": {
        "capacity_unit": {
            "read": 0,
            "write": 1           // 本次操作消耗了1个写CU
        }
    }
}
*/

deleteRow()

deleteRow(array<mixed,>  $request) : array<mixed,>

删除一行数据。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

$request = array(
    'table_name' => 'MyTable',
    'condition' => 'IGNORE',
    'primary_key' => array(          // 主键
        'PK0' => 123,
        'PK1' => 'abc',
    )
);
$response = $otsClient->deleteRow($request);
print json_encode($response);


/* 样例输出:
{
    "consumed": {
        "capacity_unit": {
            "read": 0,
            "write": 1                 // 本次操作消耗了1个写CU
        }
    }
}
*/

batchGetRow()

batchGetRow(array<mixed,>  $request) : array<mixed,>

读取指定的多行数据。 请注意,BatchGetRow在部分行读取失败时,会在返回的$response中表示,而不是抛出异常。请参见样例:处理BatchGetRow的返回。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

读取一个表的多行数据
$request = array(
    'tables' => array(
        array(
            'table_name' => 'MyTable',
            'rows' => array(
                array('primary_key' => array('PK0' => 1, 'PK1' => 'Zhejiang')),  // 第一行
                array('primary_key' => array('PK0' => 2, 'PK1' => 'Jiangsu')),   // 第二行
                array('primary_key' => array('PK0' => 3, 'PK1' => 'Guangdong')), // 第三行
            ),
        ),
    ),
);
$response = $otsClient->batchGetRow($request);
print json_encode($response);

/* 样例输出:
{
    "tables": [
        {
            "table_name": "MyTable",
            "rows": [

                // 第一行的数据

                {
                    "is_ok": true,                  // 读取成功
                    "consumed": {
                        "capacity_unit": {
                            "read": 1,              // 这一行消耗了1个读CU
                            "write": 0
                        }
                    },
                    "row": {
                        "primary_key_columns": {
                            "PK0": 1,
                            "PK1": "Zhejiang"
                        },
                        "attribute_columns": {
                            "attr1": "Hangzhou"
                        }
                    }
                },

                // 第二行 ...
                // 第三行 ...
            ]
        }
    ]
}
*/

读取多个表的数据
$request = array(
    'tables' => array(
        array(
            'table_name' => 'MyTable1',      // 第一个表
            'rows' => array(
                array('primary_key' => array('PK0' => 1, 'PK1' => 'Zhejiang')),
                array('primary_key' => array('PK0' => 2, 'PK1' => 'Jiangsu')),
                array('primary_key' => array('PK0' => 3, 'PK1' => 'Guangdong')),
            ),
        ),
        array(
            'table_name' => 'MyTable2',     // 第二个表
            'rows' => array(
                array('primary_key' => array('PK0' => 4, 'PK1' => 'a')),
                array('primary_key' => array('PK0' => 5, 'PK1' => 'b')),
                array('primary_key' => array('PK0' => 6, 'PK1' => 'c')),
            ),
        ),
        array(
            'table_name' => 'MyTable3',     // 第三个表
            'rows' => array(
                array('primary_key' => array('PK0' => 7, 'PK1' => 'd')),
                array('primary_key' => array('PK0' => 8, 'PK1' => 'e')),
                array('primary_key' => array('PK0' => 9, 'PK1' => 'f')),
            ),
        ),


    ),
);
$response = $otsClient->batchGetRow($request);
print json_encode($response);

/* 样例输出:
{
    "tables": [
        {
            "table_name": "MyTable",
            "rows": [

                // 第一行的数据

                {
                    "is_ok": true,                  // 读取成功
                    "consumed": {
                        "capacity_unit": {
                            "read": 1,              // 这一行消耗了1个读CU
                            "write": 0
                        }
                    },
                    "row": {
                        "primary_key_columns": {
                            "PK0": 1,
                            "PK1": "Zhejiang"
                        },
                        "attribute_columns": {
                            "attr1": "Hangzhou"
                        }
                    }
                },

                // 第二行 ...
                // 第三行 ...
            ]
        },

        // 第二个表的数据 ...
        // 第三个表的数据 ...
    ]
}
*/

指定读取某几列
$request = array(
    'tables' => array(
        array(
            'table_name' => 'MyTable',
            'rows' => array(
                array('primary_key' => array('PK0' => 1, 'PK1' => 'Zhejiang')),
                array('primary_key' => array('PK0' => 2, 'PK1' => 'Jiangsu')),
                array('primary_key' => array('PK0' => 3, 'PK1' => 'Guangdong')),
            ),
            'columns_to_get' => array('PK1', 'attr1'),   // columns_to_get 参数用来指定要获取的列
        ),
    ),
);
$response = $otsClient->batchGetRow($request);
print json_encode($response);
处理BatchGetRow的返回
$request = array(
    'tables' => array(
        array(
            'table_name' => 'MyTable',
            'rows' => array(
                array('primary_key' => array('PK0' => 1, 'PK1' => 'Zhejiang')),  // 第一行
                array('primary_key' => array('PK0' => 2, 'PK1' => 'Jiangsu')),   // 第二行
                array('primary_key' => array('PK0' => 3, 'PK1' => 'Guangdong')), // 第三行
            ),
        ),
    ),
);

$response = $otsClient->batchGetRow($request);

// 处理返回的每个表
foreach ($response['tables'] as $tableData) {
    print "Handling table {$tableData['table_name']} ...\n";

    // 处理这个表下的每行数据
    foreach ($tableData['rows'] as $rowData) {

        if ($rowData['is_ok']) {

            // 处理读取到的数据

        } else {

            // 处理出错
            print "Error: {$rowData['error']['code']} {$rowData['error']['message']}\n";
        }
    }
}

batchWriteRow()

batchWriteRow(array<mixed,>  $request) : array<mixed,>

写入、更新或者删除指定的多行数据。 请注意,BatchWriteRow在部分行读取失败时,会在返回的$response中表示,而不是抛出异常。请参见样例:处理BatchWriteRow的返回。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

写入几行数据
$request = array(
    'tables' => array(
        array(
            'table_name' => 'MyTable',
            'put_rows' => array(
                array(                                                           // 第一行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 1, 'PK1' => 'Zhejiang'),
                    'attribute_columns' => array('attr1' => 'Chandler Bing', 'attr2' => 256),
                ),
                array(                                                           // 第二行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 2, 'PK1' => 'Jiangsu'),
                    'attribute_columns' => array('attr1' => 'Chandler Bing', 'attr2' => 256),
                ),
                array(                                                           // 第三行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 3, 'PK1' => 'Guangdong'),
                    'attribute_columns' => array('attr1' => 'Chandler Bing', 'attr2' => 256),
                ),
            ),
        ),
    ),
);
$response = $otsClient->batchWriteRow($request);
print json_encode($response);

/* 样例输出:
{
    "tables": [
        {
            "table_name": "MyTable",
            "put_rows": [
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                },
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                },
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                }
            ],
            "update_rows": [],
            "delete_rows": []
        }
    ]
}
*/

更新几行数据
$request = array(
    'tables' => array(
        array(
            'table_name' => 'MyTable',
            'update_rows' => array(
                array(                                                           // 第一行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 1, 'PK1' => 'Zhejiang'),

                    // 用 attribute_columns_to_put 指定要更新或者追加的列
                    'attribute_columns_to_put' => array('attr1' => 'Chandler Bing', 'attr2' => 256),
                ),
                array(                                                           // 第二行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 2, 'PK1' => 'Jiangsu'),

                    // 用 attribute_columns_to_delete 指定要删除的列
                    'attribute_columns_to_delete' => array('attr1', 'attr2'),
                ),
            ),
        ),
    ),
);
$response = $otsClient->batchWriteRow($request);
print json_encode($response);

/* 样例输出:
{
    "tables": [
        {
            "table_name": "MyTable",
            "put_rows": [],
            "update_rows": [
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                },
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                }
            ],
            "delete_rows": []
        }
    ]
}
*/

删除几行数据
$request = array(
    'tables' => array(
        array(
            'table_name' => 'MyTable',
            'delete_rows' => array(
                array(                                                           // 第一行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 1, 'PK1' => 'Zhejiang'),
                ),
                array(                                                           // 第二行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 2, 'PK1' => 'Jiangsu'),
                ),
                array(                                                           // 第三行
                    'condition' => 'IGNORE',
                    'primary_key' => array('PK0' => 3, 'PK1' => 'Guangdong'),
                ),
            ),
        ),
    ),
);
$response = $otsClient->batchWriteRow($request);
print json_encode($response);

/* 样例输出:
{
    "tables": [
        {
            "table_name": "MyTable",
            "put_rows": [],
            "update_rows": [],
            "delete_rows": [
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                },
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                },
                {
                    "is_ok": true,
                    "consumed": {
                        "capacity_unit": {
                            "read": 0,
                            "write": 1
                        }
                    }
                }
            ]
        }
    ]
}
*/

处理BatchWriteRow的返回
$response = $otsClient->batchWriteRow($request);
print json_encode($response);

// 处理返回的每个表
foreach ($response['tables'] as $tableData) {
    print "Handling table {$tableData['table_name']} ...\n";

    // 处理这个表下的PutRow返回的结果
    $putRows = $tableData['put_rows'];

    foreach ($putRows as $rowData) {

        if ($rowData['is_ok']) {
            // 写入成功
            print "Capacity Unit Consumed: {$rowData['consumed']['capacity_unit']['write']}\n";

        } else {

            // 处理出错
            print "Error: {$rowData['error']['code']} {$rowData['error']['message']}\n";
        }
    }
    
    // 处理这个表下的UpdateRow返回的结果
    $updateRows = $tableData['update_rows'];
        
    foreach ($updateRows as $rowData) {
        // 像 PutRow一样处理 。。。
        if ($rowData['is_ok']) {
            // 写入成功
            print "Capacity Unit Consumed: {$rowData['consumed']['capacity_unit']['write']}\n";

        } else {

            // 处理出错
            print "Error: {$rowData['error']['code']} {$rowData['error']['message']}\n";
        }
    }

    // 处理这个表下的DeleteRow返回的结果
    $deleteRows = $tableData['delete_rows'];

    foreach ($deleteRows as $rowData) {

        if ($rowData['is_ok']) {
            // 写入成功
            print "Capacity Unit Consumed: {$rowData['consumed']['capacity_unit']['write']}\n";

        } else {
            // 处理出错
            print "Error: {$rowData['error']['code']} {$rowData['error']['message']}\n";

        }
    }
}

getRange()

getRange(array<mixed,>  $request) : array<mixed,>

范围读取起始主键和结束主键之间的数据。 请注意,这个范围有可能会被服务端截断,你需要判断返回中的 next_start_primary_key 来决定是否继续调用 GetRange。 你可以指定最多读取多少行。 在指定开始主键和结束主键时,你可以用 INF_MIN 和 INF_MAX 来代表最大值和最小值,详见下面的代码样例。

Parameters

array<mixed,> $request

请求参数

Throws

\Aliyun\OTS\OTSClientException

当参数检查出错或服务端返回校验出错时

\Aliyun\OTS\OTSServerException

当OTS服务端返回错误时

Returns

array<mixed,> —

请求返回

Examples

读取一个范围的数据,遇到截断继续读取
// 请注意,这个例子运行时PHP占用内存较大,在我们的测试环境中,需要将php.ini中的
// memory_limit 设置为 256M
$startPK = array(
    'PK0' => array('type' => 'INF_MIN'),         // array('type' => 'INF_MIN') 用来表示最小值
    'PK1' => array('type' => 'INF_MIN'),
);

$endPK = array(
    'PK0' => array('type' => 'INF_MAX'),         // array('type' => 'INF_MAX') 用来表示最小值
    'PK1' => array('type' => 'INF_MAX'),
);

// 你同样可以用具体的值来表示 开始主键和结束主键,例如:
$startPK = array('PK0' => 0, 'PK1' => 'aaaa');
$endPK = array('PK0' => 9999, 'PK1' => 'zzzz');


while (!empty($startPK)) {

    $request = array(
        'table_name' => 'MyTable',
        'direction' => 'FORWARD',                          // 方向可以为 FORWARD 或者 BACKWARD 
        'inclusive_start_primary_key' => $startPK,         // 开始主键
        'exclusive_end_primary_key' => $endPK,             // 结束主键
    );
    
    $response = $otsClient->getRange($request);

    print "Read CU Consumed: {$response['consumed']['capacity_unit']['read']}\n";
    
    foreach ($response['rows'] as $rowData) {
        // 处理每一行数据
    }

    // 如果 next_start_primary_key 不为空,则代表
    // 范围内还有数据,需要继续读取
    $startPK = $response['next_start_primary_key'];
}

/* 单次GetRange的样例输出:

{
    "consumed": {
        "capacity_unit": {
            "read": 203,                   // 读CU消耗,实际值可能与此不同
            "write": 0
        }
    },
    "next_start_primary_key": [],
    "rows": [
        {
            "primary_key_columns": {
                "PK0": 0,
                "PK1": "abc"
            },
            "attribute_columns": {
                "attr0": 456,
                "attr1": "Hangzhou",
                "attr2": 3.14,
                "attr3": true
            }
        },
        {
            "primary_key_columns": {
                "PK0": 1,
                "PK1": "abc"
            },
            "attribute_columns": {
                "attr0": 456,
                "attr1": "Hangzhou",
                "attr2": 3.14,
                "attr3": true
            }
        },
        {
            "primary_key_columns": {
                "PK0": 2,
                "PK1": "abc"
            },
            "attribute_columns": {
                "attr0": 456,
                "attr1": "Hangzhou",
                "attr2": 3.14,
                "attr3": true
            }
        },

        // 更多行。。。
    ]
}

*/

读取一个范围的数据,并指定若干列
// 请注意,这个例子运行时PHP占用内存较大,在我们的测试环境中,需要将php.ini中的
// memory_limit 设置为 256M

$startPK = array(
    'PK0' => array('type' => 'INF_MIN'),         // array('type' => 'INF_MIN') 用来表示最小值
    'PK1' => array('type' => 'INF_MIN'),
);

$endPK = array(
    'PK0' => array('type' => 'INF_MAX'),         // array('type' => 'INF_MAX') 用来表示最小值
    'PK1' => array('type' => 'INF_MAX'),
);

while (!empty($startPK)) {

    $request = array(
        'table_name' => 'MyTable',
        'direction' => 'FORWARD',                          // 方向可以为 FORWARD 或者 BACKWARD 
        'inclusive_start_primary_key' => $startPK,         // 开始主键
        'exclusive_end_primary_key' => $endPK,             // 结束主键
        'columns_to_get' => array('attr0', 'attr1'),       // 指定获取 attr0 和 attr1 两列
    );
    
    $response = $otsClient->getRange($request);

    print "Read CU Consumed: {$response['consumed']['capacity_unit']['read']}\n";
    
    foreach ($response['rows'] as $rowData) {
        // 处理每一行数据
    }

    // 如果 next_start_primary_key 不为空,则代表
    // 范围内还有数据,需要继续读取
    $startPK = $response['next_start_primary_key'];
}

/* 单次GetRange的样例输出:

{
    "consumed": {
        "capacity_unit": {
            "read": 303,
            "write": 0
        }
    },
    "next_start_primary_key": [],
    "rows": [
        {
            "primary_key_columns": [],
            "attribute_columns": {
                "attr0": 456,
                "attr1": "Hangzhou"
            }
        },
        {
            "primary_key_columns": [],
            "attribute_columns": {
                "attr0": 456,
                "attr1": "Hangzhou"
            }
        },
        {
            "primary_key_columns": [],
            "attribute_columns": {
                "attr0": 456,
                "attr1": "Hangzhou"
            }
        },

        // 更多行 。。。
    ]
}

*/

指定最多读取多少行
// 请注意,这个例子运行时PHP占用内存较大,在我们的测试环境中,需要将php.ini中的
// memory_limit 设置为 256M

$startPK = array(
    'PK0' => 0,
    'PK1' => 'aaa',
);

$endPK = array(
    'PK0' => 9999,
    'PK1' => 'zzz',
);

$limit = 5500;   // 假设我们需要获取 6000行数据的前 5500 条

while (!empty($startPK) && $limit > 0) {

    $request = array(
        'table_name' => 'MyTable',
        'direction' => 'FORWARD',                          // 方向可以为 FORWARD 或者 BACKWARD 
        'inclusive_start_primary_key' => $startPK,         // 开始主键
        'exclusive_end_primary_key' => $endPK,             // 结束主键
        'limit' => $limit,
    );
    
    $response = $otsClient->getRange($request);

    print "Read CU Consumed: {$response['consumed']['capacity_unit']['read']}\n";
    
    foreach ($response['rows'] as $rowData) {
        $limit --;

        // 处理每一行数据
    }

    $startPK = $response['next_start_primary_key'];

    // 如果 next_start_primary_key 不为空并且 limit > 0 则循环继续
}