pregunta de BI

11/04/2007 - 14:22 por Jiordie | Informe spam
Hola a todos,

Estoy haciendo mi primera bodega de datos, y tengo una pregunta con respecto
a las dimensiones.

Estoy pensando en que cada dimensión se actualizaría de la siguiente forma:
coloco un trigger en la tabla origen, (la del motor relacional) que me
inserte en una tabla temporal los id que fueron actualizados, eliminados o
insertados, y de esta forma creo un DTS que coja de esa tabla temporal esos
Id y los coloque en la dimensión.

Esto es optimo?, hay mejores formas de hacerlo? qué debo hacer?

Muchas gracias, espero haberme explicado bien

Preguntas similare

Leer las respuestas

#1 Maxi
11/04/2007 - 16:00 | Informe spam
Hola, dependera del volumen, pero quizas las dimensiones te conviene en el
ETL borrar data y volverlas a cargar todas


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Jiordie" escribió en el mensaje
news:%23Fp%
Hola a todos,

Estoy haciendo mi primera bodega de datos, y tengo una pregunta con
respecto a las dimensiones.

Estoy pensando en que cada dimensión se actualizaría de la siguiente
forma: coloco un trigger en la tabla origen, (la del motor relacional) que
me inserte en una tabla temporal los id que fueron actualizados,
eliminados o insertados, y de esta forma creo un DTS que coja de esa tabla
temporal esos Id y los coloque en la dimensión.

Esto es optimo?, hay mejores formas de hacerlo? qué debo hacer?

Muchas gracias, espero haberme explicado bien

Respuesta Responder a este mensaje
#2 Jiordie
11/04/2007 - 17:06 | Informe spam
Gracias por tu respuesta,

lo que pasa es que tengo una dimension que es grande y crece siempre, no se
puede tomar como tabla de hechos por que son las ordenes de produccion,
entonces en ese caso si sería mejor hacerlo como yo lo pienso o hay otra
forma?

igual pasaría con la dimension de cliente o no?



"Maxi" escribió en el mensaje
news:
Hola, dependera del volumen, pero quizas las dimensiones te conviene en el
ETL borrar data y volverlas a cargar todas


Salu2

Microsoft MVP SQL Server
Culminis Speaker

"Jiordie" escribió en el mensaje
news:%23Fp%
Hola a todos,

Estoy haciendo mi primera bodega de datos, y tengo una pregunta con
respecto a las dimensiones.

Estoy pensando en que cada dimensión se actualizaría de la siguiente
forma: coloco un trigger en la tabla origen, (la del motor relacional)
que me inserte en una tabla temporal los id que fueron actualizados,
eliminados o insertados, y de esta forma creo un DTS que coja de esa
tabla temporal esos Id y los coloque en la dimensión.

Esto es optimo?, hay mejores formas de hacerlo? qué debo hacer?

Muchas gracias, espero haberme explicado bien





Respuesta Responder a este mensaje
#3 Javier Loria
11/04/2007 - 17:13 | Informe spam
Hola:
Es una alternativa pero para mi gusto no es la mejor. Otras que puedes
considerar:
1) Agregar una columna a cada tabla con la fecha de modificacion. Hacer un
default que tenga un GETDATE(), y un trigger de fije el valor de la columna
tambien a GETDATE(). Si la tabla es de tamaño de por lo menos 10,000 filas,
y se modifican relativamente poco, vale la pena evaluar la necesidad de
crear un indice no-clustereded. En el ETL hacer un WHERE para la las filas
con Fecha cambiada. La ventaja es que la columna puede tambien ser usada
como mecanismo de auditoria.
2) Agregar a las tablas una columna timestamp. La columna timestamp, no
tiene nada que ver con el tiempo y es solamente un consecutivo hexadecimal
de las filas cambiadas en una base de datos. La ventaja es que no requiere
triggers. El siguiente ejemplo puede ayudarte:
CREATE TABLE Demo (
PKDemo INT PRIMARY KEY
, Col1 INT NOT NULL
, timestamp);

