Utilisez le SDK Tablestore pour Python afin de filtrer les lignes selon les valeurs des colonnes d'attribut côté serveur et de réduire la quantité de données renvoyées au client.
Prérequis
Installez le SDK Tablestore pour Python et initialisez un client.
Description de la fonctionnalité
Le serveur applique les filtres après avoir lu les données. Il ne renvoie au client que les lignes satisfaisant aux conditions. Le filtrage ne réduit ni le nombre de lignes lues par le serveur, ni les unités de capacité de lecture (CU) consommées. Utilisez les filtres après avoir restreint la plage de clés primaires.
Les conditions de filtre suivantes sont prises en charge :
SingleColumnConditioncompare la valeur d'une seule colonne d'attribut.SingleColumnRegexConditionextrait une sous-chaîne d'une colonne d'attribut de type chaîne et compare la valeur extraite.CompositeColumnConditioncombine jusqu'à 32 conditions à l'aide des opérateursAND,ORouNOT.
L'exemple suivant renvoie uniquement les lignes dont la dernière valeur de la colonne d'attribut status est online lors d'une lecture par plage.
column_filter = SingleColumnCondition(
"status",
"online",
ComparatorType.EQUAL,
pass_if_missing=False,
)
start_primary_key = [("partition", "device"), ("id", INF_MIN)]
end_primary_key = [("partition", "device"), ("id", INF_MAX)]
consumed, next_start_primary_key, rows, next_token = client.get_range(
"example_table",
Direction.FORWARD,
start_primary_key,
end_primary_key,
column_filter=column_filter,
)
Paramètres
Condition de valeur sur une seule colonne
Appelez SingleColumnCondition(column_name, column_value, comparator, pass_if_missing=True, latest_version_only=True) pour créer une condition de valeur sur une seule colonne.
|
Nom |
Type |
Description |
|
column_name (obligatoire) |
|
Nom de la colonne d'attribut à évaluer. |
|
column_value (obligatoire) |
|
Valeur cible. Son type doit correspondre au type de valeur de la colonne d'attribut. |
|
comparator (obligatoire) |
|
Opérateur de comparaison. Les valeurs valides sont |
|
pass_if_missing (facultatif) |
|
Indique si une ligne satisfait au filtre lorsque la colonne d'attribut cible est absente. Valeur par défaut : |
|
latest_version_only (facultatif) |
|
Indique s'il faut évaluer uniquement la dernière version. Valeur par défaut : |
Condition d'expression régulière
Appelez SingleColumnRegexCondition(column_name, comparator, column_value=None, regex_rule=None, latest_version_only=True) pour créer une condition d'expression régulière. Seules les colonnes d'attribut de type chaîne prennent en charge le filtrage par expression régulière.
|
Nom |
Type |
Description |
|
column_name (obligatoire) |
|
Nom de la colonne d'attribut de type chaîne à évaluer. |
|
comparator (obligatoire) |
|
Opérateur de comparaison. Les valeurs valides sont |
|
column_value (facultatif) |
|
Valeur cible. Omettez ce paramètre si |
|
regex_rule (facultatif) |
|
Règle d'extraction de sous-chaîne et de conversion de type. |
|
latest_version_only (facultatif) |
|
Indique s'il faut évaluer uniquement la dernière version. Valeur par défaut : |
Si la colonne d'attribut cible est absente, une ligne ne satisfait jamais au filtre d'expression régulière. Le paramètre pass_if_missing ne peut pas être configuré séparément pour cette condition.
Règle d'expression régulière
Le paramètre regex_rule est de type RegexRule et contient les paramètres suivants.
|
Nom |
Type |
Description |
|
regex_input (obligatoire) |
|
Expression régulière, limitée à 256 octets. Les expressions compatibles Perl et les caractères mono-octet sont pris en charge. Les caractères chinois ne sont pas pris en charge. Si l'expression contient des groupes de capture, le premier groupe est extrait. Sinon, la correspondance entière est extraite. |
|
cast_type (obligatoire) |
|
Type vers lequel la valeur extraite est convertie. Les valeurs valides sont |
Condition composite
Appelez CompositeColumnCondition(combinator) pour créer une condition composite, puis appelez add_sub_condition pour ajouter des conditions.
|
Nom |
Type |
Description |
|
combinator (obligatoire) |
|
Opérateur logique. Les valeurs valides sont |
|
sub_conditions (obligatoire) |
|
Conditions à combiner. Les conditions de valeur sur une seule colonne, les conditions d'expression régulière et les conditions composites imbriquées sont prises en charge, avec un maximum de 32 conditions. |
Exemples
Filtrer avec une expression régulière
L'exemple suivant extrait le nombre de valeurs telles que user_004 dans la colonne d'attribut account, convertit le nombre en entier et renvoie uniquement les lignes dont la valeur extraite est supérieure à 3.
regex_rule = RegexRule(r"user_(\d+)", CastType.VT_INTEGER)
column_filter = SingleColumnRegexCondition(
"account",
ComparatorType.GREATER_THAN,
3,
regex_rule,
)
consumed, next_start_primary_key, rows, next_token = client.get_range(
"example_table",
Direction.FORWARD,
start_primary_key,
end_primary_key,
column_filter=column_filter,
)
Combiner des filtres
L'exemple suivant construit le filtre (category == "sensor" OR category == "gateway") AND score > 3.
category_filter = CompositeColumnCondition(LogicalOperator.OR)
category_filter.add_sub_condition(
SingleColumnCondition("category", "sensor", ComparatorType.EQUAL)
)
category_filter.add_sub_condition(
SingleColumnCondition("category", "gateway", ComparatorType.EQUAL)
)
column_filter = CompositeColumnCondition(LogicalOperator.AND)
column_filter.add_sub_condition(category_filter)
column_filter.add_sub_condition(
SingleColumnCondition("score", 3, ComparatorType.GREATER_THAN)
)
Évaluer les versions historiques
L'exemple suivant définit latest_version_only sur False. Une ligne est renvoyée si n'importe quelle version de la colonne d'attribut status est online. Les lignes ne contenant pas la colonne status ne sont pas renvoyées.
column_filter = SingleColumnCondition(
"status",
"online",
ComparatorType.EQUAL,
pass_if_missing=False,
latest_version_only=False,
)