Skip to content

huemul_Columns

Developer Code from HuemulSolutions edited this page Aug 9, 2021 · 6 revisions

huemul_Columns

huemul_Columns permite definir columnas dentro de una tabla en BigData.

Inicialización

La clase se inicializa de la siguiente forma

import com.huemulsolutions.bigdata.common._
import com.huemulsolutions.bigdata.control._
import com.huemulsolutions.bigdata.tables._

//El nombre de la tabla es el nombre de la clase
class tbl_NombreTabla(huemulBigDataGov: huemul_BigDataGovernance, Control: huemul_Control) extends huemul_Table(huemulBigDataGov, Control) with Serializable {
  ...

  /**********   C O L U M N A S   ****************************************/
  val codigo = new huemul_Columns (IntegerType, true,"codigo del pais")
      .setIsPK("COD_ERROR")
    
  val nombre = new huemul_Columns (StringType, true, "nombre del pais") 
  nombre.setARCO_Data(false)  
  nombre.setSecurityLevel(huemulType_SecurityLevel.Public)

  val poblacion= new huemul_Columns (IntegerType, false,"cantidad de personas en un pais")
    
  this.ApplyTableDefinition()
}

class huemul_Columns(param_DataType: DataType , param_Required: Boolean , param_Description: String , param_UsedForCheckSum: Boolean = true)

  • param_DataType: DataType: Tipo de datos de la columna, los permitidos son estos
  • param_Required: Boolean: Establece la columna como obligatoria, en este caso al ejecutar los métodos de carga de datos serán requisito el mapeo.
  • param_Description: String: Descripción de la columna, importante ser explícitos en la definición.
  • param_UsedForCheckSum: Boolean: En todas las tablas se crea en forma automática una columna que contiene una clave hash única para versionar la fila. Si se especifica este parámetro con false, la columna no será considerada para calcular el hash de la fila.

Métodos para la configuración de la columna.

Estos métodos permiten configurar las columnas, en forma similar a como se haría en una tabla tradicional. Adicionalmente estos parámetros son almacenados en el modelo de Gobierno de Datos en PostgreSQL.

  • setIsPK(externalCode: String = null): huemul_Columns: Identifica la columna como parte de la clave primaria. Si hay varias columnas que componen la Primary Key, se debe agregar este método a dichas columnas. Al momento de ejecutar la carga de la tabla, se realiza la validación de PK
  val codigo = new huemul_Columns (IntegerType, true,"codigo del pais").setIsPK("COD_ERROR")
...
  • setIsUnique(externalCode: String = null): huemul_Columns: Identifica la columna como única, es decir, los valores para esta columna en la tabla no se pueden repetir. En el caso de tablas de tipo "Transaction", la validación de Unique se hace a nivel de partición. Al momento de ejecutar la carga de la tabla, se realiza la validación de Unique para cada columna. El parámetro externalCode indica código externo
  val nombre = new huemul_Columns (StringType, true, "nombre del pais").setIsUnique("COD_ERROR")
...

Este método reemplazará al método setIsUnique(value: Boolean), el cual será deprecado en la versión 3.0

  • setNullable(externalCode: String = null): huemul_Columns: Identifica la columna como posible de contener valores nulos. Por default al momento de crear una columna SetNullable está deshabilitado, es decir, la columna no puede contener nulos. Al momento de ejecutar la carga de la tabla, se realiza la validación de nulos para cada columna. Parámetro externalCode indica código externo del error
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais").setNullable("COD_ERROR")
...

setNullable no es considerado si la columna es PK. Este método reemplazará al método setNullable(value: Boolean), el cual será deprecado en la versión 3.0

  • setDefaultValue(value: String): Establece el valor por default de la columna, siempre y cuando la columna no sea especificada en el mapeo. Para datos de tipo StringType se debe especifiar "'de esta forma'" (con comilla simple dentro de la comilla doble). Al momento de ejecutar la carga de la tabla, se usa el valor por default en caso que la columna sea opcional, y no se especifique el mapeo. ESTE MÉTODO NO REEMPLAZA LOS VALORES NULL QUE PUEDA CONTENER UN CAMPO, PARA ELLO DEBE USAR LÓGICA DE NEGOCIO EN EL SQL DEL DATAFRAM
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais")
  poblacion.setDefaultValue("0")
