Saring hasil kueri di sisi server dengan menerapkan SingleColumnValueFilter atau CompositeColumnValueFilter dalam Tablestore PHP SDK.
Prasyarat
Jenis Filter
Tablestore menyediakan jenis filter berikut:
-
SingleColumnValueFilter: Mengevaluasi nilai satu kolom atribut terhadap suatu kondisi.
-
CompositeColumnValueFilter: Menggabungkan beberapa kondisi filter menggunakan operator logika. Anda dapat menggabungkan hingga 32 kondisi filter.
SingleColumnValueFilter
[
'column_name' => '<string>',
'value' => <ColumnValue>,
'comparator' => <ComparatorType>,
'pass_if_missing' => true || false,
'latest_version_only' => true || false
]
Contoh
Contoh berikut membaca baris dengan kunci primer dalam rentang [row1, row3) menggunakan kueri rentang, lalu menerapkan filter untuk hanya mengembalikan baris di mana col1 sama dengan val1.
$request = array (
'table_name' => 'test_table',
// Tetapkan kunci primary awal untuk kueri rentang.
'inclusive_start_primary_key' => array (
array('id', 'row1')
),
// Tetapkan kunci primary akhir untuk kueri rentang. Hasil tidak mencakup kunci ini.
'exclusive_end_primary_key' => array (
array('id', 'row3')
),
// Baca data dalam urutan maju.
'direction' => DirectionConst::CONST_FORWARD,
// Baca versi terbaru dari data.
'max_versions' => 1,
// Buat filter untuk mengembalikan baris di mana col1 sama dengan "val1".
'column_filter' => array (
'column_name' => 'col1',
'value' => 'val1',
'comparator' => ComparatorTypeConst::CONST_EQUAL
)
);
try {
// Panggil getRange untuk membaca baris.
$response = $client->getRange ($request);
// Proses respons.
echo "* Biaya CU Baca: " . $response['consumed']['capacity_unit']['read'] . "\n";
echo "* Biaya CU Tulis: " . $response['consumed']['capacity_unit']['write'] . "\n";
echo "* Data Baris: " . "\n";
foreach ($response['rows'] as $row) {
echo json_encode($row) . "\n";
}
} catch (Exception $e){
echo "Get Range gagal.";
}
-
Untuk mengecualikan baris yang tidak berisi kolom atribut yang ditentukan, atur:
$request['column_filter']['pass_if_missing'] = false; -
Untuk mengevaluasi semua versi kolom atribut (mengembalikan baris jika versi apa pun memenuhi kondisi), atur:
$request['column_filter']['latest_version_only'] = false;
CompositeColumnValueFilter
Gabungkan hingga 32 kondisi filter menggunakan operator logika.
[
'logical_operator' => <LogicalOperator>
'sub_filters' => [
<ColumnFilter>,
<ColumnFilter>,
<ColumnFilter>,
// kondisi lainnya
]
]
Contoh
Contoh berikut membaca baris dengan kunci primer dalam rentang [row1, row3) dan menerapkan CompositeColumnValueFilter dengan kondisi (col1 = val1 OR col2 = val2) AND (col3 = val3).
$request = array (
'table_name' => 'test_table',
// Tetapkan kunci primary awal untuk kueri rentang.
'inclusive_start_primary_key' => array (
array('id', 'row1')
),
// Tetapkan kunci primary akhir untuk kueri rentang. Hasil tidak mencakup kunci ini.
'exclusive_end_primary_key' => array (
array('id', 'row3')
),
// Baca data dalam urutan maju.
'direction' => DirectionConst::CONST_FORWARD,
// Baca versi terbaru dari data.
'max_versions' => 1
);
// Gabungkan kondisi: (col1 = val1 OR col2 = val2) AND (col3 = val3)
$request['column_filter'] = array(
'logical_operator' => LogicalOperatorConst::CONST_AND,
'sub_filters' => array(
array(
'logical_operator' => LogicalOperatorConst::CONST_OR,
'sub_filters' => array(
array(
'comparator' => ComparatorTypeConst::CONST_EQUAL,
'column_name' => 'col1',
'value' => 'val1'
),
array(
'comparator' => ComparatorTypeConst::CONST_EQUAL,
'column_name' => 'col2',
'value' => 'val2'
)
)
),
array(
'comparator' => ComparatorTypeConst::CONST_EQUAL,
'column_name' => 'col3',
'value' => 'val3'
)
)
);
try {
// Panggil getRange untuk membaca baris.
$response = $client->getRange ($request);
// Proses respons.
echo "* Biaya CU Baca: " . $response['consumed']['capacity_unit']['read'] . "\n";
echo "* Biaya CU Tulis: " . $response['consumed']['capacity_unit']['write'] . "\n";
echo "* Data Baris: " . "\n";
foreach ($response['rows'] as $row) {
echo json_encode($row) . "\n";
}
} catch (Exception $e){
echo "Get Range gagal.";
}