BigQuery est la base de données d'analyse NoOps, économique et entièrement gérée de Google. Avec BigQuery, vous pouvez interroger plusieurs téraoctets de données sans avoir à gérer d'infrastructure ni faire appel à un administrateur de base de données. Basé sur le langage SQL et le modèle de paiement à l'usage, BigQuery vous permet de vous concentrer sur l'analyse des données pour en dégager des informations pertinentes.
La jointure des tables de données peut vous fournir des renseignements très utiles sur votre ensemble de données. Toutefois, lorsque vous joignez des données, il se peut que vous vous heurtiez à des pièges courants qui peuvent altérer vos résultats. Cet atelier a pour objectif de vous apprendre à éviter ces pièges.
Voici tout d'abord les types de jointures :
Jointure croisée : elle combine chaque ligne du premier ensemble de données avec chaque ligne du deuxième ensemble de données, et toutes les combinaisons sont représentées dans les résultats.
Jointure interne : elle nécessite la présence de valeurs de clé dans les deux tables pour que les enregistrements apparaissent dans la table de résultats. Les enregistrements n'apparaissent dans la fusion que s'il existe des correspondances dans les deux tables pour les valeurs de clé.
Jointure gauche : chaque ligne de la table de gauche apparaît dans les résultats, que la table de droite contienne ou non des correspondances.
Jointure droite : l'inverse d'une jointure gauche. Chaque ligne de la table de droite apparaît dans les résultats, que la table de gauche contienne ou non des correspondances.
Vous allez utiliser un ensemble de données d'e-commerce comprenant des millions d'enregistrements Google Analytics pour le Google Merchandise Store, chargé dans BigQuery. Vous disposez d'une copie de cet ensemble de données pour cet atelier, et vous allez explorer les champs et lignes qu'il contient afin d'obtenir des informations.
Pour en savoir plus sur la syntaxe permettant de suivre et de mettre à jour vos requêtes, consultez la section Syntaxe des requêtes en SQL standard.
Objectifs de l'atelier
Dans cet atelier, vous allez :
utiliser BigQuery pour explorer un ensemble de données ;
résoudre les problèmes de lignes en double dans un ensemble de données ;
créer des jointures entre les tables de données ;
comprendre chaque type de jointure.
Préparation
Pour chaque atelier, nous vous attribuons un nouveau projet Google Cloud et un nouvel ensemble de ressources pour une durée déterminée, sans frais.
Connectez-vous à Qwiklabs dans une fenêtre de navigation privée.
Vérifiez le temps imparti pour l'atelier (par exemple : 01:15:00) : vous devez pouvoir le terminer dans ce délai.
Une fois l'atelier lancé, vous ne pouvez pas le mettre en pause. Si nécessaire, vous pourrez le redémarrer, mais vous devrez tout reprendre depuis le début.
Lorsque vous êtes prêt, cliquez sur Démarrer l'atelier.
Notez vos identifiants pour l'atelier (Nom d'utilisateur et Mot de passe). Ils vous serviront à vous connecter à Google Cloud Console.
Cliquez sur Ouvrir la console Google.
Cliquez sur Utiliser un autre compte, puis copiez-collez les identifiants de cet atelier lorsque vous y êtes invité.
Si vous utilisez d'autres identifiants, des messages d'erreur s'afficheront ou des frais seront appliqués.
Acceptez les conditions d'utilisation et ignorez la page concernant les ressources de récupération des données.
Ouvrir la console BigQuery
Dans Google Cloud Console, sélectionnez le menu de navigation > BigQuery :
Le message Welcome to BigQuery in the Cloud Console (Bienvenue sur BigQuery dans Cloud Console) s'affiche. Il contient un lien vers le guide de démarrage rapide et répertorie les mises à jour de l'interface utilisateur.
Cliquez sur Done (OK).
Tâche 1 : Créer un ensemble de données pour stocker vos tables
Dans votre projet BigQuery, créez un ensemble de données intitulé ecommerce.
Dans le volet de gauche de la section Explorateur, cliquez sur l'icône Afficher les actions en face de votre ID de projet, puis sélectionnez Créer un ensemble de données.
Définissez le champ ID de l'ensemble de données sur ecommerce (e-commerce). Laissez la valeur par défaut des autres options et cliquez sur Créer un ensemble de données.
Dans le volet de gauche, vous voyez une table ecommerce sous votre projet.
Tâche 2 : Épingler le projet de l'atelier dans BigQuery
Scénario : votre équipe vous fournit un nouvel ensemble de données recensant le stock de chacun de vos produits en vente sur votre site d'e-commerce. Vous souhaitez vous familiariser avec les produits du site Web et avec les champs que vous pouvez utiliser pour effectuer une jointure avec d'autres ensembles de données.
Le projet avec le nouvel ensemble de données s'intitule data-to-insights.
Par défaut, les ensembles de données publics BigQuery ne sont pas affichés dans l'UI Web de BigQuery. Étant donné que data-to-insights est un projet d'ensembles de données publics, vous devez l'épingler à votre arborescence des ressources :
Dans le panneau "Explorateur", cliquez sur + AJOUTER.
Sélectionnez Ajouter un projet aux favoris en saisissant son nom.
Dans le champ "Nom du projet", saisissez data-to-insights.
Cliquez sur Ajouter aux favoris.
Dans le volet "Explorateur", le projet data-to-insights apparaîtra dans les favoris.
Tâche 3 : Examiner les champs
Vous souhaitez vous familiariser avec les produits du site Web et les champs que vous pouvez utiliser pour créer des requêtes permettant d'analyser l'ensemble de données.
Dans le volet de gauche de la section Explorateur, accédez à data-to-insights > ecommerce > all_sessions_raw.
Cliquez sur l'onglet Schéma, à droite, pour afficher les champs et des informations sur chacun d'entre eux.
Tâche 4 : Identifier un champ de clé dans votre ensemble de données d'e-commerce
Examinez de plus près les produits et les champs. Vous pourrez ainsi vous familiariser avec les produits du site Web et avec les champs que vous pouvez utiliser pour effectuer une jointure avec d'autres ensembles de données.
Examiner les enregistrements
Dans cette section, vous verrez combien de noms de produits et de SKU figurent sur votre site Web, et si certains de ces champs sont uniques.
Recherchez combien de noms de produits et de SKU sont présents sur le site Web. Copiez et collez la requête suivante dans l'ÉDITEUR de requête :
#standardSQL
# how many products are on the website?
SELECT DISTINCT
productSKU,
v2ProductName
FROM `data-to-insights.ecommerce.all_sessions_raw`
Cliquez sur EXÉCUTER.
Consultez les résultats de la pagination dans l'UI Web pour afficher le nombre total d'enregistrements renvoyés, c'est-à-dire, dans notre cas, 2 273 produits et SKU.
Les résultats signifient-ils pour autant qu'il existe 2 273 SKU uniques ?
Copiez et collez la requête ci-dessous pour lister le nombre de SKU différents à l'aide de l'expression DISTINCT :
#standardSQL
# find the count of unique SKUs
SELECT
DISTINCT
productSKU
FROM `data-to-insights.ecommerce.all_sessions_raw`
Cliquez sur EXÉCUTER.
Le nombre de SKU différents les uns des autres s'élève à 1 909.
Vous avez donc 1 909 SKU distincts, ce qui est inférieur à 2 273, le nombre total de produits sur le site Web. Les premiers résultats contiennent probablement des produits ayant des SKU en double.
Regardez les enregistrements de plus près. Déterminez quels produits ont plusieurs SKU et quels SKU s'appliquent à plus d'un produit.
Copiez et collez la requête ci-dessous pour déterminer si certains noms de produits ont plusieurs SKU. Vous pouvez regrouper tous les SKU associés à un nom de produit à l'aide de la fonction STRING_AGG().
#standardSQL
# how can we find the products with more than 1 sku?
SELECT
DISTINCT
COUNT(DISTINCT productSKU) AS SKU_count,
STRING_AGG(DISTINCT productSKU LIMIT 5) AS SKU,
v2ProductName
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE productSKU IS NOT NULL
GROUP BY v2ProductName
HAVING SKU_count > 1
ORDER BY SKU_count DESC
# product name is not unique (expected for variants)
Cliquez sur EXÉCUTER.
Résultats :
Certains noms de produits ont-ils plusieurs SKU ? Vérifiez-le en examinant les résultats de la requête.
Réponse : oui
Il se peut aussi qu'un nom de produit soit associé à plusieurs SKU. Cela peut être dû aux variations. Un nom de produit (comme "T-shirt") peut être décliné en plusieurs variantes, par exemple en fonction de sa couleur ou de sa taille. Un produit peut donc raisonnablement avoir plusieurs SKU.
Pour savoir si tel est le cas, copiez et collez la requête ci-dessous :
#standardSQL
SELECT
DISTINCT
COUNT(DISTINCT v2ProductName) AS product_count,
STRING_AGG(DISTINCT v2ProductName LIMIT 5) AS product_name,
productSKU
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE v2ProductName IS NOT NULL
GROUP BY productSKU
HAVING product_count > 1
ORDER BY product_count DESC
# SKU is not unique (indicates data quality issues)
Cliquez sur EXÉCUTER.
Question : lorsque vous examinez les résultats de la requête, voyez-vous des valeurs de SKU uniques associées à plus d'un nom de produit ? Que remarquez-vous à propos de ces noms de produits ?
Réponse : oui, il semblerait que de nombreux SKU soient associés à plus d'un nom de produit. Plusieurs noms de produits semblent être étroitement liés malgré de légères différences orthographiques (par exemple, "Water proof Gear Bag" et "Waterproof Gear Bag" [sac étanche]).
Vous verrez dans la section suivante en quoi cela peut poser problème.
Tâche 5 : Piège : clé non unique
Un SKU est conçu pour identifier un produit de façon unique et constitue la base de votre condition de jointure lorsque vous joignez d'autres tables. Une clé non unique peut provoquer de graves problèmes pour les données.
Écrivez une requête pour identifier tous les noms de produits associés au SKU 'GGOEGPJC019099'.
Solution possible :
#standardSQL
# multiple records for this SKU
SELECT DISTINCT
v2ProductName,
productSKU
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE productSKU = 'GGOEGPJC019099'
Cliquez sur EXÉCUTER.
v2ProductName
productSKU
7" Dog Frisbee
GGOEGPJC019099
7" Dog Frisbee
GGOEGPJC019099
Google 7-inch Dog Flying Disc Blue
GGOEGPJC019099
D'après les résultats de la requête, il existe apparemment trois noms différents pour le même produit. Dans l'exemple, nous notons un caractère spécial dans l'un des noms et une formulation légèrement différente pour un autre :
Joindre des données du site Web à la liste d'inventaire de vos produits
Découvrez l'effet d'une jointure sur un ensemble de données contenant plusieurs produits associés à un même SKU. Explorez d’abord l'ensemble de données de l’inventaire de produits (la table products) pour voir si ce SKU est unique.
Copiez et collez la requête ci-dessous :
#standardSQL
# join in another table
# products (has inventory)
SELECT * FROM `data-to-insights.ecommerce.products`
WHERE SKU = 'GGOEGPJC019099'
Cliquez sur EXÉCUTER.
Piège lié aux jointures : création involontaire d'une relation de SKU de type plusieurs à un
Ensuite, joignez l’ensemble de données de l’inventaire aux noms de produits et SKU de votre site Web pour y associer le stock de chaque produit en vente sur le site Web.
Copiez et collez la requête ci-dessous :
#standardSQL
SELECT DISTINCT
website.v2ProductName,
website.productSKU,
inventory.stockLevel
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
WHERE productSKU = 'GGOEGPJC019099'
Cliquez sur EXÉCUTER.
Que se passe-t-il lorsque vous joignez la table du site Web et la table de l'inventaire des produits au SKU ? À présent, voyez-vous le stock du produit ?
Réponse : oui, mais l'élément stockLevel est affiché trois fois (une fois pour chaque enregistrement).
Ensuite, exécutez une requête qui affiche la totalité du stock pour chaque article de l'inventaire.
Copiez et collez la requête ci-dessous :
#standardSQL
SELECT
productSKU,
SUM(stockLevel) AS total_inventory
FROM (
SELECT DISTINCT
website.v2ProductName,
website.productSKU,
inventory.stockLevel
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
WHERE productSKU = 'GGOEGPJC019099'
)
GROUP BY productSKU
Cliquez sur EXÉCUTER.
Tâche 6 : Solution pour éviter le piège lié aux jointures : utiliser des SKU distincts avant de procéder à la jointure
Quelles sont les options qui permettraient de résoudre votre problème de triple comptage ? Vous devez tout d'abord sélectionner uniquement des SKU distincts sur le site Web avant de joindre d'autres ensembles de données.
Saisissez une requête pour renvoyer le nombre d'éléments productSKU distincts de data-to-insights.ecommerce.all_sessions_raw.
Solution possible :
#standardSQL
SELECT
COUNT(DISTINCT website.productSKU) AS distinct_sku_count
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
Réponse : 1 909 SKU distincts sont renvoyés de l'ensemble de données du site Web.
Piège posé par la jointure : perte des enregistrements de données après une jointure
Vous êtes maintenant prêt à refaire la jointure de l'ensemble de données de votre inventaire.
Copiez et collez la requête ci-dessous :
#standardSQL
SELECT DISTINCT
website.productSKU
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
Cliquez sur EXÉCUTER.
Combien d'enregistrements ont été renvoyés ? L'ensemble des 1 909 SKU distincts ?
Réponse : non, seulement 1 090 enregistrements.
Vous avez perdu 819 SKU après avoir joint les ensembles de données. Enquêtez sur cette disparition en affinant vos champs.
Copiez et collez la requête ci-dessous :
#standardSQL
# pull ID fields from both tables
SELECT DISTINCT
website.productSKU AS website_SKU,
inventory.SKU AS inventory_SKU
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
# IDs are present in both tables, how can we dig deeper?
Cliquez sur EXÉCUTER.
Il semble que les SKU apparaissent dans les deux ensembles de données après la jointure.
Résolution du piège posé par la jointure : sélection du bon type de jointure et filtrage de NULL
Le type JOIN (JOINTURE) par défaut est INNER JOIN (JOINTURE INTERNE) qui renvoie des enregistrements uniquement s'il existe une correspondance dans les tables de gauche et de droite qui ont été jointes.
Reprenez la requête précédente pour employer un autre type de jointure. Vous pourrez ainsi inclure tous les enregistrements de la table du site Web, qu'il y ait ou non une correspondance avec un enregistrement de SKU de l'inventaire. Types de jointure possibles : INNER JOIN (JOINTURE INTERNE), LEFT JOIN (JOINTURE GAUCHE), RIGHT JOIN (JOINTURE DROITE), FULL JOIN (JOINTURE COMPLÈTE), CROSS JOIN (JOINTURE CROISÉE).
Solution possible :
#standardSQL
# the secret is in the JOIN type
# pull ID fields from both tables
SELECT DISTINCT
website.productSKU AS website_SKU,
inventory.SKU AS inventory_SKU
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
LEFT JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
Cliquez sur EXÉCUTER.
À l'aide du type LEFT JOIN (JOINTURE GAUCHE), vous obtenez l'intégralité des 1 909 SKU d'origine du site Web dans vos résultats.
Combien de SKU manque-t-il dans l'inventaire de vos produits ?
Saisissez une requête pour filtrer les valeurs NULL de la table de l'inventaire.
Solution possible :
#standardSQL
# find product SKUs in website table but not in product inventory table
SELECT DISTINCT
website.productSKU AS website_SKU,
inventory.SKU AS inventory_SKU
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
LEFT JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
WHERE inventory.SKU IS NULL
Cliquez sur EXÉCUTER.
Copiez et collez la requête ci-dessous pour confirmer l’utilisation de l’un des SKU spécifiques de l'ensemble de données du site Web :
#standardSQL
# you can even pick one and confirm
SELECT * FROM `data-to-insights.ecommerce.products`
WHERE SKU = 'GGOEGATJ060517'
# query returns zero results
Cliquez sur EXÉCUTER.
Pourquoi l'ensemble de données de l'inventaire ne présenterait-il pas tous les SKU ?
Réponse : malheureusement, il n'y a pas de réponse simple. Il s'agit probablement d'une question commerciale :
Certains SKU peuvent être des produits numériques que vous ne stockez pas dans l'inventaire.
D'anciens produits que vous avez vendus dans le cadre de commandes passées sur le site Web peuvent ne plus être proposés dans l'inventaire actuel.
Des données peuvent être légitimement absentes de l'inventaire et doivent être suivies.
Y a-t-il des produits qui se trouvent dans l'ensemble de données de l'inventaire de produits, mais qui sont absents du site Web ?
Saisissez une requête en utilisant un autre type de jointure pour en savoir plus.
Solution possible :
#standardSQL
# reverse the join
# find records in website but not in inventory
SELECT DISTINCT
website.productSKU AS website_SKU,
inventory.SKU AS inventory_SKU
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
RIGHT JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
WHERE website.productSKU IS NULL
Cliquez sur EXÉCUTER.
Réponse : oui. Il manque deux SKU dans l'ensemble de données du site Web.
Ensuite, ajoutez d'autres champs de l'ensemble de données de l'inventaire de produits pour afficher plus de détails.
Copiez et collez la requête ci-dessous :
#standardSQL
# what are these products?
# add more fields in the SELECT STATEMENT
SELECT DISTINCT
website.productSKU AS website_SKU,
inventory.*
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
RIGHT JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
WHERE website.productSKU IS NULL
Cliquez sur EXÉCUTER.
Pourquoi les produits ci-dessous seraient-ils absents de l'ensemble de données du site Web d'e-commerce ?
Réponses possibles :
Un nouveau produit (aucune commande, rien sous sentimentScore) et un produit "in store only" (disponible en magasin uniquement).
Un nouveau produit avec 0 commande
Pourquoi le nouveau produit n'apparaîtrait-il pas dans l'ensemble de données de votre site Web ?
L'ensemble de données du site Web contient les commandes passées des clients. Les nouveaux produits qui n'ont jamais été vendus n'apparaîtront pas dans les analyses d'audience Internet tant qu'ils ne seront pas vus ou achetés.
Remarque : En règle générale, on ne fait pas de jointures RIGHT JOIN (JOINTURE DROITE) dans les requêtes de production. On fait simplement une jointure LEFT JOIN (JOINTURE GAUCHE) et on change l'ordre des tables.
Comment obtenir une requête répertoriant tous les produits manquants sur le site Web ou dans l'inventaire ?
Saisissez une requête en utilisant un autre type de jointure.
Solution possible :
#standardSQL
SELECT DISTINCT
website.productSKU AS website_SKU,
inventory.SKU AS inventory_SKU
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
FULL JOIN `data-to-insights.ecommerce.products` AS inventory
ON website.productSKU = inventory.SKU
WHERE website.productSKU IS NULL OR inventory.SKU IS NULL
Cliquez sur EXÉCUTER.
Vous obtenez 819 + 2 = 821 SKU.
Le calcul LEFT JOIN + RIGHT JOIN = FULL JOIN renvoie tous les enregistrements des deux tables quelles que soient les clés de jointure correspondantes. Vous affinez ensuite les filtres lorsque vous avez des erreurs de correspondance de chaque côté.
Piège posé par la jointure : jointure croisée involontaire
Ne pas savoir quelle est la relation entre les clés de table de données (1:1, 1:N, N:N) peut générer des résultats inattendus et réduire considérablement les performances des requêtes.
Le dernier type de jointure est CROSS JOIN (JOINTURE CROISÉE).
Créez une table avec un pourcentage de remise valable sur l'ensemble du site, et que vous souhaitez appliquer à tous les produits de la catégorie "Clearance" (Liquidation).
Remplacement de la table nommée qwiklabs-***.
Copiez et collez la requête ci-dessous :
#standardSQL
CREATE OR REPLACE TABLE ecommerce.site_wide_promotion AS
SELECT .05 AS discount;
Cliquez sur EXÉCUTER.
Dans le volet de gauche, l'élément site_wide_promotion est désormais répertorié dans la section "Ressources" sous qwiklabs-gcp-xxx > ecommerce.
Copiez et collez la requête ci-dessous pour savoir combien de produits sont en liquidation :
SELECT DISTINCT
productSKU,
v2ProductCategory,
discount
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
CROSS JOIN ecommerce.site_wide_promotion
WHERE v2ProductCategory LIKE '%Clearance%'
Cliquez sur EXÉCUTER.
Remarque : La syntaxe ne comporte pas de condition de jointure (par exemple, ON ou USING) pour une jointure CROSS JOIN (JOINTURE CROISÉE). Le champ est simplement multiplié en fonction du premier ensemble de données ou d'une réduction de 0,05 pour tous les articles.
Voyons quelles sont les conséquences de l'ajout involontaire de plusieurs enregistrements dans la table des remises.
Copiez et collez la requête ci-dessous pour insérer deux autres enregistrements dans la table de promotion :
#standardSQL
INSERT INTO ecommerce.site_wide_promotion (discount)
VALUES (.04),
(.03);
Cliquez sur EXÉCUTER.
Examinons ensuite les valeurs de données de la table de promotion.
Copiez et collez la requête ci-dessous :
#standardSQL
SELECT discount FROM ecommerce.site_wide_promotion
Cliquez sur EXÉCUTER.
Que se passe-t-il lorsque vous appliquez à nouveau la remise sur les 82 produits en liquidation ?
Copiez et collez la requête ci-dessous :
#standardSQL
# now what happens:
SELECT DISTINCT
productSKU,
v2ProductCategory,
discount
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
CROSS JOIN ecommerce.site_wide_promotion
WHERE v2ProductCategory LIKE '%Clearance%'
Cliquez sur EXÉCUTER.
Combien de produits sont renvoyés ?
Réponse : au lieu de 82, vous en obtenez maintenant 246, ce qui représente plus d'enregistrements que n'en contient votre table d'origine.
Penchons-nous sur la cause sous-jacente en examinant un SKU.
Copiez et collez la requête ci-dessous :
#standardSQL
SELECT DISTINCT
productSKU,
v2ProductCategory,
discount
FROM `data-to-insights.ecommerce.all_sessions_raw` AS website
CROSS JOIN ecommerce.site_wide_promotion
WHERE v2ProductCategory LIKE '%Clearance%'
AND productSKU = 'GGOEGOLC013299'
Cliquez sur EXÉCUTER.
Quel a été l'effet de la jointure croisée ?
Réponse :
Dans la mesure où il existe trois codes de réduction à associer, vous multipliez l'ensemble de données d'origine par 3.
Remarque : Ce comportement ne se limite pas aux jointures croisées. Avec une jointure normale, il est possible de croiser involontairement des jointures lorsque les relations de données sont de type plusieurs à plusieurs, ce qui peut facilement renvoyer des millions, voire des milliards d'enregistrements.
Vous devez donc connaître les relations entre vos données avant de procéder à une jointure et ne pas partir du principe que les clés sont uniques.
Tâche 7 : Dédupliquer les lignes
Au début de l'atelier, vous avez écrit une requête affichant plusieurs noms de produits pour un même SKU. Dédupliquer des enregistrements, comme nous allons le voir ici, est une compétence courante chez les analystes de données. Recherchez une façon de ne sélectionner qu’un seul produit par SKU.
Commençons par la requête permettant d'afficher tous les noms de produits par SKU.
Copiez et collez la requête ci-dessous :
#standardSQL
# recall the earlier query that showed multiple product_names for each SKU
SELECT
DISTINCT
COUNT(DISTINCT v2ProductName) AS product_count,
STRING_AGG(DISTINCT v2ProductName LIMIT 5) AS product_name,
productSKU
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE v2ProductName IS NOT NULL
GROUP BY productSKU
HAVING product_count > 1
ORDER BY product_count DESC
Cliquez sur EXÉCUTER.
Étant donné que les noms de produits sont pour la plupart extrêmement ressemblants (et que vous souhaitez mapper un seul SKU à un seul produit), saisissez une requête pour ne choisir que l'un des noms de produits. Ce post StackOverflow de Felipe Hoffa vous servira de source d’inspiration.
Copiez et collez la requête ci-dessous :
#standardSQL
# take the one name associated with a SKU
WITH product_query AS (
SELECT
DISTINCT
v2ProductName,
productSKU
FROM `data-to-insights.ecommerce.all_sessions_raw`
WHERE v2ProductName IS NOT NULL
)
SELECT k.* FROM (
# aggregate the products into an array and
# only take 1 result
SELECT ARRAY_AGG(x LIMIT 1)[OFFSET(0)] k
FROM product_query x
GROUP BY productSKU # this is the field you want deduplicated
);
Cliquez sur EXÉCUTER.
Vous avez réussi à dédupliquer les noms de produits pour chaque SKU. Testez la requête ci-dessus avec vos ensembles de données afin de dédupliquer vos champs avant de les associer à d'autres ensembles de données.
Tâche 8 : Tester vos connaissances
Félicitations !
Vous avez terminé cet atelier et évité les pièges que peuvent poser les jointures SQL en identifiant les enregistrements en double et en apprenant quand utiliser chaque type de jointure. Bon travail !
Terminer l'atelier
Une fois l'atelier terminé, cliquez sur Terminer l'atelier. Google Cloud Skills Boost supprime les ressources que vous avez utilisées, puis efface le compte.
Si vous le souhaitez, vous pouvez noter l'atelier. Sélectionnez un nombre d'étoiles, saisissez un commentaire, puis cliquez sur Envoyer.
Le nombre d'étoiles correspond à votre degré de satisfaction :
1 étoile = très insatisfait(e)
2 étoiles = insatisfait(e)
3 étoiles = ni insatisfait(e), ni satisfait(e)
4 étoiles = satisfait(e)
5 étoiles = très satisfait(e)
Si vous ne souhaitez pas donner votre avis, vous pouvez fermer la boîte de dialogue.
Pour soumettre des commentaires, suggestions ou corrections, veuillez accéder à l'onglet Assistance.
Copyright 2020 Google LLC Tous droits réservés. Google et le logo Google sont des marques de Google LLC. Tous les autres noms d'entreprises et de produits peuvent être des marques des entreprises auxquelles ils sont associés.
Les ateliers créent un projet Google Cloud et des ressources pour une durée déterminée.
Les ateliers doivent être effectués dans le délai imparti et ne peuvent pas être mis en pause. Si vous quittez l'atelier, vous devrez le recommencer depuis le début.
En haut à gauche de l'écran, cliquez sur Démarrer l'atelier pour commencer.
Utilisez la navigation privée
Copiez le nom d'utilisateur et le mot de passe fournis pour l'atelier
Cliquez sur Ouvrir la console en navigation privée
Connectez-vous à la console
Connectez-vous à l'aide des identifiants qui vous ont été attribués pour l'atelier. L'utilisation d'autres identifiants peut entraîner des erreurs ou des frais.
Acceptez les conditions d'utilisation et ignorez la page concernant les ressources de récupération des données.
Ne cliquez pas sur Terminer l'atelier, à moins que vous n'ayez terminé l'atelier ou que vous ne vouliez le recommencer, car cela effacera votre travail et supprimera le projet.
Ce contenu n'est pas disponible pour le moment
Nous vous préviendrons par e-mail lorsqu'il sera disponible
Parfait !
Nous vous contacterons par e-mail s'il devient disponible
Un atelier à la fois
Confirmez pour mettre fin à tous les ateliers existants et démarrer celui-ci
Utilisez la navigation privée pour effectuer l'atelier
Ouvrez une fenêtre de navigateur en mode navigation privée pour effectuer cet atelier. Vous éviterez ainsi les conflits entre votre compte personnel et le compte temporaire de participant, qui pourraient entraîner des frais supplémentaires facturés sur votre compte personnel.
Cet atelier s'intéresse à la rétro-ingénierie des relations entre des tables de données, ainsi qu'aux pièges à éviter lors de leur jointure.
Durée :
0 min de configuration
·
Accessible pendant 60 min
·
Terminé après 60 min