INSERT Demo(PKDemo, Col1)
VALUES(1,1)
INSERT Demo(PKDemo, Col1)
VALUES(2,1)
SELECT * FROM Demo
UPDATE Demo
SET Col1=2
WHERE PKDemo=1
SELECT * FROM Demo
Igualmente si la tabla tiene muchas filas y se modifican poco puedes
considerar crear un indice clustered. En el ETL se captura hace una
modificacion en una tabla de control, para tomar el ultimo valor y se hacen
filtros por rango de todos los cambios ocurridos.
Este es mi metodo favorito.
3) Si no puedes cambiar el esquema original de los datos. Lo tradicional
es leer y comparar los valores de cada una de las columnas entre la fuente y
el destino o eventualmente usando un hash para hacer la comparación.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
"Jiordie" wrote in message
news:%23Fp%
Hola a todos,

Estoy haciendo mi primera bodega de datos, y tengo una pregunta con
respecto a las dimensiones.

Estoy pensando en que cada dimensión se actualizaría de la siguiente
forma: coloco un trigger en la tabla origen, (la del motor relacional) que
me inserte en una tabla temporal los id que fueron actualizados,
eliminados o insertados, y de esta forma creo un DTS que coja de esa tabla
temporal esos Id y los coloque en la dimensión.

Esto es optimo?, hay mejores formas de hacerlo? qué debo hacer?

Muchas gracias, espero haberme explicado bien

Respuesta Responder a este mensaje
#4 Alejandro Mesa
11/04/2007 - 17:36 | Informe spam
Javier Loria,

Ya terminastes el libro o estas cojiendo un break y por eso te veo mas a
menudo por aca?

Saludos,

Alejandro Mesa


"Javier Loria" wrote:

Hola:
Es una alternativa pero para mi gusto no es la mejor. Otras que puedes
considerar:
1) Agregar una columna a cada tabla con la fecha de modificacion. Hacer un
default que tenga un GETDATE(), y un trigger de fije el valor de la columna
tambien a GETDATE(). Si la tabla es de tamao de por lo menos 10,000 filas,
y se modifican relativamente poco, vale la pena evaluar la necesidad de
crear un indice no-clustereded. En el ETL hacer un WHERE para la las filas
con Fecha cambiada. La ventaja es que la columna puede tambien ser usada
como mecanismo de auditoria.
2) Agregar a las tablas una columna timestamp. La columna timestamp, no
tiene nada que ver con el tiempo y es solamente un consecutivo hexadecimal
de las filas cambiadas en una base de datos. La ventaja es que no requiere
triggers. El siguiente ejemplo puede ayudarte:
> CREATE TABLE Demo (
PKDemo INT PRIMARY KEY
, Col1 INT NOT NULL
, timestamp);

INSERT Demo(PKDemo, Col1)
VALUES(1,1)
INSERT Demo(PKDemo, Col1)
VALUES(2,1)
SELECT * FROM Demo
UPDATE Demo
SET Col1=2
WHERE PKDemo=1
SELECT * FROM Demo
> Igualmente si la tabla tiene muchas filas y se modifican poco puedes
considerar crear un indice clustered. En el ETL se captura hace una
modificacion en una tabla de control, para tomar el ultimo valor y se hacen
filtros por rango de todos los cambios ocurridos.
Este es mi metodo favorito.
3) Si no puedes cambiar el esquema original de los datos. Lo tradicional
es leer y comparar los valores de cada una de las columnas entre la fuente y
el destino o eventualmente usando un hash para hacer la comparacin.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
"Jiordie" wrote in message
news:%23Fp%
> Hola a todos,
>
> Estoy haciendo mi primera bodega de datos, y tengo una pregunta con
> respecto a las dimensiones.
>
> Estoy pensando en que cada dimensin se actualizara de la siguiente
> forma: coloco un trigger en la tabla origen, (la del motor relacional) que
> me inserte en una tabla temporal los id que fueron actualizados,
> eliminados o insertados, y de esta forma creo un DTS que coja de esa tabla
> temporal esos Id y los coloque en la dimensin.
>
> Esto es optimo?, hay mejores formas de hacerlo? qu debo hacer?
>
> Muchas gracias, espero haberme explicado bien
>

