35
#SQSummit TSQL Menos Frecuente Desde SQL Server 2005 Luis José Morán Cuenca [email protected] Data Platform Architect

TSQL menos frecuente desde SQL Server 2005

  • Upload
    solidq

  • View
    444

  • Download
    0

Embed Size (px)

Citation preview

Page 1: TSQL menos frecuente desde SQL Server 2005

#SQSummit

TSQL

Menos Frecuente

Desde SQL Server 2005

Luis José Morán Cuenca

[email protected]

Data Platform Architect

Page 2: TSQL menos frecuente desde SQL Server 2005

TSQL Menos Frecuente Desde SQL Server 2005

• Introducción

• Cross y Outer Apply

• Grouping Sets

• Funciones de Windowing• Funciones de Ranking

• Funciones de Offset

• Funciones de Agregado

• Tablas Temporales de SQL Server 2016

Page 3: TSQL menos frecuente desde SQL Server 2005

CROSS / OUTER APPLY

• SQL Server 2000• Funciones Escalares

• Lo bueno permiten parametrización

• No son visibles en los planes de ejecución

• El código de la función se interpreta en cada llamada (cada fila)

• Por último y lo más importante de todo: NO ES POSIBLE EL PARALELISMO

De donde venimos….

Page 4: TSQL menos frecuente desde SQL Server 2005

CROSS / OUTER APPLY

• SQL Server 2000• Lo bueno permiten trabajar con conjuntos

• Vistas• El objetivo inicial de este objeto simplificación:

• Seguridad

• Complejidad del código

• Problemas:

• Anidamientos

• Falta de parametrización

• Si se quiere rendimiento vistas indexadas

De donde venimos….

Page 5: TSQL menos frecuente desde SQL Server 2005

CROSS / OUTER APPLY

• Ejemplo Real Vistas Anidadas• 67% Escrituras

• 52% Lecturas

De donde venimos….

Page 6: TSQL menos frecuente desde SQL Server 2005

CROSS / OUTER APPLY

• SQL Server >=2005• Funciones Tipo Tabla

• InLine

• Multiline

• Evolución natural de funciones escalares y vistas

• Ventajas:

• Parametrización

• Tratamiento a nivel de conjuntos

• Rendimiento

Donde llegamos….

Page 7: TSQL menos frecuente desde SQL Server 2005

CROSS / OUTER APPLY

• Cross / Outer Apply• Elemento que necesitamos para hacer joins con funciones tabla

• También aplicable con selects en lugar de funciones

• Cross Inner join

• Outer Left join

Cross / Outer Apply

Page 8: TSQL menos frecuente desde SQL Server 2005

Demo

CROSS / OUTER

Page 9: TSQL menos frecuente desde SQL Server 2005

GROUPING SETS

• Cláusulas que permiten realizar múltiples agregaciones en una única query con las columnas indicadas en la cláusula GROUP BY

• Dos especializaciones• CUBE• ROLLUP

• Posee funciones auxiliares para identificar grupos• Grouping_id

• Bitmap que produce un entero por cada agregación

• Grouping• Devuelve el valor 1 si no se esta agregando por la columna indicada NULL

¿Qué son los Grouping Sets?

Page 10: TSQL menos frecuente desde SQL Server 2005

Demo

Grouping Sets

Page 11: TSQL menos frecuente desde SQL Server 2005

GROUPING SETS

• ROLLUP(Categoría, Subcategoría, Producto) equivale a agregar por:• Categoría, Subcategoría, Producto

• Categoría, Subcategoría

• Categoría

• Todos

ROLLUP

Page 12: TSQL menos frecuente desde SQL Server 2005

GROUPING SETS

• CUBE(Categoría, Subcategoría, Producto) equivale a agregar por:• Categoría, Subcategoría, Producto• Categoría, Subcategoría• Categoría, Producto• Subcategoría, Producto• Categoría• Subcategoría• Producto• Todos

CUBE

Page 13: TSQL menos frecuente desde SQL Server 2005

Demo

Grouping Sets

Page 14: TSQL menos frecuente desde SQL Server 2005

Funciones de Windowing

• Son funciones que trabajan con los resultados de una consulta

• Pueden ser:• Ranking

• Offset

• Agregado

