Este conjunto de datos contiene más de 150 millones de reseñas de clientes sobre productos de Amazon. Los datos están en archivos Parquet comprimidos con Snappy en AWS S3, con un tamaño total de 49 GB (comprimidos). Veamos los pasos para insertarlos en ClickHouse.
Las consultas siguientes se ejecutaron en una instancia de producción de ClickHouse Cloud. Para obtener más información, consulte
“Especificaciones de Playground”.
Cargar el conjunto de datos
- Sin insertar los datos en ClickHouse, podemos consultarlos directamente. Veamos algunas filas para ver qué aspecto tienen:
SELECT *
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_2015.snappy.parquet')
LIMIT 3
Las filas tienen este aspecto:
Row 1:
──────
review_date: 16462
marketplace: US
customer_id: 25444946 -- 25.44 million
review_id: R146L9MMZYG0WA
product_id: B00NV85102
product_parent: 908181913 -- 908.18 million
product_title: XIKEZAN iPhone 6 Plus 5.5 inch Waterproof Case, Shockproof Dirtproof Snowproof Full Body Skin Case Protective Cover with Hand Strap & Headphone Adapter & Kickstand
product_category: Wireless
star_rating: 4
helpful_votes: 0
total_votes: 0
vine: false
verified_purchase: true
review_headline: case is sturdy and protects as I want
review_body: I won't count on the waterproof part (I took off the rubber seals at the bottom because the got on my nerves). But the case is sturdy and protects as I want.
Row 2:
──────
review_date: 16462
marketplace: US
customer_id: 1974568 -- 1.97 million
review_id: R2LXDXT293LG1T
product_id: B00OTFZ23M
product_parent: 951208259 -- 951.21 million
product_title: Season.C Chicago Bulls Marilyn Monroe No.1 Hard Back Case Cover for Samsung Galaxy S5 i9600
product_category: Wireless
star_rating: 1
helpful_votes: 0
total_votes: 0
vine: false
verified_purchase: true
review_headline: One Star
review_body: Cant use the case because its big for the phone. Waist of money!
Row 3:
──────
review_date: 16462
marketplace: US
customer_id: 24803564 -- 24.80 million
review_id: R7K9U5OEIRJWR
product_id: B00LB8C4U4
product_parent: 524588109 -- 524.59 million
product_title: iPhone 5s Case, BUDDIBOX [Shield] Slim Dual Layer Protective Case with Kickstand for Apple iPhone 5 and 5s
product_category: Wireless
star_rating: 4
helpful_votes: 0
total_votes: 0
vine: false
verified_purchase: true
review_headline: but overall this case is pretty sturdy and provides good protection for the phone
review_body: The front piece was a little difficult to secure to the phone at first, but overall this case is pretty sturdy and provides good protection for the phone, which is what I need. I would buy this case again.
- Definamos una nueva tabla
MergeTree llamada amazon_reviews para almacenar estos datos en ClickHouse:
CREATE DATABASE amazon
CREATE TABLE amazon.amazon_reviews
(
`review_date` Date,
`marketplace` LowCardinality(String),
`customer_id` UInt64,
`review_id` String,
`product_id` String,
`product_parent` UInt64,
`product_title` String,
`product_category` LowCardinality(String),
`star_rating` UInt8,
`helpful_votes` UInt32,
`total_votes` UInt32,
`vine` Bool,
`verified_purchase` Bool,
`review_headline` String,
`review_body` String,
PROJECTION helpful_votes
(
SELECT *
ORDER BY helpful_votes
)
)
ENGINE = MergeTree
ORDER BY (review_date, product_category)
- El siguiente comando
INSERT usa la función de tabla s3Cluster, que permite procesar varios archivos de S3 en paralelo con todos los nodos de su clúster. También usamos un comodín para insertar cualquier archivo que empiece por https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_*.snappy.parquet:
INSERT INTO amazon.amazon_reviews SELECT *
FROM s3Cluster('default',
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_*.snappy.parquet')
En ClickHouse Cloud, el nombre del clúster es default. Cambia default por el nombre de tu clúster… o usa la función de tabla s3 (en lugar de s3Cluster) si no tienes un clúster.
- Esa consulta no tarda mucho: promedia unas 300.000 filas por segundo. En unos 5 minutos deberías ver todas las filas insertadas:
- Veamos cuánto espacio ocupan nuestros datos:
Los datos originales ocupaban unos 70G, pero en ClickHouse comprimidos ocupan unos 30G.
- Ejecutemos algunas consultas. Estas son las 10 reseñas más útiles del conjunto de datos:
Esta consulta usa una proyección para mejorar el rendimiento.
- Estos son los 10 productos de Amazon con más reseñas:
- Estas son las calificaciones promedio de las reseñas por mes para cada producto (¡una pregunta real de entrevista de Amazon!):
- Este es el número total de votos por categoría de producto. Esta consulta es rápida porque
product_category está en la clave primaria:
- Busquemos los productos en cuyas reseñas aparece con mayor frecuencia la palabra “awful”. Esta es una tarea considerable: hay que analizar más de 151M cadenas en busca de una sola palabra:
SELECT
product_id,
any(product_title),
avg(star_rating),
count() AS count
FROM amazon.amazon_reviews
WHERE position(review_body, 'awful') > 0
GROUP BY product_id
ORDER BY count DESC
LIMIT 50;
Observa el tiempo de ejecución de la consulta para un volumen de datos tan grande. ¡Además, los resultados son una lectura entretenida!
- Podemos ejecutar la misma consulta otra vez, pero esta vez buscamos awesome en las reseñas:
SELECT
product_id,
any(product_title),
avg(star_rating),
count() AS count
FROM amazon.amazon_reviews
WHERE position(review_body, 'awesome') > 0
GROUP BY product_id
ORDER BY count DESC
LIMIT 50;