load_latest_parquet
load_latest_parquet(spark=None, data_base=None, schema=None, table=None, env=None)
Carga el parquet más reciente para la tabla solicitada desde /Volumes/bronze/{db}_{schema}/{env}/{table}/.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| data_base | str | Nombre de base lógica. |
| schema | str | Nombre de esquema. |
| table | str | Nombre de tabla. |
| env | str | None | Ambiente; si no se pasa, usa ENV o dev. |
Retorna: DataFrame de Spark o None si no encuentra archivos.
df_clientes = io.load_latest_parquet(
spark=spark,
data_base="timepro",
schema="insudb",
table="clientes",
env="dev"
)
return_parquets_and_register_temp_views
return_parquets_and_register_temp_views(spark=None, tables_load=None, verbose=False, env=None)
Lee parquets según configuración y crea vistas temporales. Devuelve los DataFrames en un diccionario.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| tables_load | dict | Mapa de carga por base/esquema/lista de tablas y vistas. |
| verbose | bool | Imprime mensajes de estado. |
| env | str | None | Ambiente de lectura. |
Retorna: dict con claves db.schema.table y valores DataFrame.
parquets_register_temp_views
parquets_register_temp_views(spark=None, tables_load=None, verbose=False, env=None)
Misma carga de parquets que la función anterior, pero sin devolver diccionario.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| tables_load | dict | Configuración de tablas/vistas. |
| verbose | bool | Mensajes de materialización. |
| env | str | None | Ambiente de lectura. |
Retorna: None.
load_latest_delimited_file
load_latest_delimited_file(spark=None, source_file=None, env=None, delimiter=",", header=True, infer_schema=True, encoding="utf-8", quote='"', escape='"', multiline=False, extensions=None)
Carga el último archivo delimitado desde la carpeta indicada. Está orientada a .csv, .txt y variantes similares leídas de forma nativa con Spark.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| source_file | str | Ruta relativa dentro de /Volumes/bronze/excel/{env}/. |
| env | str | None | Ambiente de lectura. |
| delimiter | str | Separador del archivo. Ejemplos: ,, ;, |, \t. |
| header | bool | Indica si el archivo tiene encabezado. |
| infer_schema | bool | Si Spark debe inferir tipos. |
| encoding | str | Encoding del archivo, por ejemplo utf-8 o latin1. |
| quote | str | Carácter quote. |
| escape | str | Carácter escape. |
| multiline | bool | Habilita registros multilinea si el origen lo requiere. |
| extensions | iterable | None | Extensiones admitidas; si se omite usa .csv y .txt. |
Retorna: DataFrame de Spark o None si no hay archivos compatibles.
from gss_bi_udfs import io
df_clientes = io.load_latest_delimited_file(
spark=spark,
source_file="comercial/clientes_vigentes/periodo=2026-03",
delimiter=";",
header=True,
encoding="latin1",
)
load_latest_excel_file
load_latest_excel_file(spark=None, source_file=None, env=None, header=True, sheet_name=0)
Carga el último archivo Excel .xls o .xlsx usando pandas y luego convierte el resultado a DataFrame Spark. Esta opción evita depender de com.crealytics.spark.excel en entornos donde el conector no está instalado.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| source_file | str | Ruta relativa dentro de /Volumes/bronze/excel/{env}/. |
| env | str | None | Ambiente de lectura. |
| header | bool | Indica si la primera fila contiene nombres de columnas. |
| sheet_name | str | int | Hoja a leer. Puede ser índice o nombre. |
Retorna: DataFrame de Spark o None si no hay archivos.
from gss_bi_udfs import io
df_excel = io.load_latest_excel_file(
spark=spark,
source_file="comercial/clientes_vigentes/periodo=2026-03",
header=True,
sheet_name="Hoja1",
)
load_latest_file
load_latest_file(spark=None, source_file=None, env=None, file_format=None, header=True, delimiter=",", infer_schema=True, encoding="utf-8", quote='"', escape='"', multiline=False, sheet_name=0)
Dispatcher genérico para cargar la última versión disponible de un archivo crudo. Soporta excel, xls, xlsx, csv, txt, tsv y delimited.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| source_file | str | Ruta relativa de la carpeta del dataset versionado. |
| env | str | None | Ambiente de lectura. |
| file_format | str | Formato del archivo a leer. |
| header | bool | Si el archivo contiene encabezado. |
| delimiter | str | Separador para formatos delimitados. |
| infer_schema | bool | Inferencia de tipos. |
| encoding | str | Encoding del origen. |
| quote | str | Carácter quote. |
| escape | str | Carácter escape. |
| multiline | bool | Soporte para multilinea. |
| sheet_name | str | int | Hoja en caso de Excel. |
Retorna: DataFrame de Spark.
from gss_bi_udfs import io
df = io.load_latest_file(
spark=spark,
source_file="comercial/clientes_vigentes/periodo=2026-03",
file_format="delimited",
delimiter="|",
header=False,
infer_schema=False,
)
load_latest_excel
load_latest_excel(spark=None, source_file=None, env=None)
Función de compatibilidad para cargas Excel. Internamente delega a load_latest_excel_file con encabezado habilitado.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| source_file | str | Ruta relativa del archivo dentro de bronze/excel. |
| env | str | None | Ambiente de lectura. |
Retorna: DataFrame de Spark o None si falla/no hay archivos.
df_legacy = io.load_latest_excel(
spark=spark,
source_file="comercial/clientes_vigentes/periodo=2026-03",
env="dev",
)
return_excels_and_register_temp_views
return_excels_and_register_temp_views(spark=None, files_load=None, verbose=False, env=None)
Carga Excels configurados, crea vistas temporales y devuelve diccionario de DataFrames.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| files_load | dict | Configuración dominio/subdominio/lista de archivos-vistas. |
| verbose | bool | Mensajes de materialización. |
| env | str | None | Ambiente de lectura. |
Retorna: dict con claves dominio.subdominio.archivo y valores DataFrame.
excels_register_temp_views
excels_register_temp_views(spark=None, files_load=None, verbose=False, env=None)
Carga Excels y materializa vistas temporales sin retornar estructura adicional.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| files_load | dict | Configuración de archivos y vistas. |
| verbose | bool | Mensajes de materialización. |
| env | str | None | Ambiente de lectura. |
Retorna: None.
load_and_materialize_views
load_and_materialize_views(action, **kwargs)
Dispatcher para acciones de carga: parquets/excels con o sin retorno.
| Parámetro | Tipo | Descripción |
| action | str | Nombre de acción soportada. |
| kwargs | dict | Parámetros de la acción seleccionada. |
Retorna: dict resultante de la acción; {} si no existe.
tables_load = {
"timepro": {"insudb": [{"table": "clientes", "view": "vw_clientes"}]}
}
out = io.load_and_materialize_views(
action="return_parquets_and_register_temp_views",
spark=spark,
tables_load=tables_load,
env="dev"
)
Comentarios Finales Sobre Archivos Crudos
Los archivos crudos versionados deben organizarse por dominio, dataset lógico y período de negocio. La convención esperada es que el proceso de ingesta publique archivos con timestamp ordenable en la última carpeta del path.
raw-files/
└── <dominio>/
└── <nombre_logico_archivo>/
└── periodo=<YYYY-MM>/
└── <nombre_logico_archivo>_<YYYYMMDD_HHMMSS>.<ext>
Recomendaciones operativas:
| Escenario | Recomendación |
| CSV/TXT/TSV | Usar lectura nativa con Spark mediante load_latest_delimited_file o load_latest_file. |
| Excel | Usar load_latest_excel_file, que resuelve la lectura con pandas y luego convierte a Spark. |
| Archivos sin encabezado | Informar header=False; para Excel se generan nombres column_1, column_2, etc. |
| Archivos con distintas recargas | Consumir siempre el archivo más reciente por nombre, asumiendo timestamp YYYYMMDD_HHMMSS. |
save_table_to_delta
save_table_to_delta(spark=None, df=None, catalog=None, schema=None, table_name=None, mode="overwrite")
Guarda un DataFrame en formato Delta usando el modo de escritura indicado y lo registra en el metastore.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| df | DataFrame | Dataset de entrada a persistir. |
| catalog | str | Catálogo destino base. |
| schema | str | Esquema destino. |
| table_name | str | Nombre de tabla destino. |
| mode | str | Modo de escritura de Spark; por defecto overwrite. |
Retorna: None.
io.save_table_to_delta(
spark=spark,
df=df_clientes,
catalog="fi_comunes",
schema="silver",
table_name="dim_cliente",
mode="overwrite"
)
save_snapshot_to_delta
save_snapshot_to_delta(spark=None, df=None, catalog=None, schema=None, table_name=None, snapshot_column=None)
Guarda un snapshot de una tabla fact en Delta, borrando previamente el rango de snapshot/time_key que llega en el DataFrame.
| Parámetro | Tipo | Descripción |
| spark | SparkSession | None | Sesión opcional. |
| df | DataFrame | Dataset de entrada a persistir. |
| catalog | str | Catálogo destino base. |
| schema | str | Esquema destino. |
| table_name | str | Nombre de tabla destino. |
| snapshot_column | str | Columna que identifica el snapshot o time_key. |
Retorna: None.
io.save_snapshot_to_delta(
spark=spark,
df=df_fact_ventas,
catalog="fi_comunes",
schema="gold",
table_name="fact_ventas_snapshot",
snapshot_column="time_key"
)