¿Quieres ir por encima de 7/10? Este artículo es para ti entonces.
¿Qué tan bueno es tu SQL? ¿Quieres prepararte para una entrevista de trabajo lo antes posible?
Esta publicación de blog explica en detalle las técnicas de almacenamiento de datos SQL más complejas. Usaré el dialecto SQL estándar de BigQuery para escribir algunas ideas sobre este tema.
Es importante actualizar la tabla. Es importante de hecho. La situación ideal es cuando tiene transacciones que son una clave PRIMARIA, enteros únicos e incremento automático. La actualización de la tabla en este caso es simple:
Ese no siempre es el caso cuando se trabaja con conjuntos de datos de esquema en estrella desnormalizados en almacenes de datos modernos. es posible que tenga la tarea de crear sesiones con SQL y/o actualizar conjuntos de datos de forma incremental con solo una parte de los datos. Es posible que transaction_id
no exista, pero en su lugar tendrá que lidiar con el modelo de datos donde la clave única depende de la última transaction_id
(o marca de tiempo) conocida. Por ejemplo, user_id
en el conjunto de datos last_online
depende de la última marca de tiempo de conexión conocida. En este caso, querrá update
los usuarios existentes e insert
los nuevos.
Puede usar MERGE o puede dividir la operación en dos acciones. Uno para actualizar registros existentes con nuevos y otro para insertar registros completamente nuevos que no existen (situación LEFT JOIN).
MERGE es una declaración que generalmente se usa en bases de datos relacionales. El comando MERGE de Google BigQuery es una de las declaraciones del lenguaje de manipulación de datos (DML). A menudo se usa para realizar tres funciones principales de forma atómica en una sola declaración. Estas funciones son ACTUALIZAR, INSERTAR y ELIMINAR.
Esto significa que el comando MERGE de Google BigQuery le permite combinar datos de Google BigQuery actualizando, insertando y eliminando datos de sus tablas de Google BigQuery.
Considere este SQL:
Hacer UNNEST() y verificar si la palabra que necesita está en la lista que necesita podría ser útil en muchas situaciones, es decir, el análisis de sentimientos del almacén de datos:
Esto nos da la oportunidad de guardar algunas líneas de código y ser más elocuentes en cuanto al código. Normalmente, querrá poner esto en una subconsulta y agregar un filtro en la cláusula where , pero puede hacer esto en su lugar:
Otro ejemplo de cómo NO usarlo con tablas particionadas . No hagas esto . Este es un mal ejemplo porque, dado que los sufijos de la tabla coincidente probablemente se determinen dinámicamente (en función de algo en su tabla), se le cobrará por un escaneo completo de la tabla.
También puede usarlo en la cláusula HAVING
y las funciones AGGREGATE
.
La función ROLLUP se utiliza para realizar la agregación en varios niveles. Esto es útil cuando tiene que trabajar con gráficos de dimensiones.
La siguiente consulta devuelve el crédito total gastado por día por el tipo de transacción (is_gift) especificado en la cláusula where , y también muestra el gasto total de cada día y el gasto total en todas las fechas disponibles.
Imagine que debe convertir su tabla en un objeto JSON donde cada registro es un elemento de una matriz anidada. Aquí es donde la función to_json_string()
se vuelve útil:
Luego, puede usarlo en cualquier lugar: fechas, embudos de marketing, índices, gráficos de histograma, etc.
Dadas las columnas user_id
, date
y total_cost
. Para CADA fecha, ¿cómo muestra el valor de ingresos totales para CADA cliente manteniendo todas las filas? Puedes lograr esto así:
Muy a menudo, los desarrolladores de BI tienen la tarea de agregar un promedio móvil a sus informes y tableros fantásticos. Esto podría ser un gráfico de líneas MA de 7, 14, 30 días/mes o incluso un año. Entonces, ¿Cómo lo hacemos?
Se vuelve realmente útil cuando trabaja con la retención de usuarios o desea verificar algún conjunto de datos en busca de valores faltantes, es decir, fechas. BigQuery tiene una función llamada GENERATE_DATE_ARRAY
:
Esto es útil para obtener algo más reciente de sus datos, es decir, el último registro actualizado, etc. o incluso para eliminar duplicados:
Otra función de numeración. Realmente útil para monitorear cosas como Login duration in seconds
si tiene una aplicación móvil. Por ejemplo, tengo mi aplicación conectada a Firebase y cuando los usuarios login
, puedo ver cuánto tiempo les tomó.
Esta función divide las filas en depósitos constant_integer_expression
según el orden de las filas y devuelve el número de depósito basado en 1 que se asigna a cada fila. El número de filas en los cubos puede diferir en 1 como máximo. Los valores restantes (el resto del número de filas dividido por cubos) se distribuyen uno para cada cubo, comenzando con el cubo 1. Si constant_integer_expression
se evalúa como NULL, 0 o negativo, se proporciona un error.
También se les llama funciones de numeración . Tiendo a usar DENSE_RANK
como función de clasificación predeterminada , ya que no omite la siguiente clasificación disponible, mientras que RANK
sí lo haría. Devuelve valores de rango consecutivos. Puede usarlo con una partición que divide los resultados en cubos distintos. Las filas de cada partición reciben los mismos rangos si tienen los mismos valores. Ejemplo:
Otro ejemplo con precios de productos:
Pivot cambia filas a columnas. Es todo lo que hace. Unpivot hace lo contrario .
Esa es otra función útil que ayuda a obtener un delta para cada fila contra el primer/último valor en esa partición en particular.
Esto es útil cuando necesita aplicar una función definida por el usuario (UDF) con alguna lógica compleja a cada fila o tabla. Siempre puede considerar su tabla como una matriz de objetos TYPE STRUCT y luego pasar cada uno de ellos a UDF. Depende de tu lógica. Por ejemplo, lo uso para calcular los tiempos de vencimiento de la compra:
De manera similar, puede crear tablas sin necesidad de usar UNION ALL . Por ejemplo, lo uso para simular algunos datos de prueba para pruebas unitarias. De esta manera, puede hacerlo muy rápido simplemente usando Alt
+ Shift
+ Down
en su editor.
Un buen ejemplo podrían ser los embudos de marketing. Su conjunto de datos puede contener eventos que se repiten continuamente del mismo tipo, pero lo ideal sería encadenar cada evento con el siguiente de un tipo diferente. Esto puede ser útil cuando necesita obtener una lista de algo, por ejemplo, eventos, compras, etc. para crear un conjunto de datos de embudos. Trabajar con PARTITION BY le brinda la oportunidad de agrupar todos los siguientes eventos sin importar cuántos de ellos existan en cada partición.
Lo usaría si necesita extraer algo de datos no estructurados, es decir, tipos de cambio, agrupaciones personalizadas, etc.
Considere este ejemplo con datos de tipos de cambio:
A veces, es posible que desee usar regexp
para obtener versiones principales , de lanzamiento o de modificación para su aplicación y crear un informe personalizado:
SQL es una poderosa herramienta que ayuda a manipular datos. Con suerte, estos casos de uso de SQL del marketing digital le serán útiles. Es una habilidad muy útil y puede ayudarte con muchos proyectos. Estos fragmentos de SQL me hicieron la vida mucho más fácil y los uso en el trabajo casi todos los días. Además, SQL y los almacenes de datos modernos son herramientas esenciales para la ciencia de datos. Sus sólidas características de dialecto permiten modelar y visualizar datos con facilidad. Dado que SQL es el lenguaje que utilizan los profesionales de los almacenes de datos y la inteligencia empresarial, es una excelente selección si desea compartir datos con ellos. Es la forma más común de comunicarse con casi todas las soluciones de almacén/lago de datos del mercado.
Publicado originalmente en mydataschool.com por datamike
Mike es una persona apasionada y enfocada digitalmente con una gran cantidad de impulso y entusiasmo, que adora los desafíos que presenta la combinación completa de marketing digital. Vive en el Reino Unido, completó un MBA de la Universidad de Newcastle en 2015.