Reseñas de Google a Redshift
Redshift ya guarda la facturación, el turno y la afluencia. Lo único que no guarda es lo que dijo el cliente, y esa es la columna que explica las otras tres.
Reseñas sincronizándose en menos de cinco minutos • Sin necesidad de demo
Two tills staffed at five on a Friday and half the self-checkouts down
Marisol walked me to the thing I could not find. Twice.
Fine for a quick shop, the queue actually moves
Self-checkout froze again and nobody came over
La pregunta es qué tienda va por detrás de sus semejantes
Google Business Profile le da una valoración por ficha y las reseñas debajo. Nunca le dirá que ocho de sus tiendas urbanas están a una décima de 4,5 mientras la novena está en 3,6, porque no puede poner esos nueve números uno junto a otro. En Redshift eso es una CTE y una función de ventana.
La comparación que importa es contra un grupo de semejantes, no contra toda la cadena. Un 3,6 significa poco junto a una media del conjunto que mezcla una tienda de calle comercial con un express de gasolinera. Significa mucho junto a las siete tiendas del mismo formato.
La forma de la respuesta es el diagnóstico. Un cambio de precios se lee como todas las tiendas moviéndose juntas. Un hueco en el turno, un datáfono que dejó de funcionar, un gerente que se fue en marzo, se lee como una tienda que cae mientras sus vecinas se mantienen.
El siguiente paso es una cláusula WHERE, porque el texto de la reseña es una columna normal. Cuente las reseñas que mencionan las cajas de autopago desde marzo, divididas por tienda, y lo tiene antes que la reunión regional.
-- 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 La tienda llega como el título de la ficha, y usted la mapea una sola vez
Reviewflowz crea un perfil de reseñas por cada ficha de Google, así que la tienda que generó una reseña queda escrita en cada fila en lugar de deducirse del texto. Llega a la hoja sincronizada como la columna B, con el encabezado Profile Name, y es el título de la ficha tal como lo guarda Google. Un título, no una dirección postal.
Así que lo mapea una sola vez. Declárelo como VARCHAR, ponga una columna profile_name en su propia tabla de tiendas junto a ella, y a partir de ahí es una clave de combinación normal con su DISTKEY correspondiente.
Ese paso único es mejor que una columna de ubicación que le rellenáramos nosotros, porque el mapeo es suyo. Dos fichas que Google mantiene separadas pueden apuntar a una misma clave de tienda. Una tienda renombrada en abril conserva la misma clave a ambos lados del cambio de nombre.
Las direcciones sí existen en el producto, y sería incorrecto dar a entender lo contrario. El feed OData lleva un conjunto de entidades Locations con la calle, la ciudad, el código postal y la latitud y longitud. No están en la hoja, así que llegan a Redshift de la misma forma que su propia tabla de tiendas.
Column B in the synced sheet. The Google listing title.
DISTSTYLE KEY DISTKEY (profile_name) SORTKEY (review_date)
No reply column. The synced sheet does not carry one, so nothing downstream of it can.
Cómo llegan realmente las filas a Redshift
No hay un destino Redshift dentro de Reviewflowz al que darle clic, y esta página no se va a inventar uno. Lo que obtiene, en todos los planes, es una hoja de Google en su propio Drive que Reviewflowz mantiene al día, a las :02 y a las :32 de cada hora.
Redshift nunca lee esa hoja donde está. BigQuery sí, por eso la versión de esta página para BigQuery es un solo CREATE EXTERNAL TABLE y esta no lo es. Todo camino hacia Redshift pasa por S3, y el más corto es Amazon AppFlow, que toma Google Sheets como origen y Redshift como destino.
AppFlow inserta, no hace upsert, y la hoja se corrige sola cuando alguien edita su reseña. Así que recargue la tabla en vez de añadir a ella, o escriba usted mismo la exportación y entréguesela a un COPY JOB con AUTO ON. En cualquier caso el bucket es suyo y esto es una tarde, no un trimestre.
Hay un detalle silencioso que hace que el camino sin código funcione. AppFlow ata un flujo de Sheets a los encabezados de columna que encuentra y se rompe si se mueven. El encabezado de exportación de Reviewflowz no se mueve: 28 columnas, mismo orden en cada sincronización, por diseño.
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.
One COPY with a JOB, and each new file that lands is picked up on its own.
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.
Combínela con lo que ya guarda por tienda
Todo operador con más de una sede mantiene una tabla con una fila por tienda y por semana: facturación, horas de turno frente al plan, afluencia, la fecha de la última reforma. Las reseñas de Google llegan etiquetadas de la misma forma, así que juntar ambas es un JOIN, no un proyecto.
Ahí es donde los números dejan de ser interesantes y empiezan a ser útiles. Una valoración junto a las ventas por visita muestra lo que cuesta de verdad un mal trimestre en una tienda. La misma valoración junto a las horas de turno muestra si la tienda de la que todos se quejan es la tienda que nadie cubrió de personal.
También arregla la comparación de forma definitiva. Combínela con sus propios segmentos, calle comercial frente a parque comercial, reformada frente a pendiente de reforma, y cada tienda se mide contra las tiendas a las que de verdad se parece, en vez de contra una media que no describe ninguna.
Esta es toda la razón para llevar las reseñas de Google a un almacén de datos en vez de leerlas en una herramienta. Una herramienta de reseñas solo puede hablarle de reseñas. No puede ver la facturación y nunca se le va a dar. Redshift ya la tiene, por eso la reseña es lo que debe moverse.
analytics.google_reviews
ops.store_week
site_key is yours. It reaches the reviews table through one mapping from the Google listing title, written once.
Seis meses de texto de reseñas, una sola sentencia
El texto completo de la reseña es una columna VARCHAR como cualquier otra, así que el término que le interesa es un ILIKE y un GROUP BY en vez de una tarde de lectura. Seis meses de reseñas de Google contadas por tienda, para la palabra que se repite, es una sola sentencia.
Reviewflowz detecta el idioma de cada reseña a partir del propio texto y lo escribe en su propia columna, por eso una reseña en español dejada en una ficha de Texas llega igualmente a la misma tabla y aparece en la misma búsqueda en cuanto amplía el término.
Las etiquetas llegan ya rellenas, así que los temas están ahí antes de que escriba un clasificador. Trátelas como un punto de partida: el número sobre el que actúa un gerente regional suele ser el recuento de reseñas que coinciden con su propia palabra, en su propio vocabulario.
Un aviso sobre la columna de fecha, porque cambia lo que modela. El volumen de reseñas de Google sigue la afluencia, no un calendario de lanzamientos. Sube el viernes, se duplica el sábado, y repunta durante dos semanas después de una campaña local. Una media mensual queda por encima de cinco de esos días y por debajo de los otros dos, así que compare lo comparable por día de la semana.
-- 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 Redshift lo sabe todo sobre la tienda, menos lo que dijo el cliente
Configúrelo en menos de cinco minutos. Sin necesidad de demo.
¿Hay un conector nativo de Redshift?
No desde Reviewflowz, y sería deshonesto dar a entender que sí. Lo que Reviewflowz le da es una hoja de Google sincronizada en su propio Drive en todos los planes, más la Review API y webhooks en Premium. AWS pone la otra mitad. Amazon AppFlow toma Google Sheets como origen y Redshift como destino, pasando por un bucket S3 que usted controla, lo cual es configuración y no código. Si prefiere ser dueño de la canalización, exporte usted mismo las filas a S3 y cárguelas con un COPY JOB. Ambas opciones dan más trabajo que la versión de esta página para BigQuery, donde BigQuery consulta la hoja donde está. Ninguna de las dos pasa de una tarde.
¿La tienda llega de verdad en cada fila?
Sí. Reviewflowz crea un perfil de reseñas por cada ficha de Google, así que cada fila de reseña lleva la ficha a la que pertenece. Llega como la columna B de la hoja sincronizada, con el encabezado Profile Name, y es el título de la ficha tal como lo guarda Google, no un id suyo. Mapee esos títulos a sus propias claves de tienda una sola vez al crear la tabla, y después de eso es una clave de combinación normal.
¿Cómo de actualizada está la tabla?
La hoja se resincroniza a las :02 y a las :32 de cada hora, así que todo lo que venga después se puede programar contra esas dos marcas. AppFlow puede ejecutar un flujo programado hasta una vez por minuto. Un COPY JOB con AUTO ON carga cada archivo nuevo en cuanto llega en vez de por temporizador, y un COPY que ejecute a las 3 de la madrugada deja la tabla tan actualizada como esas 3 de la madrugada.
¿Qué columnas llegan?
La hoja sincronizada tiene una cabecera fija de 28 columnas y una fila por reseña: el id de la reseña, el nombre del perfil, la plataforma, el título, el texto completo, la puntuación, un enlace de vuelta, la fecha de la reseña, el idioma detectado, el nombre de quien la dejó, las etiquetas, y el resto. No hay columna de respuesta ni pestañas por plataforma, así que se traslada a una sola tabla plana de Redshift sin nada que reestructurar.
¿Podemos elegir qué sale?
Sí. Elija qué perfiles de reseñas cubre la hoja, y añada un filtro de puntuación si quiere, así el equipo del conjunto recibe todas las tiendas mientras una vista de soporte recibe solo de una a tres estrellas.
¿La primera carga incluye nuestro historial de reseñas de Google?
Sí, en un plan de pago. Un solo clic siembra la hoja con todas las reseñas de Google pasadas de sus fichas, así que la línea de tendencia empieza completa en lugar de irse llenando durante el trimestre siguiente. Durante la prueba gratuita, las reseñas nuevas llegan a medida que se publican, y el historial se carga en cuanto se suscribe.
¿Qué pasa cuando alguien edita o elimina su reseña?
La fila se actualiza en su sitio, con clave en el id de reseña de la columna A, y cuando una reseña desaparece de su ficha de Google, su fila se va en la siguiente sincronización. Eso tiene una consecuencia que conviene diseñar de antemano. AppFlow inserta en vez de hacer upsert, y un COPY de solo inserción deja la versión antigua junto a la corregida. Recargue la tabla, o haga upsert por review_id, y Redshift se mueve con la corrección en lugar de guardar una versión de la realidad que Google ya no sostiene.
¿Esto funciona con Redshift Serverless?
Sí. Auto-copy está disponible con carácter general en los workgroups de Redshift Serverless y en los clústeres provisionados RA3, y AppFlow escribe en cualquiera de los dos. Nada de esta página depende de cuál use.
¿Necesito una demo para empezar?
No. Conecte usted mismo su Google Business Profile y la hoja de Google en menos de cinco minutos. Prueba gratuita de 14 días, sin tarjeta de crédito. La mitad de AWS la conecta usted, y tiene la misma forma que cualquier otra carga que ya ejecute.