• Se apoyan en la clausula Over

• Pueden tener orden

• Se puede realizar particiones

• Se pueden utilizar frames

¿Qué son las Funciones de Windowing?

Page 15: TSQL menos frecuente desde SQL Server 2005

Funciones de Ranking

• Son funciones que nos permiten la clasificación de resultados• Row_Number(), añade un entero único desde 1 al último registro del

conjunto

• Rank(), registros menores + 1

• Dense_Rank(), valores distintos y menores + 1

• Ntile(Nº Grupos), Realiza tantos grupos de registros como se indique en el numero de grupos• Nº de registro por grupo = Nº de Registros / Nº de grupos

• Si resto no es 0 el nº de registros del ultimo grupo = resto

¿Qué son las Funciones de Ranking?

Page 16: TSQL menos frecuente desde SQL Server 2005

Demo

Funciones Ranking

Page 17: TSQL menos frecuente desde SQL Server 2005

Funciones de Offset

• Son funciones que nos devuelven un valor para un offset dado• LAG, devuelve un valor previo (scalar_expression [,offset] [,default])

OVER( [ partition_by_clause ] order_by_clause )• El offset no puede ser negativo

• LEAF, devuelve un valor posterior (scalar_expression [,offset] [,default]) OVER( [ partition_by_clause ] order_by_clause )• El offset no puede ser negativo

