Avis Google vers Redshift

Redshift contient déjà les recettes, le planning et la fréquentation. La seule chose qu'il ne contient pas, c'est ce que le client a dit, et c'est la colonne qui explique les trois autres.

Synchronisation des avis en moins de cinq minutes • Sans démo

Amazon Redshift analytics.google_reviews
Google Business Profile 61,482 rows
profile_name Kestrel Market Bellwood
2

Two tills staffed at five on a Friday and half the self-checkouts down

profile_name Kestrel Market Severn Park
5

Marisol walked me to the thing I could not find. Twice.

profile_name Kestrel Express Ashgrove
4

Fine for a quick shop, the queue actually moves

profile_name Kestrel Market Bellwood
1

Self-checkout froze again and nobody came over

26 stores loading into one table COPY 09:34
  • chewy
  • qonto
  • brevo
  • jins
  • filmin
  • lugg

La question, c'est quel magasin est en retard sur ses pairs

Le profil d'établissement Google vous donne une note par fiche et les avis en dessous. Il ne vous dira jamais que huit de vos magasins urbains se situent à un dixième de 4,5 pendant que le neuvième est à 3,6, parce qu'il ne peut pas mettre ces neuf chiffres côte à côte. Dans Redshift, c'est une CTE et une fonction de fenêtrage.

La comparaison qui compte se fait contre un groupe de pairs, pas contre la chaîne. Un 3,6 ne veut pas dire grand-chose à côté d'une moyenne de parc qui mélange un magasin de centre-ville et une supérette de station-service. Il veut dire beaucoup à côté des sept magasins du même format.

La forme de la réponse est le diagnostic. Un changement de prix se lit comme tous les magasins qui dérivent ensemble. Un trou dans le planning, un terminal de carte qui a cessé de fonctionner, un responsable parti en mars, ça se lit comme un seul magasin qui chute pendant que ses voisins tiennent bon.

La suite est une clause WHERE, parce que le texte de l'avis est une colonne ordinaire. Comptez les avis mentionnant les caisses libre-service depuis mars, répartis par magasin, et vous l'avez avant la réunion régionale.

Amazon Redshift Query editor
-- every store against its own format, not the chain average
WITH by_store AS (
  SELECT s.site_key, s.format, AVG(r.score) AS rating
  FROM   analytics.google_reviews r
  JOIN   ops.stores s USING (profile_name)
  WHERE  r.review_date >= '2026-03-01'
  GROUP BY 1, 2
)
SELECT site_key, format, ROUND(rating, 1) AS rating,
       ROUND(rating - AVG(rating)
             OVER (PARTITION BY format), 1) AS vs_peers
FROM by_store ORDER BY vs_peers
Results 5 of 26 stores
site_key rating vs_peers
BELLWOOD 3.6 -0.9
ASHGROVE 4.1 -0.3
DUNMORE 4.3 -0.2
KIRKHAM 4.5 0.0
SEVERN PARK 4.6 +0.1

Le magasin arrive comme titre de fiche, et vous le mappez une fois

Reviewflowz crée un profil d'avis par fiche Google, donc le magasin concerné par un avis s'écrit sur chaque ligne plutôt que d'être déduit du texte. Il arrive dans la feuille synchronisée en colonne B, intitulée Profile Name, et c'est le titre de la fiche tel que Google le détient. Un titre, pas une adresse.

Vous le mappez donc une fois. Déclarez-le en VARCHAR, mettez une colonne profile_name sur votre propre table de magasins à côté, et à partir de là c'est une clé de jointure ordinaire, avec une DISTKEY ordinaire dessus.

Cette étape ponctuelle vaut mieux qu'une colonne de site que nous aurions remplie pour vous, parce que le mapping est le vôtre. Deux fiches que Google garde séparées peuvent pointer vers une seule clé de site. Un magasin renommé en avril garde la même clé des deux côtés du renommage.

Les adresses existent bien dans le produit, et ce serait faux de prétendre le contraire. Le flux OData porte un jeu d'entités Locations avec la ligne de rue, la ville, le code postal et la latitude et longitude. Elles ne sont pas dans la feuille, donc elles atteignent Redshift de la même façon que votre propre table de magasins.

Amazon Redshift analytics.google_reviews
profile_name VARCHAR(255) Join key

Column B in the synced sheet. The Google listing title.

review_id
VARCHAR(64)
review_date
TIMESTAMP
score
SMALLINT
review_text
VARCHAR(65535)
language
VARCHAR(8)
tags
VARCHAR(1024)
link
VARCHAR(512)
DISTSTYLE KEY DISTKEY (profile_name) SORTKEY (review_date)

No reply column. The synced sheet does not carry one, so nothing downstream of it can.

Comment les lignes atteignent concrètement Redshift

Il n'y a pas de destination Redshift à l'intérieur de Reviewflowz sur laquelle cliquer, et cette page n'en inventera pas une. Ce que vous obtenez, sur chaque forfait, c'est une feuille Google Sheets dans votre propre Drive que Reviewflowz tient à jour, à :02 et :32 minutes après chaque heure.

