Skip to content
Sebastián Rodríguez edited this page Jul 30, 2019 · 1 revision

huemul_sql_decode version 1.0

Librería en scala que permite decodificar un script SQL de tipo "select". Retorna las tablas utilizadas y los campos creados, así como la sentencia SQL específica para cada campo, y el linaje de dichos campos.

   //Crea listado de valores a excluir en select, por lo general se deja vacío
   var excludeWords:ArrayBuffer[String]  = new ArrayBuffer[String]() 
   //Inicializa la clase
   val sql_dec: huemul_SQL_Decode = new huemul_SQL_Decode(excludeWords, 1)

   //entregamos listado de bases de datos, tablas y campos existentes en la base de datos de hive
   //esto se puede obtener de forma automática, se ingresa de esta forma para efectos del ejemplo
   val tabAndCols = new ArrayBuffer[huemul_sql_tables_and_columns]
    
    tabAndCols.append( (new huemul_sql_tables_and_columns().setData("bbdd_master", "tabla_cliente", "codigo")) )
    tabAndCols.append( (new huemul_sql_tables_and_columns().setData("bbdd_master", "tabla_cliente", "nombre")) )
    tabAndCols.append( (new huemul_sql_tables_and_columns().setData("bbdd_master", "tabla_cliente", "comuna")) )
    tabAndCols.append( (new huemul_sql_tables_and_columns().setData("bbdd_master", "tabla_comuna", "comuna")) )
    tabAndCols.append( (new huemul_sql_tables_and_columns().setData("bbdd_master", "tabla_comuna", "nombre_comuna")) )

    //genera decode
    val resfinal = sql_dec.decodeSQL("""SELECT cli.codigo as id_cliente, nombre as nombre_cliente, 'codigo: ' + com.comuna + ' nombre: ' + nombre_comuna as descripcion_comuna  FROM tabla_cliente cli inner join bbdd_master.tabla_comuna com on cli.comuna = com.comuna    """, tabAndCols)

Lo anterior retorna como resultado la variable "resfinal" que contiene los siguientes objetos:

  • from_sql: Retorna la sección "FROM" de la sentencia SQL
  • where_sql: Retorna la sección "WHERE" de la sentencia SQL
  • columns: Retorna un arreglo con las columnas creadas por la sentencia SQL (sección "SELECT"), contiene los siguientes atributos:
    • column_name: nombre de la columna creada
    • column_sql: sección del select que indica la columna
    • column_origin: arreglo con el detalle del linaje, contiene los siguientes atributos:
      • trace_database_name: nombre de la base de datos origen del campo
      • trace_table_name: nombre d ela tabla origen del campo
      • trace_tableAlias_name: alias usado en la tabla (sección FROM)
      • trace_column_name: nombre de la columna origen del linaje
  • tables: Retorna un arreglo con el listado de todas la tablas usadas en la sentencia "FROM"
    • database_name: nombre de la base de datos
    • table_name: nombre de la tabla
    • tableAlias_name: nombre del alias usado
  • subquery_result: Arreglo que contiene el detalle de las subquerys, cada fila del arreglo contiene elementos similares a los retornados por "resfinal"

Un ejemplo de la salida se grafica de la siguiente forma:

SQL ORIGINAL:
SELECT cli.codigo as id_cliente, 
            nombre as nombre_cliente, 
            'codigo: ' + com.comuna + ' nombre: ' + nombre_comuna as descripcion_comuna  
FROM tabla_cliente cli 
    inner join bbdd_master.tabla_comuna com 
        on cli.comuna = com.comuna

SQL TRADUCIDO
Version 1.0
RESULTADO CICLO 1 TEMP_HUEMUL_2 ***************************************
************ SQL FROM ************ 
FROM tabla_cliente cli inner join bbdd_master.tabla_comuna com on cli.comuna = com.comuna
************ SQL WHERE ************ 

   
************ COLUMNS ************ 
*** COLUMN NAME: ID_CLIENTE
    column_sql: cli.codigo as id_cliente
     columns used:
     ---- column_database: bbdd_master, trace_table_name: TABLA_CLIENTE, trace_tableAlias_name: CLI, trace_column_name: CODIGO
*** COLUMN NAME: NOMBRE_CLIENTE
    column_sql: nombre as nombre_cliente
     columns used:
     ---- column_database: bbdd_master, trace_table_name: tabla_cliente, trace_tableAlias_name: tabla_cliente, trace_column_name: NOMBRE
*** COLUMN NAME: DESCRIPCION_COMUNA
    column_sql: 'codigo: ' + com.comuna + ' nombre: ' + nombre_comuna as descripcion_comuna
     columns used:
     ---- column_database: BBDD_MASTER, trace_table_name: TABLA_COMUNA, trace_tableAlias_name: COM, trace_column_name: COMUNA
     ---- column_database: bbdd_master, trace_table_name: tabla_comuna, trace_tableAlias_name: tabla_comuna, trace_column_name: NOMBRE_COMUNA
   
************ TABLES ************ 
*** DATABASE NAME: bbdd_master, TABLE NAME: TABLA_CLIENTE, ALIAS: CLI
*** DATABASE NAME: BBDD_MASTER, TABLE NAME: TABLA_COMUNA, ALIAS: COM
   
************ COLUMNS WHERE ************ 
   
************ FINAL RESULTS ************ 
N° Errores: 0
N° subquerys: 0
AliasDatabase: TEMP_HUEMUL
AliasQuery: TEMP_HUEMUL_2

Clone this wiki locally