• FIRST_VALUE, devuelve del primer valor ( [scalar_expression ) OVER ( [ partition_by_clause ] order_by_clause rows_range_clause )

• LAST_VALUE, devuelve del último valor ( [scalar_expression ) OVER ( [ partition_by_clause ] order_by_clause rows_range_clause )

¿Qué son las Funciones de Offset?

Page 18: TSQL menos frecuente desde SQL Server 2005

Demo

Funciones Offset

Page 19: TSQL menos frecuente desde SQL Server 2005

Funciones de Agregado

• Son funciones que realizan una operación sobre un agregado• SUM(expression), suma los valores del rango OVER( [

partition_by_clause ] order_by_clause [Frame] )

• AVG(expression), media de los valores del rango OVER( [ partition_by_clause ] order_by_clause [Frame])

• MIN(expression), valor menor del rango OVER ( [ partition_by_clause ] order_by_clause rows_range_clause [Frame])

• MAX(expression), valor mayor del rango OVER ( [ partition_by_clause] order_by_clause rows_range_clause [Frame])

¿Qué son las Funciones de Agregado?

Page 20: TSQL menos frecuente desde SQL Server 2005

Funciones de Agregado

• Expresión que limita el rango de valores• ROWS, trabaja con valores físicos cada registro es distinto

• RANGE, trabaja con valores lógicos, puede agrupar varios

• Son expresiones del ANSI SQL pero no todo está implementado

¿Qué son los Frames?

ROWS\RANGE BETWEEN UNBOUNDED

PRECEDING |

<n> PRECEDING |

<n> FOLLOWING |

CURRENT ROW

AND

UNBOUNDED FOLLOWING |

<n> PRECEDING |

<n> FOLLOWING |

CURRENT ROW

RANGE BETWEEN INTERVAL '2' MONTH

PRECEDING AND CURRENT ROW

Page 21: TSQL menos frecuente desde SQL Server 2005

Funciones de Agregado

• Agregados Acumulativos

• Agregados Deslizantes en el Futuro

• Porcentajes

¿Para que sirven los Frames?

Page 22: TSQL menos frecuente desde SQL Server 2005

Demo

Funciones Agregado

Page 23: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• Nuevo tipo de tabla para:• Mantener historia completa de los cambios

• Permitir de una manera fácil su análisis en el tiempo

• La solución consta de:• Cada registro tiene un rango temporal de validez

• El rango validez es gestionado por el sistema

• Consta de 2 columnas llamadas columnas de periodo de tipo datetime2

• Requiere PK

• No usa triggers

• Una tabla adicional con el mismo esquema para almacenar las versiones antiguas• A esta tabla se denomina tabla histórica

• Se la proporcionamos nosotros o la crea SQL Server

¿Qué son?

Page 24: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• ¿Para que sirven?• Auditar todos los cambios

• Reconstrucción del estado de los datos en cualquier momento del pasado

• Calculo de tendencias en el tiempo

• Mantenimiento columnas Slowly Changing Dimension para BI

• Recuperar datos en caso errores por procesos

¿Qué son? / ¿Para qué sirven?

Page 25: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• TSQL CREATE TABLE• GENERATED ALWAYS AS ROW { START | END } [ HIDDEN ] [ NOT NULL ]

• HIDDEN Aparecerán ocultos en la select

• No permiten nulos aunque en la clausula sea opcional si no se cita los pone no nulos

• Los campos de vigencia no pueden ser utilizados en (insert, update, merge, delete)

• SYSTEM_VERSIONING = ON [ ( HISTORY_TABLE = schema_name . history_table_name [, DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ]

• La tabla principal y la historica no se pueden borrar sino se quita la vinculación entre ellas

Creación

Page 26: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• TSQL CREATE TABLE• Los nombres, numero y tipos de columna son iguales en ambas tablas• No se pasan a la tabla histórica:

• Estadísticas• Checks• Triggers• Configuración Particionamiento• Permisos• Row-level security predicates

• No hay restricciones de tabla (Pk,Fk) o columna en la tabla historica pero se permite valor por defecto para las columnas

• La tabla actual tiene PK y la historica NO, pero crea un índice cluster• No hay columnas identities en la tabla histórica• No se permiten trigger en la tabla histórica• No se permiten FK’s en la tabla histórica• La tabla histórica no puede estar en un filegroup de solo lectura• La tabla histórica no puede estar configurada para CDC o CT

Creación

Page 27: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• Por defecto las tablas histórica tienen compresión de página

• Las tablas actuales pueden tener tipos (MAX) pero puede incrementar mucho el tamaño

• No estan permitidas operaciones ONLINE (reconstrucción de índices)

• No se puede modificar/borrar los datos de la tabla histórica

• En la tabla actual no se permiten en los triggers:• INSTEAD OF

• ON DELETE CASCADE/ON UPDATE CASCADE

Consideraciones ( I )

Page 28: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• Compatibilidad• AO Full

• Replicacion:• Snapshot y Transaccional, debe montarse en el suscriptor y cuando le lleguen

cambios versionará esa información

• Merge, no soportada

• Indexación, MS aconseja:• Indice cluster columnstore / B-tree en la tabla actual

• Indice cluster columnstore en tabla histórica

Consideraciones ( II )

Page 29: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016Creación

Page 30: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• Se puede hacer en la tabla histórica o en la tabla principal

• Para la tabla principal se han añadido nuevas cláusulas TSQL• FOR SYSTEM_TIME obligatoria para poder utilizar las siguientes

• AS OF <fx> Start <= fx and End > fx

Consultando Cambios

Page 31: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• FROM <fxini> TO <fxfin> Start < fxfin AND End > fxini

Consultando Cambios

Page 32: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• BETWEEN <fxini> AND <fxfin> Start <= fxfin AND End >= fxini• Como el caso anterior pero los límites están incorporados

Consultando Cambios

Page 33: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• Contained IN (<fxini>,<fxfin>) Start >= fxini AND End <= fxfin

Consultando Cambios

Page 34: TSQL menos frecuente desde SQL Server 2005

Tablas Temporales SQL Server 2016

• ALL

Consultando Cambios

Page 35: TSQL menos frecuente desde SQL Server 2005

También puedes preguntar tus dudas con el

hashtag #SQSummit en Twitter

ADAPTIVE BI FRAMEWORK

Te ayudaremos a mejorar la velocidad de desarrollo de tu plataforma de analítica de negocio basada en nuestra experiencia:

•Diseña antes de construir

•Automatización de procesos por ETL

•Servicios de mentoring para ayudarte a conseguir mejores prácticas para la construcción de procesos específicos y plataformas de analítica de negocio

•Muy fácil de mantener

SOLIDQ FLEX SERVICES

Con SolidQ Flex Services evitarás sustos, consiguiendo que tus sistemas sean estables. Desde una solución sencilla de monitorización, hasta un servicio de atención de incidencias 24/7, mantenimiento proactivo, resolución de problemas y línea de soporte.

Todo con un coste fijo mensual… y tú dedica el tiempo a las cosas importantes.