Analyse efficace des données volumineuses avec des hypercubes
Découvrez comment utiliser des hypercubes dans Adobe Experience Platform Experience Query Service pour effectuer une analyse avancée des données avec une efficacité accrue. Ce document explique comment utiliser les fonctions avancées de la Apache Datasketches bibliothèque pour gérer des comptes distincts et des calculs complexes de manière incrémentielle, sans avoir à retraiter les données historiques à chaque fois.
Dans l’analyse des données volumineuses, la génération de mesures telles que des décomptes distincts, des quantiles, des éléments les plus fréquents, des jointures et des analyses graphiques implique souvent un comptage non additif (où les résultats ne peuvent pas simplement être résumés à partir de sous-groupes). Les méthodes traditionnelles nécessitent le retraitement de toutes les données historiques, ce qui peut nécessiter beaucoup de ressources et prendre du temps. Utilisez des schémas, qui sont des résumés compacts qui utilisent des probabilités pour représenter des jeux de données volumineux, et des fonctions avancées de Query Service pour rationaliser ce processus en réduisant la nécessité de recalculer.
Fonctions clés des hypercubes key-functions
Les hypercubes offrent plusieurs fonctions puissantes pour améliorer l’efficacité et la flexibilité de l’analyse des données.
- Compter les utilisateurs uniques ou les requêtes distinctes : utilisez les fonctionnalités SQL pour générer des nombres uniques d’utilisateurs interagissant avec diverses dimensions de données, telles que les consultations de produits, les visites de site ou l’activité commerciale, sans réanalyser à plusieurs reprises les données brutes.
- Traitement incrémentiel : effectuez des mises à jour incrémentielles pour plier et fusionner des points de données sur plusieurs dimensions et dans le temps sans recalculer tout de zéro.
- Analyse multidimensionnelle : les hypercubes permettent le filtrage multidimensionnel et la réorganisation des données afin de créer des lignes récapitulatives qui représentent des combinaisons de dimensions. Ces résumés peuvent ensuite être utilisés pour générer des informations avec un temps de calcul minimal.
Cas pratiques des hypercubes use-cases
Utilisez des hypercubes pour générer efficacement des nombres distincts pour diverses interactions utilisateur sans recalculer complètement les données à chaque fois. Voici quelques scénarios pratiques d’utilisation :
- Analysez les visiteurs uniques qui affichent des produits spécifiques au cours d’une période définie.
- Identifiez les utilisateurs qui interagissent avec plusieurs produits au cours d’une période donnée afin d’améliorer l’analyse des ventes croisées.
- Distinguer les utilisateurs qui interagissent avec un produit mais pas avec un autre au fil du temps pour découvrir les modèles de préférences.
- Combinez les données d’interaction en ligne et hors ligne pour obtenir une vue d’ensemble complète du comportement des utilisateurs sur une période donnée.
- Effectuez le suivi des mouvements des utilisateurs dans différentes activités au sein d’un événement afin d’optimiser la mise en page et les services.
Avantages des hypercubes
Dans ce cas, vous pouvez pré-calculer des informations de base pour des catégories spécifiques. Cependant, lors de l’analyse des données sur plusieurs dimensions et périodes, vous devez soit recalculer tout le contenu des données brutes, soit utiliser un hypercube Query Service. Les hypercubes rationalisent le processus en organisant efficacement les données, ce qui permet un filtrage flexible et une analyse multidimensionnelle sans retraitement. Ils utilisent des fonctions avancées pour estimer les résultats rapidement et précisément afin d’offrir des avantages clés tels qu’une meilleure efficacité de traitement, une évolutivité et une adaptabilité améliorées pour des tâches analytiques complexes.
Efficacité de la taille des données pour le traitement des requêtes
Query Service peut compresser des millions ou des milliards de points de données (par exemple, les identifiants utilisateur) dans un formulaire compact appelé schéma. Cette esquisse a une taille de données considérablement réduite pour le traitement des requêtes, ce qui permet de maintenir l’évolutivité et de travailler beaucoup plus facilement et plus rapidement. Quelle que soit la taille des données originales, la taille du schéma reste petite, ce qui rend l'analyse des données volumineuses beaucoup plus gérable et efficace.
Le diagramme ci-dessous illustre la manière dont Commerce, les Informations sur les produits et la dimension web ExperienceEvents sont traités en schémas, qui sont ensuite utilisés pour approximer des nombres uniques.
Fusionner des schémas pour faciliter et accélérer l’analyse des données
Pour éviter de recalculer et d’améliorer la vitesse de traitement, vous pouvez fusionner des esquisses de différentes catégories ou groupes. Query Service simplifie également la conception en organisant vos données dans un hypercube, où chaque ligne devient un résumé de sa partition (un ensemble de dimensions) à côté de la colonne de schéma. Chaque ligne de l'hyper-cube contient la combinaison de dimensions, mais ne contient aucune donnée brute. Lors de l’exécution d’une requête, spécifiez les colonnes dimensionnelles que vous souhaitez utiliser pour créer des mesures additifs et fusionner les schémas de ces lignes.
Rentabilité cost-effectiveness
Les données client sont souvent à grande échelle, mais vous pouvez éliminer la nécessité de retraiter les données historiques à l’aide d’un traitement incrémentiel. Les esquisses sont beaucoup plus petites et permettent des résultats plus rapides en temps réel tout en économisant sur les ressources et les coûts de calcul. Cette transformation des données rend les requêtes interactives plus réalisables et efficaces.
Présentation des fonctions
Cette section décrit comment chaque fonction optimise le traitement des données et améliore les capacités d’analyse grâce à l’utilisation efficace de croquis et d’hypercubes. Il détaille leur objectif, la syntaxe des exemples, les paramètres et la sortie attendue.
Création d’estimations de comptage uniques avec des schémas HLL
hll_build_agg est une fonction d’agrégat qui crée un schéma HLL (HyperLogLog). Cette fonction est une méthode compacte et probabiliste permettant d’estimer le nombre de valeurs uniques dans une colonne ou une expression d’un jeu de données groupé.
Définition de la fonction
hll_build_agg(column [, lgConfigK])
Utilisation :
L’exemple suivant montre comment la fonction peut être structurée au sein d’une requête.
SELECT
[dim1, dim2 ... ,] hll_build_agg(coalesce(col1, col2, col3)) AS sketch_col
FROM fact_sketch_table
[GROUP BY dimension1, dimension2 ...]
Paramètres
columnlgConfigKSortie
sketch_resExemple SQL
L’exemple suivant crée un schéma d’agrégat sur la colonne customer_id :
SELECT
country,
hll_build_agg(customer_id, 10) AS sketch
FROM
EXPLODE(
ARRAY<STRUCT<country STRING, customer_id STRING, invoice_id STRING>>[
('UA', 'customer_id_1', 'invoice_id_11'),
('CZ', 'customer_id_2', 'invoice_id_22'),
('CZ', 'customer_id_2', 'invoice_id_23'),
('BR', 'customer_id_3', 'invoice_id_31'),
('UA', 'customer_id_2', 'invoice_id_24')
])
GROUP BY country;
Exemple de sortie SQL :
Estimation de nombres distincts avec des schémas HLL
hll_estimate est une fonction scalaire qui fournit une estimation du nombre distinct dans chaque ligne d’un jeu de données. Contrairement aux fonctions d’agrégat, hll_estimate fonctionne au niveau des lignes et est utilisé pour estimer le nombre distinct d’une esquisse au sein de lignes individuelles.
sketch_count.Définition de la fonction
hll_estimate(sketch_col)
Utilisation :
L’exemple suivant montre comment la fonction peut être structurée au sein d’une requête.
SELECT
[col1, col2 ... ,] hll_estimate(sketch_column) AS estimate
FROM fact_sketch_table
Paramètres
sketch_columnSortie
estimateExemple SQL
L’exemple suivant estime le nombre distinct de clients par pays à l’aide de la fonction hll_estimate sur un schéma HLL :
SELECT
country,
hll_estimate(hll_build_agg(customer_id, 10)) AS distinct_customers_by_country
FROM
(
SELECT
country,
hll_build_agg(customer_id, 10) AS sketch
FROM
EXPLODE(
ARRAY<STRUCT<country STRING, customer_id STRING, invoice_id STRING>>[
('UA', 'customer_id_1', 'invoice_id_11'),
('CZ', 'customer_id_2', 'invoice_id_22'),
('CZ', 'customer_id_2', 'invoice_id_23'),
('BR', 'customer_id_3', 'invoice_id_31'),
('UA', 'customer_id_2', 'invoice_id_24')
])
GROUP BY country
);
Exemple de sortie SQL :
Fusionner plusieurs schémas HLL avec hll_merge_agg
hll_merge_agg est une fonction d’agrégat qui fusionne plusieurs schémas HLL au sein d’un groupe, produisant une nouvelle esquisse en tant que sortie. Il permet la combinaison d’esquisses sur plusieurs partitions ou dimensions, améliorant ainsi la flexibilité de l’analyse des données.
Définition de la fonction
hll_merge_agg(sketch_col [, allowDifferentLgConfigK])
Utilisation :
L’exemple suivant montre comment la fonction peut être structurée au sein d’une requête.
SELECT
[dim1, dim2 ... ,] hll_merge_agg(sketch_column.sketch) AS estimate
FROM fact_sketch_table
[GROUP BY dimension1, dimension2 ...]
Paramètres
sketch_columnallowDifferentLgConfigKlgConfigK différentes. La valeur par défaut est false. Une exception est générée si la valeur est false et que les schémas ont des valeurs lgConfigK différentes.allowDifferentLgConfigK est défini sur false, la fusion d’esquisses avec des valeurs lgConfigK différentes entraîne un UnsupportedOperationException.Sortie
sketch_resExemple SQL
L’exemple suivant fusionne plusieurs schémas HLL sur la colonne customer_id :
SELECT
hll_merge_agg(hll_sketch) AS uniq_customers_with_invoice
FROM
(
SELECT
country,
hll_build_agg(customer_id) AS hll_sketch
FROM
EXPLODE(
ARRAY<STRUCT<country STRING, customer_id STRING, invoice_id STRING>>[
('UA', 'customer_id_1', 'invoice_id_11'),
('BR', 'customer_id_3', 'invoice_id_31'),
('CZ', 'customer_id_2', 'invoice_id_22'),
('CZ', 'customer_id_2', 'invoice_id_23'),
('BR', 'customer_id_3', 'invoice_id_31'),
('UA', 'customer_id_2', 'invoice_id_24')
])
GROUP BY country
UNION
SELECT
country,
hll_build_agg(customer_id) AS hll_sketch
FROM
EXPLODE(
ARRAY<STRUCT<country STRING, customer_id STRING, invoice_id STRING>>[
('UA', 'customer_id_1', 'invoice_id_21'),
('MX', 'customer_id_3', 'invoice_id_31'),
('MX', 'customer_id_2', 'invoice_id_21')
])
GROUP BY country
)
GROUP BY customer_id;
Exemple de sortie SQL :
Estimation de la cardinalité avec hll_merge_count_agg
hll_merge_count_agg est une fonction d’agrégat qui évalue la cardinalité (nombre d’éléments uniques) à partir d’un ou de plusieurs schémas dans une colonne. Elle renvoie une estimation unique pour tous les schémas rencontrés dans le regroupement. Cette fonction est utilisée pour agréger des schémas et ne peut pas être utilisée comme transformation au niveau de la ligne. Pour les estimations par ligne, utilisez sketch_estimate.
Définition de la fonction
hll_merge_count_agg(sketch_col [, allowDifferentLgConfigK])
Utilisation :
L’exemple suivant montre comment la fonction peut être structurée au sein d’une requête.
SELECT
[dim1, dim2 ... ,] hll_merge_count_agg(sketch_column) AS estimate
FROM fact_sketch_table
[GROUP BY dimension1, dimension2 ...]
Paramètres
sketch_columnallowDifferentLgConfigKlgConfigK différentes. Sinon, un UnsupportedOperationException est généré.Sortie
estimateExemple SQL
L’exemple suivant évalue le nombre de clients uniques avec des factures à l’aide de la fonction hll_merge_count_agg :
SELECT
hll_merge_count_agg(hll_sketch) AS uniq_customers_with_invoice
FROM
(
SELECT
country,
hll_build_agg(customer_id) AS hll_sketch
FROM
EXPLODE(
ARRAY<STRUCT<country STRING, customer_id STRING, invoice_id STRING>>[
('UA', 'customer_id_1', 'invoice_id_11'),
('BR', 'customer_id_3', 'invoice_id_31'),
('CZ', 'customer_id_2', 'invoice_id_22'),
('CZ', 'customer_id_2', 'invoice_id_23'),
('BR', 'customer_id_3', 'invoice_id_31'),
('UA', 'customer_id_2', 'invoice_id_24')
])
GROUP BY country
UNION
SELECT
country,
hll_build_agg(customer_id) AS hll_sketch
FROM
EXPLODE(
ARRAY<STRUCT<country STRING, customer_id STRING, invoice_id STRING>>[
('UA', 'customer_id_1', 'invoice_id_21'),
('MX', 'customer_id_3', 'invoice_id_31'),
('MX', 'customer_id_2', 'invoice_id_21')
])
GROUP BY country
)
GROUP BY customer_id;
Exemple de sortie SQL :
Limites
Actuellement, les schémas ne peuvent pas être mis à jour une fois créés. Les futures mises à jour permettront de mettre à jour les schémas. Grâce à cette fonctionnalité, vous pouvez gérer plus efficacement les exécutions ratées et les données arrivées tardivement.
Étapes suivantes
En lisant ce document, vous savez désormais utiliser des hypercubes et les fonctions de schéma associées pour effectuer un traitement efficace des données pour des analyses complexes et multidimensionnelles sans avoir à retraiter les données historiques. Cette approche permet de gagner du temps, de réduire les coûts et offre la flexibilité requise pour les requêtes interactives en temps réel, ce qui en fait un outil précieux pour l’analyse de données volumineuses dans Adobe Experience Platform.
Ensuite, explorez d’autres concepts clés tels que le chargement incrémentiel et la déduplication des données pour mieux comprendre comment utiliser ces fonctions efficacement en fonction de vos besoins de données spécifiques.