Fonctions d’agrégation bit par bit - Amazon Redshift

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.

Fonctions d’agrégation bit par bit

Les fonctions d’agrégation bit par bit calculent les opérations binaires pour effectuer l’agrégation des colonnes d’entiers et des colonnes pouvant être converties ou arrondies en valeurs entières.

Utilisation des valeurs NULL dans les agrégations bit par bit

Lorsque vous appliquez une fonction bit par bit à une colonne autorisant les valeurs nulles, toutes les valeurs NULL sont éliminées avant le calcul du résultat de la fonction. Si aucune ligne n’est admissible à l’agrégation, la fonction bit par bit renvoie NULL. Le même comportement s’applique aux fonctions d’agrégation standard. Voici un exemple.

select sum(venueseats), bit_and(venueseats) from venue where venueseats is null; sum | bit_and ------+--------- null | null (1 row)

Prise en charge de la fonction DISTINCT pour les agrégations bit par bit

Tout comme d’autres fonctions d’agrégation, les fonctions bit par bit prennent en charge le mot-clé DISTINCT.

Toutefois, l’utilisation de DISTINCT avec ces fonctions n’a aucun impact sur les résultats. La première instance d’une valeur est suffisante pour satisfaire des opérations AND ou OR bit par bit. Cela ne fait aucune différence si des valeurs en double sont présentes dans l’expression qui est évaluée.

Du fait que le traitement DISTINCT risque d’entraîner une certaine surcharge de l’exécution des requêtes, nous vous recommandons de ne pas utiliser DISTINCT avec les fonctions bit par bit.

Exemples de présentation pour les fonctions bit par bit

Vous trouverez ci-dessous quelques exemples de présentation montrant comment utiliser les fonctions bit par bit. Vous trouverez également des exemples de code spécifiques avec la description de chaque fonction.

Les exemples de fonctions bit par bit sont basés sur l’exemple de base de données TICKIT. La table USERS de l’exemple de base de données TICKIT contient plusieurs colonnes booléennes qui indiquent si chaque utilisateur est connu pour aimer différents types d’événements, comme le sport, le théâtre, l’opéra et ainsi de suite. Un exemple suit.

select userid, username, lastname, city, state, likesports, liketheatre from users limit 10; userid | username | lastname | city | state | likesports | liketheatre -------+----------+-----------+--------------+-------+------------+------------- 1 | JSG99FHE | Taylor | Kent | WA | t | t 9 | MSD36KVR | Watkins | Port Orford | MD | t | f

Supposons qu’une nouvelle version de la table USERS est construite différemment. Dans cette nouvelle version, une colonne à un seul entier définit (sous forme binaire) huit types d’événements que chaque utilisateur aime ou n’aime pas. Dans cette conception, chaque position de bit représente un type d’événement. Un utilisateur qui aime les huit types d’évènements a chacun d’eux défini sur 1 (comme à la première ligne du tableau suivant). Un utilisateur qui n’aime aucun de ces événements a les huit bits définis sur 0 (voir la deuxième ligne). Un utilisateur qui aime uniquement le sport et le jazz est représenté sur la troisième ligne suivante.

SPORTS THEATRE JAZZ OPERA ROCK VEGAS BROADWAY CLASSICAL
User 1 1 1 1 1 1 1 1 1
User 2 0 0 0 0 0 0 0 0
User 3 1 0 1 0 0 0 0 0

Dans la table de base de données, ces valeurs binaires peuvent être stockées dans une seule colonne LIKES sous forme d’entiers, comme illustré ci-dessous.

Utilisateur Valeur binaire Valeur stockée (nombre entier)
User 1 11111111 255
User 2 00000000 0
User 3 10100000 160