Tablas para consultas sql
El comando sql`…` forma parte del Server SDK: lee datos directamente de la base de datos de Qubix y está disponible en los scripts, las reglas automáticas de Britva y los handlers de sitios. Esta es una referencia de qué tablas y columnas puede alcanzar, y bajo qué reglas.
Cómo funciona el acceso
- Solo lectura. Solo se permiten consultas que comiencen con
SELECT,WITH,SHOW,DESCRIBEoEXPLAIN. Cualquier modificación de datos (INSERT,UPDATE,DELETE) y el acceso a fuentes externas desde dentro de la consulta están bloqueados. - Parámetros seguros. Los valores pasados mediante
${…}siempre van como parámetros de la consulta, no intercalados en el texto. No es necesario escapar nada manualmente, y la sustitución en la consulta es imposible. - Solo ve sus propios datos. La consulta se ejecuta dentro de los permisos de su rol: obtiene exactamente las filas que tiene permiso de ver en los informes. Los datos de otros usuarios no son accesibles.
- Un límite de tamaño. Una sola consulta devuelve como máximo unos pocos miles de filas (el administrador establece el límite exacto). Para selecciones grandes, agregue directamente en la consulta —
count(),sum(),GROUP BY.
El nombre de la tabla se escribe sin prefijo de base de datos — simplemente qubix_events.
qubix_events — el flujo de eventos
La tabla principal: una fila por evento del visitante y por acción de conversión. A través de ella puede ver todo lo que ocurre con el tráfico — desde la primera visita hasta el depósito y la entrega de push.
Evento e identidad
| Columna | Qué es |
|---|---|
event | El tipo de evento (valores en la tabla siguiente) |
event_time | La hora del evento |
piuid | El identificador del visitante (persistente entre visitas) |
pwa_id | La PWA a la que pertenece el evento |
domain | El dominio en el que ocurrió el evento |
url | La dirección de la página |
Geo y dispositivo
| Columna | Qué es |
|---|---|
geo, country | El país del visitante (por GeoIP) |
city | La ciudad |
language | El idioma del navegador |
ua | El User-Agent |
ip | La dirección IP |
device | Datos del dispositivo (JSON) |
Seguimiento y atribución
| Columna | Qué es |
|---|---|
click_id | El id de clic del rastreador |
campaign_id | La campaña del rastreador |
ad_id | El anuncio |
sub_id_1 … sub_id_16 | Etiquetas personalizadas del rastreador |
fbc, fbp, fbclid | Parámetros de atribución de Facebook |
gclid, ttclid | Atribución de Google / TikTok |
source_clid | El id de clic original |
pixel | El id del píxel |
params | Todos los parámetros de la dirección (un mapa «clave → valor») |
Oferta
| Columna | Qué es |
|---|---|
offer_id | La oferta |
offer_url | El enlace de la oferta |
Push
| Columna | Qué es |
|---|---|
push_campaign_id | La campaña push |
subscription_id | La suscripción push del visitante |
message_id | El id del mensaje enviado |
push_title, push_body | El texto del push |
Conversión
| Columna | Qué es |
|---|---|
status | El estado de la conversión |
revenue | Los ingresos por el evento |
currency | La moneda |
response_code | El código de respuesta (para eventos del lado del servidor) |
error_message | El texto del error, si lo hay |
external_id | Un identificador externo |
extra | Datos adicionales del evento (JSON) |
Valores de event
Los principales tipos de evento que verá en el flujo:
| Grupo | Valores |
|---|---|
| Visitas y vistas | campaign_visit, render, white_page |
| Instalación de PWA | install_accepted, install_rejected, install_blocked, installed, launch_pwa, install_fallback_redirect |
| Push | push_prompt_shown, push_allow, push_deny, push_ignored, push_subscribe, push_sent, push_shown, push_click, push_dismiss, push_expired |
| Conversiones | reg (registro), dep (depósito) |
Los valores de los eventos de suscripción e instalación coinciden con los eventos del Browser SDK — lo que window.sdk envía desde el navegador llega directamente aquí.
Ejemplo
Cuántos visitantes de cada país permitieron el push en el último día:
const rows = sql`
SELECT geo, count() AS allowed
FROM qubix_events
WHERE event = 'push_allow'
AND event_time >= now() - INTERVAL 1 DAY
GROUP BY geo
ORDER BY allowed DESC`
for (const row of rows) console.log(row.geo, row.allowed)
Otras tablas
| Tabla | Qué contiene |
|---|---|
pwa_apps | Configuración de aplicaciones PWA: pwa_id, name, status, country, category, rating, downloads, push_placement y otros campos del constructor |
push_subscriptions | Suscripciones push: subscription_id, pwa_id, geo_country, active, subscribed_at |
push_campaigns | Campañas push: push_campaign_id, name, status, target_geo |
Las métricas de informes ya preparadas (gasto, ingresos, ROAS, conversiones por anuncio) es más sencillo tomarlas no del flujo sin procesar sino de los campos del objeto ad — la lista completa está en Métricas y columnas.
Los secretos del servicio no son accesibles desde las consultas — por ejemplo, las claves privadas para el push no se pueden leer. Una consulta siempre funciona en modo de solo lectura y únicamente dentro de los permisos de su rol.