csv - una - SSIS: reutiliza la fuente Ole DB al hacer coincidir el hecho con la tabla de búsqueda dos veces
importar datos de excel a oracle 11g (2)
Soy bastante nuevo en SSIS
y BI en general, así que ante todo lo siento si se trata de una pregunta para novatos.
Tengo mis datos de origen para la tabla de hechos en una csv, por lo que quiero hacer coincidir los identificadores con las claves sustitutas en las tablas de búsqueda.
La estructura de datos en el csv es así
... userId, OriginStationId, DestinyStationId,..
Lo que intento lograr es hacer coincidir los datos con mi tabla de búsqueda. Entonces, lo que estoy haciendo es
- Lectura de datos de búsqueda utilizando OLE DB Source
- Leyendo mi archivo csv
- Ordenando ambas entradas por el mismo campo
- Haciendo un left join por Id, para obtener el SK
De esta forma, si no hay coincidencia (es decir, no puede encontrar la clave sustituta), puedo redirigirla a una csv rechazada y manejarla más adelante.
algo como esto:
(perdón por el español!)
Estoy haciendo esto para cada dimensión, por lo que puedo manejar cada uno con diferentes códigos de error.
Como OriginStationId
y DestinyStationId
son dos valores de la misma dimensión (ambos coinciden con la misma tabla de búsqueda), quería saber si hay una forma de evitar leer dos veces los datos de la tabla (es decir, no utilizar dos ole db fuentes para leer dos veces los datos de la misma tabla).
Traté de agregar una segunda salida al género, pero no estoy autorizado. Lo mismo ocurre con agregar otra salida de OLE DB Source
.
Veo que hay una "opción de caché", ¿es la mejor manera de hacerlo? (Aunque implicaría crear de todos modos otra OLE DB source
... ¿verdad?)
La tercera opción que pensé fue unirme por los dos campos, pero dado que solo hay un campo en la tabla de búsqueda (el mismo campo), recibo un error cuando trato de asignar ambas columnas de mi csv contra la misma columna en mi Tabla de búsqueda
Faltan columnas con el orden de clasificación 2 a 2
¿Cuál es la mejor manera de hacerlo? ¿O estoy pensando algo incorrectamente? Si algo no estaba claro, hágamelo saber y actualizaré mi pregunta
Cada vez que desee tener múltiples salidas de un componente que solo permite una, todo lo que tiene que hacer es seguir ese componente con el componente Multidifusión, cuyo único propósito es dividir un flujo de flujo de datos en múltiples salidas.
Gonzalo
Acabo de utilizar este artículo sobre cómo derivar columnas para la construcción de un depósito de datos: - Cómo rellenar una tabla de hechos utilizando SSIS (parte 1) .
Usando esto construí un paquete simple que lee un archivo CSV con dos columnas que se usan para derivar valores separados de la misma tabla de códigos. CodeTable tiene dos campos Id y Descripción.
El flujo de datos tiene dos tareas de "búsqueda". El primero se une al atributo Lookup1 contra la Descripción para derivar su Id. El segundo se une al atributo Lookup2 contra la Descripción para derivar un Id diferente.
Aquí está el flujo de datos: -
Tenga en cuenta que se requiere la "Conversión de datos" para convertir los atributos de cadena del archivo CSV en "Cadena Unicode [DT_WSTR]" para que puedan unirse al atributo de descripción nvarchar (50) en la tabla.
Aquí está la conversión de datos: -
Aquí está la primera Búsqueda (la segunda se une a "Copia de Lookup2" a la Descripción): -
Aquí está la salida del Visor de datos con los dos Ids derivados, CodeTableFirstId y CodeTableSecondId: -
Espero comprender su problema y esto es útil para usted.
Saludos John