-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Sebastián Rodríguez edited this page Jul 30, 2019
·
1 revision
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