hadoop hive data-warehouse dimensional-modeling fact

hadoop - Generando esquema de estrella en colmena



hive data-warehouse (1)

Soy del mundo de SQL Datawarehouse donde, desde una fuente plana, genero tablas de dimensión y de hechos. En los proyectos de almacenamiento de datos generales, dividimos el feed en hechos y dimensiones. Ex:

Soy completamente nuevo en Hadoop y llegué a saber que puedo construir data warehouse en colmena. Ahora, estoy familiarizado con el uso de guid, que creo que es aplicable como clave principal en la colmena. Entonces, ¿la estrategia a continuación es la forma correcta de cargar hechos y dimensiones en la colmena?

  1. Cargar datos de origen en una tabla de colmena; digamos Sales_Data_Warehouse
  2. Generar dimensión desde sales_data_warehouse; ex:

    SELECCIONE New_Guid (), Customer_Name, Customer_Address From Sales_Data_Warehouse

  3. Cuando se hayan completado todas las dimensiones, cargue la tabla de hechos como

    SELECT New_Guid () AS ''Fact_Key'', Customer.Customer_Key, Store.Store_Key ... FROM Sales_Data_Warehouse AS ''fuente'' JOIN Customer_Dimension Cliente en source.Customer_Name = Cliente.Nombre_del_cliente Y source.Customer_Address = Customer.Customer_Address JOIN Store_Dimension AS ''Store'' ON Store.Store_Name = Source.Store_Name JOIN Product_Dimension AS ''Producto'' ON .....

¿Es esta la manera en que debería cargar mi tabla de hechos y dimensiones en la colmena?

Además, en los proyectos generales de almacén, necesitamos actualizar los atributos de dimensiones (por ejemplo: Customer_Address se cambia a otra cosa) o tener que actualizar la clave externa de la tabla de hechos (raramente, pero sucede). Entonces, ¿cómo puedo tener una carga INSERT-UPDATE en la colmena? (Al igual que hacemos la búsqueda en SSIS o MERGE Statement en TSQL)?


Todavía obtenemos los beneficios de los modelos dimensionales en Hadoop y Hive. Sin embargo, algunas características de Hadoop requieren que adoptemos ligeramente el enfoque estándar para el modelado dimensional.

El sistema de archivos Hadoop es inmutable. Solo podemos agregar pero no actualizar datos. Como resultado, solo podemos anexar registros a tablas de dimensiones (mientras que Hive ha agregado una característica de actualización y transacciones, esto parece tener errores). Cambiar lentamente las dimensiones en Hadoop se convierte en el comportamiento predeterminado. Para obtener el registro más reciente y actualizado en una tabla de dimensiones, tenemos tres opciones. Primero, podemos crear una vista que recupere el último registro usando funciones de ventana. En segundo lugar, podemos tener un servicio de compactación ejecutándose en segundo plano que recrea el último estado. En tercer lugar, podemos almacenar nuestras tablas de dimensiones en almacenamiento mutable, por ejemplo, HBase y federar consultas en los dos tipos de almacenamiento.

La forma en que se distribuyen los datos en HDFS hace que sea costoso unir datos. En una base de datos relacional distribuida (MPP) podemos coubicar registros con las mismas claves primarias y externas en el mismo nodo en un clúster. Esto hace que sea relativamente barato juntar tablas muy grandes. No es necesario que los datos viajen a través de la red para realizar la unión. Esto es muy diferente en Hadoop y HDFS. En HDFS, las tablas se dividen en grandes fragmentos y se distribuyen entre los nodos de nuestro clúster. No tenemos ningún control sobre cómo se distribuyen los registros individuales y sus claves en el clúster. Como resultado, las uniones en Hadoop para dos mesas muy grandes son bastante caras ya que los datos tienen que viajar a través de la red. Deberíamos evitar las uniones siempre que sea posible. Para una gran tabla de hechos y dimensiones, podemos desnormalizar la tabla de dimensiones directamente en la tabla de hechos. Para dos tablas de transacciones muy grandes, podemos anidar los registros de la tabla secundaria dentro de la tabla primaria y aplanar los datos en tiempo de ejecución. Podemos usar extensiones SQL como array_agg en BigQuery / Postgres, etc. para manejar granos múltiples en una tabla de hechos

También cuestionaría la utilidad de las claves sustitutivas. ¿Por qué no usar la llave natural? Tal vez el rendimiento de las claves compuestas complejas puede ser un problema, pero las claves sustitutas no son realmente útiles y nunca las utilizo.