HASH-MERGE vs Lookups.

Documentos relacionados
Ejecutando SAS desde EXCEL:

ÍNDICE. Introducción... Capítulo 1. Características, instalación, inicio y entorno de trabajo... 1

DataBase Administration

Planes de ejecución en SQL Server 2014

Procesamiento y Optimización de consultas Material Preliminar en preparación

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

Los bloques DLL (Figura A.1) externos permiten al usuario escribir su propio código y

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

Administración de usuarios en Oracle - Administración de Oracle - Orasite.com

Ejemplo de gestión de datos con SQL

Está por comenzar: Como leer planes de ejecución. 2 de Diciembre 2015 (8 am GMT -5) Enrique Catala

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

ÍNDICE PRIMERA PARTE... 17

Cursores Explícitos. Copyright Oracle Corporation, All rights reserved.

Técnicas CA Plex Para Mejorar Rendimiento en MS SQL. 11E Eric Giron SODISA - Honduras

Arrays dinámicos y arrays estáticos con Visual Basic y.net. Redim, Redim Preserve, Erase. Ejemplos (CU00342A)

Oracle Database: Programación con PL/SQL

DB2 for z/os Administración de Base de Datos

Algoritmos y Estructuras de Datos II

9- Procedimientos almacenados.

Algoritmos y Estructuras de Datos II

Procedimientos almacenados en PL/SQL. Jonathan Medina Gómez Facultad de Ingeniería Universidad de Antioquia

CESVA USB DRIVER. M_CUD_v0001_ _ESP_ENG

Administración de Oracle 9i. Existen alrededor de 126 privilegios del sistema, a continuación vemos los más destacados

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

DISTRIBUCION NORMAL ESTANDAR

Sesión 3: PL 2b: Sistema para la adquisición de señales analógicas.

En el presente tip definimos el procedimiento para crear esas variables y su manejo posterior. DATA: v_data_ref TYPE REF TO data.

El usuario puede utilizar esta tabla derivada como una tabla más, en sus consultas.

EXAMEN PARCIAL TRABAJO INTEGRADOR (TI) EVALUACIÓN CONTINUA PESO PORCENTUAL PESO PORCENTUAL 1 30% 06-MAY-14 30% 03-MAY-14 20% 20%

Aplicaciones VBA con Excel

LENGUAJE SQL. En Mysql se utiliza un subconjunto de SQL (update, insert into, delete, select, truncate,etc).

Álvaro Herrera Modelamiento Avanzado de Datos con PostgreSQL

SQL SERVER SQL Server 2005 permite tres tipos de operaciones con conjuntos: UNION, disponible en todas las versiones de SQL Server.


Herramientas para la optimización

m046a Curso Consultando SQL Server 2005/2008 con Transact-SQL, 15 h

MSSQL 2014 Respaldo de Datos Predecible eficiente y flexible

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

Diplomado Arquitectura de datos con el producto Embarcadero ER/Studio

Máxima Performance Postgresql. Disertante: Emanuel Calvo Franco. Año: 2009

GUIA DE PROCEDIMIENTOS Y FUNCIONES ALMACENADOS EN MYSQL

INSTITUTO MATEMÁTICO Y ACTUARIAL MEXICANO PROGRAMACIÓN CON SAS

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

Oracle Database: Introducción a SQL

Base de Datos Conjunto de información organizada especialmente para búsqueda y entrada de datos. Base de Datos: Ejemplo Usuarios

Escritura Básica de Sentencias SQL. Copyright Oracle Corporation, All rights reserved.

o SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.

Estadísticas Elemental Tema 3: Describir la relación entre dos variables: Correlación y regresión 3.1-1

TELEVISOR A COLORES MANUAL DE SERVICIO MODELO : CP-29C40P. ATENCIÓN Antes de dar servicio al chasis, lea las PRECAUCIONES DE SEGURIDAD en este manual.

Motores de Base de Datos Libres: Postgresql y MySql. Ing. Ricardo Naranjo Faccini, M.Sc

PRÁCTICA III. DISPARADORES EN SQL (II)