...
  • setHBaseCatalogMapping(df: String, col: String = null): huemul_Columns, Desde versión 2.2. Permite configurar la familia y nombre de campo en la tabla de HBase.
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais").setHBaseCatalogMapping("familia_cliente","hbase_poblacion")
...

LOS SIGUIENTES MÉTODOS SERÁN DEPRECADOS EN LA VERSIÓN 3.0

  • setIsPK(value: Boolean).
  • setIsUnique(value: Boolean).
  • setNullable(value: Boolean).

Métodos para cambios en tablas maestras (SCD)

Estos métodos permiten administrar en forma automática los cambios que pueden sufrir los datos de catálogos maestros.

  • setMDM_EnableOldValue(value: Boolean): En caso de modificación de datos, se guarda en forma automática el valor anterior de la columna en una nueva columna, llamada nombre_columna_old.
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais")
  poblacion.setMDM_EnableOldValue(true)
...
  • setMDM_EnableDTLog(value: Boolean): En caso de modificación de datos, se guarda en forma automática la fecha y hora del cambio de datos en una columna nueva, llamada nombre_columna_fhChange
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais")
  poblacion.setMDM_EnableDTLog(true)
...
  • setMDM_EnableProcessLog(value: Boolean): En caso de modificación de datos, se guarda en forma automática el proceso que realizó el cambio en los datos, se crea una nueva columna llamada nombre_columna_ProcessLog
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais")
  poblacion.setMDM_EnableProcessLog(true)
...

Métodos de DataQuality.

Estos métodos permiten aplicar calidad de datos en forma automática sobre cada columna.

  • setDQ_MinLen(value: Integer, externalCode: String = null): huemul_Columns: Establece el largo mínimo que puede tener el contenido de cada fila para la columna. Parámetro externalCode indica código externo del error.
  val nombre = new huemul_Columns (StringType, true, "nombre del pais").setDQ_MinLen(2,"COD_ERROR")
...

Este método reemplazará al método setDQ_MinLen(value: Integer), el cual será deprecado en la versión 3.0

  • setDQ_MaxLen(value: Integer, externalCode: String = null): huemul_Columns: Establece el largo máximo que puede tener el contenido de cada fila para la columna. Parámetro externalCode indica código externo del error.
  val nombre = new huemul_Columns (StringType, true, "nombre del pais").setDQ_MaxLen(50,"COD_ERROR")
...

Este método reemplazará al método setDQ_MaxLen(value: Integer), el cual será deprecado en la versión 3.0

  • setDQ_MinDecimalValue(value: Decimal, externalCode: String = null): huemul_Columns: Establece el valor mínimo de un dato de tipo numérico. Parámetro externalCode indica código externo del error.
  val codigo = new huemul_Columns (IntegerType, true,"codigo del pais").setDQ_MinDecimalValue(1,"COD_ERROR")
...

Este método reemplazará al método setDQ_MinDecimalValue(value: Decimal), el cual será deprecado en la versión 3.0

  • setDQ_MaxDecimalValue(value: Decimal, externalCode: String = null): huemul_Columns: Establece el valor máximo de un dato de tipo numérico. Parámetro externalCode indica código externo del error.
  val codigo = new huemul_Columns (IntegerType, true,"codigo del pais").setDQ_MaxDecimalValue(200,"COD_ERROR")
...

Este método reemplazará al método setDQ_MaxDecimalValue(value: Decimal), el cual será deprecado en la versión 3.0

  • setDQ_MinDateTimeValue(value: String, externalCode: String = null): huemul_Columns: Establece el valor mínimo de un dato de tipo fecha/hora. Parámetro externalCode indica código externo del error.
  val fecha = new huemul_Columns (TimeStampType, true,"Fecha de independencia").setDQ_MinDateTimeValue("1800-01-01","COD_ERROR")