Respuesta Responder a este mensaje
#5 Javier Loria
11/04/2007 - 19:15 | Informe spam
Hola:
Je, Je. Hoy a las tres de la mañana termine un capitulo!!!, y tengo algo
de tiempo libre ya que todavía no me han enviado las revisión de capitulo
anterior :)
Pero lo que vez es mas la intencion de volver a mis raices, leer
diariamiente el foro y ayudar en lo que pueda. Tambien estoy empezando con
los blogs: http://blogs.solidq.com/ES/jloria/default.aspx
Vamos a ser si no me quedo en intenciones, y me dura bastante.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.


"Alejandro Mesa" wrote in message
news:
Javier Loria,

Ya terminastes el libro o estas cojiendo un break y por eso te veo mas a
menudo por aca?

Saludos,

Alejandro Mesa


"Javier Loria" wrote:

Hola:
Es una alternativa pero para mi gusto no es la mejor. Otras que
puedes
considerar:
1) Agregar una columna a cada tabla con la fecha de modificacion. Hacer
un
default que tenga un GETDATE(), y un trigger de fije el valor de la
columna
tambien a GETDATE(). Si la tabla es de tamao de por lo menos 10,000
filas,
y se modifican relativamente poco, vale la pena evaluar la necesidad de
crear un indice no-clustereded. En el ETL hacer un WHERE para la las
filas
con Fecha cambiada. La ventaja es que la columna puede tambien ser usada
como mecanismo de auditoria.
2) Agregar a las tablas una columna timestamp. La columna timestamp, no
tiene nada que ver con el tiempo y es solamente un consecutivo
hexadecimal
de las filas cambiadas en una base de datos. La ventaja es que no
requiere
triggers. El siguiente ejemplo puede ayudarte:
>> CREATE TABLE Demo (
PKDemo INT PRIMARY KEY
, Col1 INT NOT NULL
, timestamp);

INSERT Demo(PKDemo, Col1)
VALUES(1,1)
INSERT Demo(PKDemo, Col1)
VALUES(2,1)
SELECT * FROM Demo
UPDATE Demo
SET Col1=2
WHERE PKDemo=1
SELECT * FROM Demo
>> Igualmente si la tabla tiene muchas filas y se modifican poco puedes
considerar crear un indice clustered. En el ETL se captura hace una
modificacion en una tabla de control, para tomar el ultimo valor y se
hacen
filtros por rango de todos los cambios ocurridos.
Este es mi metodo favorito.
3) Si no puedes cambiar el esquema original de los datos. Lo
tradicional
es leer y comparar los valores de cada una de las columnas entre la
fuente y
el destino o eventualmente usando un hash para hacer la comparacin.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
"Jiordie" wrote in message
news:%23Fp%
> Hola a todos,
>
> Estoy haciendo mi primera bodega de datos, y tengo una pregunta con
> respecto a las dimensiones.
>
> Estoy pensando en que cada dimensin se actualizara de la siguiente
> forma: coloco un trigger en la tabla origen, (la del motor relacional)
> que
> me inserte en una tabla temporal los id que fueron actualizados,
> eliminados o insertados, y de esta forma creo un DTS que coja de esa
> tabla
> temporal esos Id y los coloque en la dimensin.
>
> Esto es optimo?, hay mejores formas de hacerlo? qu debo hacer?
>
> Muchas gracias, espero haberme explicado bien
>

Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida