Méthode Table.Scan dans l'AWS SDK for .NET - Amazon DynamoDB

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Méthode Table.Scan dans l'AWS SDK for .NET

La méthode Scan effectue une analyse complète de la table. Elle fournit deux surcharges. Le seul paramètre requis par la méthode Scan est le filtre d'analyse que vous pouvez fournir à l'aide de la surcharge suivante.

Exemple
Scan(ScanFilter filter);

Par exemple, supposons que vous gériez une table de threads de forum suivant des informations telles que l'objet (principal) du thread, le message associé, l'Id de forum auquel le thread appartient, les Tags et autres informations. Supposons que l'objet soit la clé primaire.

Exemple
Thread(Subject, Message, ForumId, Tags, LastPostedDateTime, .... )

Il s'agit d'une version simplifiée des forums et unités d'exécution que vous voyez sur les forums AWS (consultez Forums de discussion). L'exemple de code C# suivant interroge tous les fils de discussion d'un forum spécifique (ForumId = 101) étiquetés « sortkey ». Étant donné que ForumId n'est pas une clé primaire, l'exemple analyse la table. Le ScanFilter inclut deux conditions. La requête retourne tous les threads qui satisfont aux deux conditions.

Exemple
string tableName = "Thread"; Table ThreadTable = Table.LoadTable(client, tableName); ScanFilter scanFilter = new ScanFilter(); scanFilter.AddCondition("ForumId", ScanOperator.Equal, 101); scanFilter.AddCondition("Tags", ScanOperator.Contains, "sortkey"); Search search = ThreadTable.Scan(scanFilter);

Spécification de paramètres facultatifs

Vous pouvez également spécifier des paramètres facultatifs pour Scan, tels qu'une liste spécifique d'attributs à extraire ou l'exécution ou non d'une lecture à cohérence forte. Pour spécifier des paramètres facultatifs, vous devez créer un objet ScanOperationConfig qui inclut les paramètres obligatoires et facultatifs, et utiliser la surcharge suivante.

Exemple
Scan(ScanOperationConfig config);

L'exemple de code C# suivant exécute la même requête précédente (rechercher les unités d’exécution de forum dans lesquelles ForumId a la valeur 101 et l'attribut Tag contient le mot clé « sortkey »). Supposons que vous souhaitiez ajouter un paramètre facultatif pour récupérer uniquement une liste d'attributs spécifiques. Dans ce cas, vous devez créer un objet ScanOperationConfig en fournissant tous les paramètres, requis et facultatifs, comme illustré dans l'exemple de code suivant.

Exemple
string tableName = "Thread"; Table ThreadTable = Table.LoadTable(client, tableName); ScanFilter scanFilter = new ScanFilter(); scanFilter.AddCondition("ForumId", ScanOperator.Equal, forumId); scanFilter.AddCondition("Tags", ScanOperator.Contains, "sortkey"); ScanOperationConfig config = new ScanOperationConfig() { AttributesToGet = new List<string> { "Subject", "Message" } , Filter = scanFilter }; Search search = ThreadTable.Scan(config);

Exemple : analyse à l'aide de la méthode Table.Scan

L'opération Scan effectue une analyse de table complète, ce qui en fait une opération potentiellement coûteuse. Vous devez utiliser les requêtes à la place. Cependant, il se peut que vous deviez parfois exécuter une analyse par rapport à une table. Par exemple, vous pouvez avoir une erreur d'entrée de données dans la tarification du produit et vous devez analyser la table comme illustré dans l'exemple de code C# suivant. L'exemple analyse la table ProductCatalog pour rechercher les produits pour lesquels la valeur de prix est inférieure à 0. L'exemple illustre l'utilisation de deux surcharges Table.Scan.

  • Table.Scan qui prend l'objet ScanFilter comme paramètre.

    Vous pouvez passer le paramètre ScanFilter lors du passage des seuls paramètres requis.

  • Table.Scan qui prend l'objet ScanOperationConfig comme paramètre.

    Vous devez utiliser le paramètre ScanOperationConfig si vous souhaitez passer des paramètres facultatifs à la méthode Scan.

Exemple
using System; using System.Collections.Generic; using System.Linq; using Amazon.DynamoDBv2; using Amazon.DynamoDBv2.DocumentModel; namespace com.amazonaws.codesamples { class MidLevelScanOnly { private static AmazonDynamoDBClient client = new AmazonDynamoDBClient(); static void Main(string[] args) { Table productCatalogTable = Table.LoadTable(client, "ProductCatalog"); // Scan example. FindProductsWithNegativePrice(productCatalogTable); FindProductsWithNegativePriceWithConfig(productCatalogTable); Console.WriteLine("To continue, press Enter"); Console.ReadLine(); } private static void FindProductsWithNegativePrice(Table productCatalogTable) { // Assume there is a price error. So we scan to find items priced < 0. ScanFilter scanFilter = new ScanFilter(); scanFilter.AddCondition("Price", ScanOperator.LessThan, 0); Search search = productCatalogTable.Scan(scanFilter); List<Document> documentList = new List<Document>(); do { documentList = search.GetNextSet(); Console.WriteLine("\nFindProductsWithNegativePrice: printing ............"); foreach (var document in documentList) PrintDocument(document); } while (!search.IsDone); } private static void FindProductsWithNegativePriceWithConfig(Table productCatalogTable) { // Assume there is a price error. So we scan to find items priced < 0. ScanFilter scanFilter = new ScanFilter(); scanFilter.AddCondition("Price", ScanOperator.LessThan, 0); ScanOperationConfig config = new ScanOperationConfig() { Filter = scanFilter, Select = SelectValues.SpecificAttributes, AttributesToGet = new List<string> { "Title", "Id" } }; Search search = productCatalogTable.Scan(config); List<Document> documentList = new List<Document>(); do { documentList = search.GetNextSet(); Console.WriteLine("\nFindProductsWithNegativePriceWithConfig: printing ............"); foreach (var document in documentList) PrintDocument(document); } while (!search.IsDone); } private static void PrintDocument(Document document) { // count++; Console.WriteLine(); foreach (var attribute in document.GetAttributeNames()) { string stringValue = null; var value = document[attribute]; if (value is Primitive) stringValue = value.AsPrimitive().Value.ToString(); else if (value is PrimitiveList) stringValue = string.Join(",", (from primitive in value.AsPrimitiveList().Entries select primitive.Value).ToArray()); Console.WriteLine("{0} - {1}", attribute, stringValue); } } } }