批量读取数据

更新时间:
复制为 MD 格式

本文介绍如何通过 PHP SDK 批量读取表格存储中的数据,支持查询多个表的数据。

注意事项

单次批量读取操作最多支持读取 100 行数据。

前提条件

初始化Tablestore Client

方法说明

public function batchGetRow(array $request)

$request参数说明

  • tables(必选)array:批量读取数据信息,包含以下参数。

    名称

    类型

    说明

    table_name(必选)

    string

    数据表名称。

    primary_keys(必选)

    array

    主键信息,包括主键列名称和主键值。

    • 主键列数据类型包括 STRING、INTEGER 和 BINARY。

    • 主键个数和类型必须与数据表的主键保持一致。

    max_versions(可选)

    int

    最大版本数。

    • 必须设置最大版本数和版本范围的其中一个。

    • 如果符合查询条件的数据版本数量超过设置的最大版本数,按从新到旧的顺序返回指定版本数量的数据。

    time_range(可选)

    array

    数据版本范围。

    • 必须设置最大版本数和版本范围的其中一个。

    • 表格存储数据表的每个属性列可以有不同的数据版本,设置版本范围后,仅返回版本范围内的数据。

    columns_to_get(可选)

    array

    指定读取的数据列,可以是主键列或属性列。

    • 不设置columns_to_get时,返回整行数据。

    • 设置columns_to_get时,如果读取的行数据不包含任何指定的数据列,将返回 null。

    column_filter(可选)

    array

    过滤条件,详情请参见过滤器

    • 如果同时设置columns_to_getcolumn_filter,先按columns_to_get筛选符合条件的数据行,再按column_filter条件过滤数据。

示例代码

以下示例代码用于读取 test_table 表中主键值为 row1 和 row2 的两行数据。

$table = array (
    'table_name' => 'test_table',
    'max_versions' => 1,
    'primary_keys' => array (
        array ( array('id', 'row1') ),
        array ( array('id', 'row2') )
    )
);

$request = array (
    'tables' => array (
        $table
    )
);

try {
    // 调用 batchGetRow 方法读取行数据
    $response = $client->batchGetRow ($request);

    // 返回结果处理
    foreach ($response['tables'] as $tableGroup) {
        echo "* Table: " . $tableGroup['table_name'] . "\n";
        foreach ($tableGroup['rows'] as $row) {
            if ($row['is_ok']) {
                if ($row['primary_key'] != null) {
                    echo "Succeeded Row: " . json_encode($row['primary_key']) . json_encode($row['attribute_columns']) . "\n";
                } else {
                    echo "Succeeded Row: This row is not exist." . "\n";
                }
            } else {
                echo "Failed Row: " . $row['error']['code'] . '. ' . $row['error']['message'] . "\n";
            }
        }
    }
} catch (Exception $e){
    echo "Batch get row failed.";
}

您可以在批量读取数据时参考以下示例代码进行参数设置。

  • 读取多张表的数据。批量读取支持一次读取多张表的数据,您需要为每张表指定一个MultiRowQueryCriteria。

    $table1 = array (
        'table_name' => 'orders_small',
        'max_versions' => 1,
        'primary_keys' => array (
            array (
                array('order_id', '90fb478c-1360-11f0-a34d-00163e30a2a9')
            )
        )
    );
    
    $request = array (
        'tables' => array (
            $table,
            $table1
        )
    );
  • 设置读取的数据版本范围,结果只返回版本范围内的数据。

    // 设置查询的数据版本范围为当前时间往前一天
    $table['time_range'] = array (
        'start_time' => intval(microtime(true) * 1000) - 86400 * 1000,
        'end_time' => intval(microtime(true) * 1000)
    );
  • 指定读取的属性列。

    $table['columns_to_get'] = array('col2');

相关文档

范围读取数据