...

Este método reemplazará al método setDQ_MinDateTimeValue(value: String), el cual será deprecado en la versión 3.0

  • setDQ_MaxDateTimeValue(value: String, externalCode: String = null): huemul_Columns: Establece el valor máximo de un dato de tipo fecha/hora. Parámetro externalCode indica código externo del error.
  val fecha = new huemul_Columns (TimeStampType, true,"Fecha de independencia").setDQ_MaxDateTimeValue("2050-01-01","COD_ERROR")
...

Este método reemplazará al método setDQ_MaxDateTimeValue(value: String), el cual será deprecado en la versión 3.0

LOS SIGUIENTES MÉTODOS SERÁN DEPRECADOS EN LA VERSIÓN 3.0

  • setDQ_MinLen(value: Integer).
  • setDQ_MaxLen(value: Integer).
  • setDQ_MinDecimalValue(value: Decimal).
  • setDQ_MaxDecimalValue(value: Decimal).
  • setDQ_MinDateTimeValue(value: String).
  • setDQ_MaxDateTimeValue(value: String).

Métodos de información adicional.

Estos métodos permiten agregar información relevante acerca de cada columna.

  • setSecurityLevel(value: huemulType_SecurityLevel): Especifica el nivel de seguridad de la columna. Este atributo es relevante para la administración del Gobierno de Datos.
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais")
  poblacion.setSecurityLevel(huemulType_SecurityLevel.Public)
...
  • setEncryptedType(value: String): Especifica si la columna tiene algún tipo de encriptación.
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais")
  poblacion.setEncryptedType("none")
...
  • setARCO_Data(value: Boolean): Especifica si la columna contiene datos sensibles de clientes, y debe ser considerada para las leyes de protección de datos personales.
  val poblacion= new huemul_Columns (IntegerType, true,"cantidad de personas en un pais")
  poblacion.setARCO_Data(false)
...

Métodos de ejecución.

Estos métodos se usan cuando se ejecuta la carga de información.

  • SetMapping(param_name: String, ReplaceValueOnUpdate: Boolean = true, SQLForUpdate: String = null, SQLForInsert: String = null): Los nombres de los campos en el DataFrame no siempre coinciden con los nombres de las columnas en la definición de la tabla, este método permite asociar los nombres de las columnas con los campos del DataFrame.
  1. param_name: es el nombre del campo en el DataFrame
  2. ReplaceValueOnUpdate: true indica que el valor de la columna en la tabla será actualizado con el nuevo valor en el DataFrame, mientras que false mantendrá el valor actual en la tabla.
  3. SQLForUpdate: Es una sentencia SQL que será utilizada en la actualización de datos, por ejemplo puedes implementar tu propia lógica de negocio con los datos nuevos y anteriores de la siguiente forma: case when new.poblacion > old.poblacion then 'nueva poblacion es mayor' else 'otro caso' end
  4. SQLForInsert: Es una sentencia SQL que será utilizada para insertar nuevos datos, por ejemplo puedes implementar tu propia lógica de negocio con los datos nuevos de la siguiente forma: case when new.poblacion > 1000000 then 'mayor a 1 millon' else 'otro caso' end
  val MyTableInstance = new tbl_NombreTabla(huemulBigDataGov, Control)
  MyTableInstance.DF_from_SQL("DatosNuevos","select 56 as codigo, 'chile' as chile ")

  //Realiza mapeo sencillo, sin lógica adicional.
  MyTableInstance.codigo.SetMapping("codigo")

  //nombre inicial se conserva (nunca se actualizará el nombre)
  //en caso que nombre venga nulo, lo cambia a "vacio"
  MyTableInstance.nombre.SetMapping("nombre",false,"","case when new.nombre is null then 'vacio' else nombre end")

  if (!MyTableInstance.executeFull("Final"))
        Control.RaiseError(s"User: Error al intentar masterizar paises(${MyTableInstance.Error_Code}): ${MyTableInstance.Error_Text}")   
...