Redshift ne lit jamais cette feuille là où elle se trouve. BigQuery, si, ce qui explique pourquoi la version BigQuery de cette page tient en un CREATE EXTERNAL TABLE et pas celle-ci. Toute voie vers Redshift passe par S3, et la plus courte est Amazon AppFlow, qui prend Google Sheets comme source et Redshift comme destination.

AppFlow insère, il ne fait pas d'upsert, et la feuille se corrige toute seule quand un auteur modifie son avis. Rechargez donc la table plutôt que d'y ajouter des lignes, ou écrivez vous-même l'export et remettez-le à un COPY JOB avec AUTO ON. Dans les deux cas, le bucket est le vôtre, et ça prend un après-midi, pas un trimestre.

Une chose fait discrètement fonctionner la voie sans code. AppFlow lie un flux Sheets aux en-têtes de colonnes qu'il trouve, et casse quand ils bougent. L'en-tête d'export de Reviewflowz ne bouge pas : 28 colonnes, même ordre à chaque synchronisation, par conception.

Amazon Redshift Getting rows in No connector
A · No code runs as often as every minute
Google Sheets Sheet AppFlow Amazon Redshift Redshift

AppFlow reads the sheet and writes Redshift, staging through an S3 bucket you own. It inserts, it does not upsert, so you reload rather than append.

B · One job you write you own this step
Google Sheets Sheet export S3 Amazon Redshift Redshift

One COPY with a JOB, and each new file that lands is picked up on its own.

Amazon Redshift Run once
COPY analytics.google_reviews
FROM 's3://kestrel-lake/reviews/'
IAM_ROLE 'arn:aws:iam::4471...:role/redshift-copy'
FORMAT CSV IGNOREHEADER 1
JOB CREATE load_google_reviews AUTO ON;

BigQuery queries a Drive-backed sheet in place. Redshift never does, so every road above runs through a bucket you own.

Joignez-le à ce que vous gardez déjà par magasin

Tout exploitant avec plus d'un site garde une table avec une ligne par magasin et par semaine : recettes, heures de planning par rapport au prévu, fréquentation, la date de la dernière rénovation. Les avis Google arrivent tagués de la même façon, donc réunir les deux tient en un JOIN plutôt qu'en un projet.

C'est là que les chiffres cessent d'être intéressants pour devenir utiles. Une note à côté des ventes par visite montre ce que coûte réellement un mauvais trimestre dans un magasin. La même note à côté des heures de planning montre si le magasin dont tout le monde se plaint est celui que personne n'a doté en personnel.

Ça corrige aussi la comparaison pour de bon. Joignez vos propres segments, centre-ville face à zone commerciale, rénové face à en attente, et chaque magasin se mesure contre les magasins qui lui ressemblent réellement au lieu d'une moyenne qui n'en décrit aucun.

Voilà toute la raison de faire migrer les avis Google vers un entrepôt de données plutôt que de les lire dans un outil. Un outil d'avis ne peut vous parler que des avis. Il ne peut pas voir les recettes et ne les obtiendra jamais. Redshift les a déjà, ce qui explique pourquoi c'est l'avis qui doit se déplacer.

Amazon Redshift

analytics.google_reviews

ops.store_week

ON site_key
from analytics ops
site_key rating rota_gap
BELLWOOD 3.6 -14%
ASHGROVE 4.1 -4%
DUNMORE 4.3 -1%
KIRKHAM 4.5 +2%
SEVERN PARK 4.6 +1%

site_key is yours. It reaches the reviews table through one mapping from the Google listing title, written once.

Six mois de texte d'avis, une seule instruction

Le texte complet de l'avis est une colonne VARCHAR comme une autre, donc le terme qui vous intéresse est un ILIKE et un GROUP BY au lieu d'un après-midi de lecture. Six mois d'avis Google comptés par magasin, pour le mot qui revient sans cesse, tiennent en une seule instruction.

Reviewflowz détecte la langue de chaque avis à partir du texte lui-même et l'écrit dans sa propre colonne, ce qui explique pourquoi un avis en espagnol laissé sur une fiche du Texas atterrit quand même dans la même table et ressort dans la même recherche une fois que vous élargissez le terme.

Les tags arrivent déjà remplis, donc les thèmes sont là avant même que vous n'écriviez un classificateur. Traitez-les comme un point de départ : le chiffre sur lequel agit un responsable régional est généralement le nombre d'avis qui correspondent à votre propre mot, dans votre propre vocabulaire.

Un avertissement sur la colonne de date, parce que ça change ce que vous modélisez. Le volume d'avis Google suit la fréquentation, pas un calendrier de sorties. Il grimpe le vendredi, double le samedi, et bondit pendant quinze jours après une campagne locale. Une moyenne mensuelle se situe au-dessus de cinq de ces jours et en dessous des deux autres, donc comparez ce qui est comparable par jour de la semaine.