INSTRUMENTACIÓN N AVANZADA. ARRAYS EN LABVIEW Relacionando Datos Arrays y Clusters

Consultas con combinaciones

UNIVERSIDAD NACIONAL DE SAN AGUSTÍN FACULTAD DE PRODUCCIÓN Y SERVICIOS ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS LABORATORIO DE BASES DE DATOS 1

Funciones y TriggersIntroducción, Ejemplos

INDICE Parte 1. Visual Basic Capitulo 1. Qué es Visual Basic? Capitulo 22. Mi Primera Aplicación Capitulo 3. Elementos del lenguaje

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

INTRODUCCIÓN A STATA

SERVICIO NACIONAL DE APRENDIZAJE SENA

Oracle PL/SQL. Programa de Estudio.

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

LENGUAJE ESTRUCTURADO DE CONSULTAS SQL (2)

Bases de Datos 2. Teórico

Formato para prácticas de laboratorio

UNIVERSIDAD AUTONOMA DE LOS ANDES UNIANDES LENGUAJE SQL. SQL es un estándar un lenguaje estructurado para consultas

Cursores, Triggers, Indices, Transacciones, Vistas Gestión y Modelación de Datos

Manual para Cambio de Apariencia en Acrobat Reader DC. Change of Appearance in Acrobat Reader DC

Tema 2: Desarrollo de Algoritmos. E.E. de Algorítmica

RESTRICCIONES DE DOMINIOS

Recuperación del Sistema

Manual de turbo pascal

Temario. Índices simples Árboles B Hashing

Grandes volúmenes de datos Particionamiento. bases de datos

Manual de Instalación de la Solución B-EYE-Builder. Pasos para la configuración del sistema

Examen de Ficheros y bases de datos ( ) Convocatoria de febrero I PARCIAL

Base de datos Procedimientos Almacenados y Funciones

Base de Datos SQL Server

SECUENCIA DIDÁCTICA. Nombre de curso: Programación Avanzada de Base de Datos Clave de curso: COM0803A21. Módulo Competencia de Módulo:

Transparent Data Encryption Oracleyyo.com

FUNDAMENTOS DE INFORMÁTICA

Guía de ejercicios de SQL Prof. Mauricio E. Fernández N. Semestre Agosto-Diciembre de 2012

Tema 1. Bases de datos activas

ÍNDICE INTRODUCCIÓN...17

6. Vectores Fundamentos de Informática

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Tips para optimizar nuestros ETL con SSIS

APLICACIÓN COMPRAS EN SQLSERVER 2000

BASES DE DATOS EN VISUAL BASIC ACCESS + SQL

Aplicaciones de Macros en Excel y Visual Basic. web

Unidad III. Bases de Datos