Amazon Redshift Query editor
-- six months of review text, one statement
SELECT s.site_key,
       COUNT(*) AS reviews,
       SUM(CASE WHEN r.review_text ILIKE '%self-checkout%'
                THEN 1 ELSE 0 END) AS mentions
FROM   analytics.google_reviews r
JOIN   ops.stores s USING (profile_name)
WHERE  r.review_date >= DATEADD(month, -6, CURRENT_DATE)
GROUP  BY 1
ORDER  BY mentions DESC
Results 5 of 26 stores in 1.2s
site_key reviews mentions share
BELLWOOD 214 61 29%
KIRKHAM 178 14 8%
SEVERN PARK 152 9 6%
DUNMORE 131 7 5%
ASHGROVE 96 5 5%

Redshift sait tout sur le magasin sauf ce que le client a dit

Configuration en moins de cinq minutes. Sans démo.

Existe-t-il un connecteur Redshift natif ?

Pas depuis Reviewflowz, et il serait malhonnête de laisser croire le contraire. Ce que Reviewflowz vous donne, c'est une feuille Google Sheets synchronisée dans votre propre Drive sur chaque forfait, plus l'API Review et des webhooks en Premium. AWS fournit l'autre moitié. Amazon AppFlow prend Google Sheets comme source et Redshift comme destination, en transitant par un bucket S3 que vous possédez, ce qui relève de la configuration plutôt que du code. Si vous préférez posséder le pipeline, exportez vous-même les lignes vers S3 et chargez-les avec un COPY JOB. Les deux demandent plus de travail que la version BigQuery de cette page, où BigQuery interroge la feuille sur place. Aucune des deux ne prend plus d'un après-midi.

Le magasin arrive-t-il vraiment sur chaque ligne ?

Oui. Reviewflowz crée un profil d'avis par fiche Google, donc chaque ligne d'avis porte la fiche à laquelle elle appartient. Elle arrive en colonne B de la feuille synchronisée, intitulée Profile Name, et c'est le titre de la fiche tel que Google le détient plutôt qu'un ID à vous. Faites correspondre ces titres à vos propres clés de site une fois, à la création de la table, et ensuite c'est une clé de jointure ordinaire.

À quel point la table est-elle à jour ?

La feuille se resynchronise à :02 et :32 minutes après chaque heure, donc tout ce qui suit en aval peut être planifié sur ces deux marques. AppFlow peut exécuter un flux planifié jusqu'à une fois par minute. Un COPY JOB avec AUTO ON charge chaque nouveau fichier à son arrivée plutôt que sur une minuterie, et un COPY que vous lancez à 3h du matin rend la table aussi à jour que 3h du matin.

Quelles colonnes arrivent ?

La feuille synchronisée a un en-tête fixe de 28 colonnes et une ligne par avis : l'ID de l'avis, le nom du profil, la plateforme, le titre, le texte complet, la note, un lien de retour, la date de l'avis, la langue détectée, le nom de l'auteur, les tags, et le reste. Il n'y a pas de colonne de réponse et il n'y a pas d'onglets par plateforme, donc ça se mappe sur une seule table Redshift plate, sans rien à remodeler.

Pouvons-nous choisir ce qui en sort ?

Oui. Choisissez les profils d'avis que couvre la feuille, et ajoutez un filtre de note si vous en voulez un, pour que l'équipe du parc obtienne chaque magasin pendant qu'une vue support n'obtient qu'un à trois étoiles et rien d'autre.

Le premier chargement inclut-il notre historique d'avis Google ?

Oui, sur un forfait payant. Un clic alimente la feuille avec chaque avis Google passé sur toutes vos fiches, pour que la courbe de tendance démarre pleine plutôt que de se remplir sur le trimestre suivant. Pendant l'essai gratuit, les nouveaux avis arrivent à mesure qu'ils sont publiés, et l'historique se charge une fois que vous vous abonnez.

Que se passe-t-il quand un auteur modifie ou supprime son avis ?

La ligne se met à jour sur place, indexée sur l'ID de l'avis en colonne A, et quand un avis disparaît de votre fiche Google, sa ligne s'en va à la synchronisation suivante. Ça a une conséquence à prendre en compte. AppFlow insère plutôt qu'il ne fait d'upsert, et un COPY en ajout seul garde l'ancienne version à côté de la corrigée. Rechargez la table, ou faites un upsert sur review_id, et Redshift évolue avec la correction au lieu de garder une version de la vérité que Google n'a plus.

Est-ce que ça fonctionne avec Redshift Serverless ?

Oui. L'auto-copy est disponible en disponibilité générale sur les workgroups Redshift Serverless et sur les clusters provisionnés RA3, et AppFlow écrit vers l'un comme vers l'autre. Rien sur cette page ne dépend duquel vous utilisez.

Ai-je besoin d'une démo pour commencer ?

Non. Connectez vous-même votre profil d'établissement Google et la feuille Google Sheets en moins de cinq minutes. Essai gratuit de 14 jours, sans carte bancaire. La moitié AWS est à câbler vous-même, et elle a la même forme que tout autre chargement que vous exécutez déjà.