Concepto de vista. (con ciertas limitaciones). nivel físico) Una vista es una tabla virtual (no tiene una correspondencia a

ANÁLISIS DE REGRESIÓN. Caso 1. Pegado de bases para un conjunto de datos rectangulares de igual tamaño

Transcripción:

HASH-MERGE vs Lookups. Octubre 12, 2011 Moisés Ramírez Flores Sr. Statistical Programmer Pharmanet/i3

Agenda Introducción Hash Step. Como realizar un hash merge Preguntas

Introducción Como programadores SAS constantemente necesitamos realizar varios cruces de dos o mas tablas usando una tabla asociada crosswalk o Table-lookup lo que se conoce como many-to-many join. Muchas veces usando un PROC SQL o el tradicional merge-sortmerge method, el cual es considerablemente más lento. Existen otras técnicas que pueden ofrecernos ventajas en conveniencia y rendimiento. Desde el lanzamiento de SAS 9 dos tipos de objetos están disponibles para su uso en el Data Step: Has-Tables y Hash iterator

HAS-TABLES No es un concepto nuevo. C++, Microsoft.NET y lenguajes como C# y VB lo utilizan. Aunque es un concepto desconocido en SAS. Una función hash, es cualquier algoritmo o rutina que realice un mapeo entre un gran conjunto de datos y un pequeño conjunto llamado Table_lookup. Hoy en día cualquier método basado en técnicas de dirección dirigida son referidos como hashing. El concepto en SAS esta basado en arreglo temporal en memoria que funciona como un table-lookup.

Dirección dirigida

Dirección dirigida (arreglo llave) Element 1 2 3 4 5 6 7 8 9 Value a b C d e f g h I

Entendiendo el Hash Data Step Ejemplo: Tenemos los siguientes conjuntos

Hash Data Step

Sql-Merge: Proc sql ; Quit ; Create view PapersAndTheirAuthors as select * from Paper natural right join ( select * from PaperAuthor natural left join Author ) ; Con un natural join in Proc sql.

SORT, SORT, MERGE, RESORT, SORT, AND THEN MERGE AGAIN: Proc sort data=paper ; By PaperKey ; Run ; Proc sort data=paperauthor ; By PaperKey ; Run ; Data PaperWithAuthorKey ; Merge Paper PaperAuthor( in=inpaperauthor ); By PaperKey ; If inpaperauthor ; Run ; Proc sort data=paperwithauthorkey ; By AuthorKey ; Run ; Proc sort data=author ; By AuthorKey ; Run ; Data PapersAndTheirAuthors ; Merge PaperWithAuthorKey( in=inpaperwithauthorkey ) Author ; By AuthorKey ; If inpaperwithauthorkey ; Run ;

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; 1 If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; 1 Declare hash p( dataset:'randompaper', hashexp:16 ) ; Primero especificamos las propiedades de las variables presentes p.definekey('paperkey') en ambas ; tablas (Length, label, etc.) para no tener que p.definedata( codificarlas all:'yes' a mano. ) ; p.definedone() ; Declare hash a( dataset:'randomauthor', hashexp:16 ) ; a.definekey('authorkey') ; a.definedata( all:'yes' ) ; a.definedone() ; End ; If not p.find() ; If not a.find() ; Run ; Las Tablas están en orden aleatorio

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; 2 Declare hash p( dataset:'randompaper', hashexp:16 ) ; End ; p.definekey('paperkey') ; Después declaramos nuestra hash table utilizando el enunciado p.definedata( Declare all:'yes' ) seguido ; de la palabra hash. p.definedone() ; Entre paréntesis deben de existir dos argumentos, Declare hash a( dataset:'randomauthor', hashexp:16 ) ; Dataset. a.definekey('authorkey') El nombre del ; conjunto del que obtendremos la información. a.definedata( all:'yes' ) ; a.definedone() ; HashExp. Que especifica el tamaño de la tabla interna del objeto hash el cual es 2 elevado a la n y el máximo permitido es 16. If not p.find() ; If not a.find() ; Run ; Las Tablas están en orden aleatorio 2

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; Declare hash p( dataset:'randompaper', hashexp:16 ) ; 3 p.definekey('paperkey') ; 3 p.definedata( all:'yes' ) ; Utilizamos el enunciado definekey para declarar nuestras variables p.definedone() llave, ; si son más de una la podemos declarar simplemente Declare hash a( separándolas dataset:'randomauthor' por una, hashexp:16 coma. ) ; a.definekey('authorkey') ; a.definedata( all:'yes' ) ; a.definedone() ; End ; If not p.find() ; If not a.find() ; Run ; Las Tablas están en orden aleatorio

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; Declare hash p( dataset:'randompaper', hashexp:16 ) ; p.definekey('paperkey') ; 4 p.definedata( all:'yes' ) ; 4 p.definedone() ; Con el enunciado definedata declaramos que variables iran a nuestro Declare hash cruce a( de dataset:'randomauthor' tablas, otra vez si, son hashexp:16 más de ) ; una la podemos a.definekey('authorkey') declarar simplemente ; separándolas por una coma. a.definedata( all:'yes' ) ; a.definedone() ; End ; If not p.find() ; If not a.find() ; Run ; Las Tablas están en orden aleatorio

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; Declare hash p( dataset:'randompaper', hashexp:16 ) ; p.definekey('paperkey') ; p.definedata( all:'yes' ) ; 5 p.definedone() ; 5 Declare hash a( dataset:'randomauthor', hashexp:16 ) ; Una vez que las propiedades han sido definidas cerramos la misma a.definekey('authorkey') con el enunciado ; definedone. a.definedata( all:'yes' ) ; a.definedone() ; End ; If not p.find() ; If not a.find() ; Run ; Las Tablas están en orden aleatorio

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; Declare hash p( dataset:'randompaper', hashexp:16 ) ; p.definekey('paperkey') ; p.definedata( all:'yes' ) ; p.definedone() ; Declare hash a( dataset:'randomauthor', hashexp:16 ) ; a.definekey('authorkey') ; a.definedata( all:'yes' ) ; 5 a.definedone() ; 5 End ; Run ; If not p.find() ; Repetimos estos mismos pasos para la otra tabla. If not a.find() ; Las Tablas están en orden aleatorio

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; Declare hash p( dataset:'randompaper', hashexp:16 ) ; p.definekey('paperkey') ; p.definedata( all:'yes' ) ; p.definedone() ; Declare hash a( dataset:'randomauthor', hashexp:16 ) ; a.definekey('authorkey') ; a usar el a.definedata( in= dataset all:'yes' option ) ; para quedarte únicamente con las El If not p.find() and If not a.find() statements son equivalentes observaciones a.definedone() que contribuyen ; a ambos datasets como en el método tradicional de sort-sort-merge-sort-sort-merge. End ; 6 If not p.find() ; If not a.find() ; 6 Run ; Las Tablas están en orden aleatorio

Hash Data Step Data PapersAndTheirAuthors / view=papersandtheirauthors ; Set RandomPaperAuthor ; 1 If ( _N_ eq 1 ) then do ; If 0 then set RandomPaper RandomAuthor ; 1 Declare hash p( dataset:'randompaper', hashexp:16 ) ; p.definekey('paperkey') ; 3 p.definedata( all:'yes' ) ; 4 p.definedone() ; 5 Declare hash a( dataset:'randomauthor', hashexp:16 ) ; a.definekey('authorkey') ; a.definedata( all:'yes' ) ; a.definedone() ; 2 End ; If not p.find() ; If not a.find() ; 6 Run ; Las Tablas están en orden aleatorio

Mi propio ejemplo

Performance

Performance

Paper 107-2008 %HASHMERGE A Macro to Hash When It Can, Merge When It Can t Gregg P. Snell, Data Savant Consulting, Shawnee, KS 1. IS THERE ENOUGH MEMORY TO HASH?. 2. PRODUCE MATCH-MERGE CODE. 3. PRODUCE HASH-MERGE CODE. 4. CREATE THE MACRO TO LOOK LIKE STANDARD MATCH-MERGE CODE

Tabla de Pros y Contras Método Pros Contras SET con KEY= Bajo costo de memoria Crear índices Lento acceso I/O Merge con BY Proc SQL Bajo costo de memoria Rápido acceso a varios data sets por medio del input Rápido acceso y cruce on the air de varias tablas Uso común en otros lenguajes. Los datos de entrada deben de estar ordenados y preferentemente con un index asociado. No tienes las ventajas de un input stament para la lectura de diferentes tipos de datos Funciones estadísticas limitadas

Tabla de Pros y Contras Método Pros Contras Hash Objects Rápido cruce de observaciones que contienen una llave en particular. La llave puede estar compuesta de multuples valores de tipo carácter o numerico. Todas las ventajas de un data step. Las observaciones se guardan en memoria. Usar un arreglo temporal es mas rapido que usar el arreglo del hash object. El arreglo del hash object utiliza mas memoria que uno equivalente normal. No hay necesidad de sortear o indexar los datos.

Conclusión El método de Hash-merge es una herramienta adicional que SAS nos proporciona, la cual bajo ciertas circunstancias nos permite realizar mejor y de manera mas eficiente nuestros cruces de tablas.

Preguntas

Gracias Moisés Ramírez Flores Sr. Statistical Programmer Pharmanet/i3 Copyright 2011, SAS Copyright Institute Inc. 2011, All SAS rights Institute reserved. Inc. All rights reserved.