0% encontró este documento útil (0 votos)
47 vistas26 páginas

Informe Final

Cargado por

David Piedra
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
47 vistas26 páginas

Informe Final

Cargado por

David Piedra
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Universidad Técnica Particular de Loja

Materia:

Practicum 1.1

Autor:

Iam Karin Estrella Zhamungui

Carlos David Piedra

Tema:

INFORME FINAL

Docente:

Omar Alexander Ruiz Vivanco

Paralelo:

“B”
1. Estadística del dataset original

PartidosYGoles

Cantidad de Columnas: 43

Cantidad de Filas: 3723

Cantidad de Datos Completos: 3637

Cantidad de Datos Incompletos: 86

Cantidad de Torneos: 30

Cantidad de Regiones En las Que se Jugó: 11

Cantidad de Equipos: 84

Partidos Jugados: 1248

Máxima Capacidad de un Estadio: 200000

Mínima Capacidad de un Estadio: 5000

Fecha más Antiguo: 1930

Fecha más Reciente: 2022

Cantidad De Países Que Han Ganado El Torneo: 12

Cantidad De Estadios En Los Que Se Jugo: 235

Cantidad de Jugadores Que Han Metido Goles: 1832

Cantidad De Goles Por Penal: 292

AlineacionesXTorneo

Cantidad de Columnas: 14

Cantidad de Filas: 13843

Cantidad Jugadores: 10401

Cantidad Torneos: 30

Cantidad De Equipos: 88

Cantidad Posiciones: 4
2. Proceso de limpieza de datos (Normalización)

Para normalizar estos datos, se siguió el siguiente proceso:

Primero, se seleccionaron los identificadores de las columnas de los archivos.

Posteriormente, se identificaron las columnas clave que serían utilizadas para relacionar los

datos, ya que estas nos servirán para relacionar las tablas entre sí.

Segundo, se procedió con la creación de tablas separadas. Se crearon tablas

individuales para cada identificador con sus posibles atributos.

Proceso al normalizar: Primero se observó un identificador de torneos con el cual se

creó una tabla específica para los torneos. Se vio que el identificador de los partidos está

vinculado al identificador de los torneos, adicionalmente se observaron dos identificadores

en la tabla de partidos, indicando la existencia de dos equipos: locales y visitantes. Se

aplicó un proceso indicado para los identificadores "team_id" y "stadium_id". Todos estos

identificadores están relacionados con la tabla de partidos, lo que indica la relación entre los

partidos y los equipos, así como el estadio donde se realizaron los partidos.

Para la tabla de goles, se siguió un proceso similar al anterior del mismo se vio unas

posibles relaciones con tablas de partidos, torneos, jugadores y equipos. Esto indica que un

gol se realiza por un jugador que está en un equipo en un torneo específico, en un partido

determinado y en un estadio concreto.

Del segundo archivo "AlineacionesXTorneo", se dedujo que para cada alineación

debía existir una clave compuesta. Esta clave compuesta incluye los identificadores del

torneo, el jugador y el equipo. Así, se crearon tablas para las alineaciones, siguiendo el

mismo proceso ya indicado.


3. Esquema Base de Datos

En los documentos, se encontraron varios identificadores (ID) que representan

distintas tablas. En el primer archivo CSV, algunos de los ID del archivo PartidosYGoles

aparecieron también en el segundo archivo CSV AlineacionesXTorneo, lo cual sugiere una

relación entre las tablas.

3.1. Análisis de Datos

En el primer archivo, PartidosYGoles, se generaron cinco tablas: Partidos, Equipos,

Torneos, Estadios y Goles. En este proceso, se separaron los identificadores de cada

elemento y se les asignaron sus atributos correspondientes.

En el segundo archivo, AlineacionesXTorneo, se crearon dos tablas: Alineaciones y

Jugadores. El procedimiento fue similar al del primer archivo.

Tabla Partidos

matches_tournament_id: ID del Torneo - String,

matches_match_id: ID del Partido - String,

matches_away_team_id: ID del Equipo Visitante - String,

matches_home_team_id: ID del Equipo Local - String,

matches_stadium_id: ID del Estadio - String,

matches_match_date: ID de la Fecha del Partido - DATE,

matches_match_time: Tiempo del Partido - String,

matches_stage_name: Fase del Torneo - String,

matches_home_team_score: Goles Local - Int,

matches_away_team_score: Goles Visitante - Int,

matches_extra_time: Partidos Con Tiempo Extra - Int,


matches_penalty_shootout: Partidos Terminados en Penales - Int,

matches_home_team_score_penalties: Goles Por Penal Local -Int,

matches_away_team_score_penalties: Goles Por Penal Visitante - Int,

matches_result: Resultado Partido - String,

Tabla Equipos

team_name: Nombre Equipo - String,

team_region: Nombre Region del Equipo - String,

men_team: Equipo Masculino - Int,

women_team: Equipo Femenino – Int

Tabla Torneos

matches_tournament_id: ID del Torneo - String,

tournaments_tournament_name: Nombre del Torneo -String,

tournaments_year: Año del Torneo - DATE,

tournaments_host_country: Pais del Anfitrión del Torneo - String,

tournaments_winner: Ganador Del Torneo - String,

tournaments_count_teams: Cantidad De Equipos del Torneo - Int,

Tabla Estadios

stadiums_stadium_name: Nombre Estadio - String,

stadiums_city_name: Nombre Ciudad - String,

stadiums_country_name: Nombre Estadio - String,

stadiums_stadium_capacity: Capacidad Estadio - Int,


home_team_name: Equipo Local - String,

home_mens_team: Equipo Local Hombres - Int,

home_womens_team: Equipo Local Mujeres - Int ,

home_region_name: Nombre Region del Local - String,

away_team_name: Nombre Pais Visitante - Int,

away_mens_team : Equipo Visitante Hombres - Int,

away_womens_team: Equipo Visitante Mujeres - Int,

away_region_name: Region Equipo Visitante,

Tabla Goles

goals_goal_id: ID Gol - String,

matches_tournament_id: ID del Torneo - String,

matches_match_id: ID del Partido - String,

goals_team_id: ID Equipo - String,

goals_player_id: ID Jugador - String,

goals_player_team_id: ID Equipo del Jugador - String,

goals_minute_label: Minuto Gol - Int,

goals_minute_regulation: Minuto Gol - Int,

goals_minute_stoppage: Goles Tiro Libre - Int,

goals_match_period: Periodo del Partido - String,

goals_own_goal: Goles en Propia - Int,

goals_penalty: Goles Penal -Int


Tabla Jugadores

squads_player_id: ID Del Jugador - String,

players_family_name: Apellido Jugador - String,

players_given_name: Nombre Jugador - String,

players_birth_date: Año Nacimiento Jugador - Date,

players_midfielder: Jugador Mediocampista - Int,

players_forward: Jugador Delantero - Int,

players_female: Jugador Femenino - Int,

players_goal_keeper: Jugador Arquero - Int,

players_defender: Jugador Defensa - Int

Tabla Squads

squads_team_id: ID Equipo de la Alineación - String,

squads_tournament_id: ID Alineación – String,

squads_player_id: ID Del Jugador - String,

squads_position_name: Posición del Jugador - String,

squads_shirt_number: Numero Camiseta - Int,


3.2. Modelo Conceptual
4. Modelo Relacional

4.1. Diseño Lógico

AlineacionesXTorneo

squads_player_id -> (players_family_name, players_given_name, players_birth_date,

players_female, players_goal_keeper, players_defender, players_midfielder,

players_forward) (Tabla Players)


squads_team_id, squads_tournament_id, squads_player_id -> (squads_position_name,

squads_shirt_number) (Tabla Alignments)

PartidosYGoles

stadiums_stadium_id -> stadiums_stadium_name, stadiums_city_name,

stadiums_country_name, stadiums_stadium_capacity (Tabla Stadiums)

team_id -> team_country, team_region, men_team, women_team

tournaments_tournament_id -> tournaments_tournament_name, tournaments_year,

tournaments_host_country, tournaments_winner, tournaments_count_teams (Tabla

Tournament)

goals_goal_id -> goals_team_id, goals_player_id, matches_tournament_id,

matches_match_id, goals_minute_label, goals_minute_regulation, goals_minute_stoppage,

goals_match_period, goals_own_goal, goals_penalty (Tabla Goals)

matches_match_id -> matches_tournament_id, matches_away_team_id,

matches_home_team_id, matches_stadium_id, matches_match_date,

matches_match_time, matches_stage_name, matches_home_team_score,

matches_away_team_score, matches_extra_time, matches_penalty_shootout,

matches_home_team_score_penalties, matches_away_team_score_penalties,

matches_result (Tabla Matches)


5. Interfaz del Aplicativo

Panel Principal: En donde se encuentran botones mediante los cuales se muestran

las tablas de la base de datos en el programa

Ventana Estadísticas: se muestran estadísticas de la tabla seleccionada al dar click

al botón más
Panel Búsqueda Tabla: La búsqueda va según en id de la tabla seleccionada en los

botones de la izquierda, muestra las tablas relacionadas con esa id.

6. Modelo Físico, Implementación y carga de la base de datos


Script Para crear la base de datos con las tablas:

CREATE DATABASE practicumbdft;

USE practicumbdfr;

DROP TABLE IF EXISTS goals;

DROP TABLE IF EXISTS matches;

DROP TABLE IF EXISTS stadiums;

DROP TABLE IF EXISTS tournaments;

DROP TABLE IF EXISTS players;

DROP TABLE IF EXISTS teams;

DROP TABLE IF EXISTS alignments;

CREATE TABLE teams (

team_id VARCHAR(25) NOT NULL PRIMARY KEY,


team_name VARCHAR(255),

team_region_name VARCHAR(255),

men_team TINYINT(1),

women_team TINYINT(1)

);

CREATE TABLE tournaments (

matches_tournament_id VARCHAR(25) NOT NULL PRIMARY KEY,

tournaments_tournament_name VARCHAR(255),

tournaments_year INT,

tournaments_host_country VARCHAR(255),

tournaments_winner VARCHAR(30),

tournaments_count_teams INT

);

CREATE TABLE stadiums (

matches_stadium_id VARCHAR(25) NOT NULL PRIMARY KEY,

stadiums_stadium_name VARCHAR(255),

stadiums_city_name VARCHAR(255),

stadiums_country_name VARCHAR(255),

stadiums_stadium_capacity INT

);

CREATE TABLE matches (

matches_match_id VARCHAR(25) NOT NULL PRIMARY KEY,

matches_tournament_id VARCHAR(25),
matches_away_team_id VARCHAR(40),

matches_home_team_id VARCHAR(40),

matches_stadium_id VARCHAR(40),

matches_match_date VARCHAR(25),

matches_match_time VARCHAR(25),

matches_stage_name VARCHAR(255),

matches_home_team_score INT,

matches_away_team_score INT,

matches_extra_time VARCHAR(25),

matches_penalty_shootout VARCHAR(25),

matches_home_team_score_penalties INT,

matches_away_team_score_penalties INT,

matches_result VARCHAR(25),

FOREIGN KEY (matches_tournament_id) REFERENCES tournaments (matches_tournament_id),

FOREIGN KEY (matches_away_team_id) REFERENCES teams (team_id),

FOREIGN KEY (matches_home_team_id) REFERENCES teams (team_id),

FOREIGN KEY (matches_stadium_id) REFERENCES stadiums (matches_stadium_id)

);

CREATE TABLE players (

player_id VARCHAR(25) NOT NULL PRIMARY KEY,

players_family_name VARCHAR(255),

players_given_name VARCHAR(255),

players_birth_date VARCHAR(255),

players_female TINYINT(1),

players_goal_keeper TINYINT(1),

players_defender TINYINT(1),
players_midfielder TINYINT(1),

players_forward TINYINT(1)

);

CREATE TABLE alignments (

squads_team_id VARCHAR(25) NOT NULL,

squads_tournament_id VARCHAR(25) NOT NULL,

squads_player_id VARCHAR(25) NOT NULL,

squads_position_name VARCHAR(255),

squads_shirt_number INT,

PRIMARY KEY (squads_team_id, squads_tournament_id, squads_player_id),

FOREIGN KEY (squads_player_id) REFERENCES players (player_id),

FOREIGN KEY (squads_tournament_id) REFERENCES tournaments (matches_tournament_id),

FOREIGN KEY (squads_team_id) REFERENCES teams (team_id)

);

CREATE TABLE goals (

goals_goal_id VARCHAR(25) NOT NULL PRIMARY KEY,

goals_team_id VARCHAR(25),

goals_player_id VARCHAR(25),

matches_tournament_id VARCHAR(25),

matches_match_id VARCHAR(25),

goals_minute_label VARCHAR(255),

goals_minute_regulation INT,

goals_minute_stoppage INT,

goals_match_period VARCHAR(255),

goals_own_goal TINYINT(1),

goals_penalty TINYINT(1),
FOREIGN KEY (goals_team_id) REFERENCES teams (team_id),

FOREIGN KEY (goals_player_id) REFERENCES players (player_id),

FOREIGN KEY (matches_tournament_id) REFERENCES tournaments (matches_tournament_id),

FOREIGN KEY (matches_match_id) REFERENCES matches (matches_match_id)

);

7. Codigos Conexion y Consultas

object ImportadorDatos {
val xa = Transactor.fromDriverManager[IO](
driver = "com.mysql.cj.jdbc.Driver", //JDBC DRIVER
url = "jdbc:mysql://localhost:3306/practicumbdfr", //URL CONEXION
user = "root",
password = "ExLolIKE.",
logHandler = None
)

def obtenerJugadores(): Array[(String, String, String, String, String,


String, String, String, String)] =
sql"SELECT * FROM players"
.query[(String, String, String, String, String, String, String,
String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def obtenerPartidos(): Array[(String, String, String, String, String,


String, String, String, String, String, String, String, String, String,
String)] =
sql"SELECT * FROM matches"
.query[(String, String, String, String, String, String, String,
String, String, String, String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def obtenerGoles(): Array[(String, String, String, String, String,


String, String, String, String, String, String)] =
sql"SELECT * FROM goals"
.query[(String, String, String, String, String, String, String,
String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def obtenerEstadios(): Array[(String, String, String, String, String)] =


sql"SELECT * FROM stadiums"
.query[(String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def obtenerEquipos(): Array[(String, String, String, String, String)] =


sql"SELECT * FROM teams"
.query[(String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def obtenerTorneos(): Array[(String, String, String, String, String,


String)] =
sql"SELECT * FROM tournaments"
.query[(String, String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def obtenerAlineaciones(): Array[(String, String, String, String,


String)] =
sql"SELECT * FROM alignments"
.query[(String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def statsJugadores(): Array[(String, String, String, String, String,


String, String)] =
sql"""SELECT COUNT(player_id),
SUM(players_female ),
COUNT(player_id) -SUM(players_female),
SUM(players_goal_keeper),
SUM(players_defender),
SUM(players_midfielder),
SUM(players_forward)
FROM players;
"""
.query[(String, String, String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def statsGoles(): Array[(String, String, String, String, String, String)]


=
sql"""SELECT
COUNT(DISTINCT goals_goal_id) AS distinct_goals,
COUNT(DISTINCT goals_player_id) AS distinct_players,
COUNT(DISTINCT matches_tournament_id) AS distinct_tournaments,
COUNT(DISTINCT matches_match_id) AS distinct_matches,
SUM(goals_own_goal) AS total_own_goals,
SUM(goals_penalty) AS total_penalties
FROM goals;
""".query[(String, String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def statsPartidos(): Array[(String, String, String, String, String,


String, String, String, String)] =
sql"""SELECT
COUNT(*) AS total_matches,
COUNT(DISTINCT matches_away_team_id) AS distinct_away_teams,
COUNT(DISTINCT matches_home_team_id) AS distinct_home_teams,
COUNT(DISTINCT matches_stadium_id) AS distinct_stadiums,
SUM(matches_penalty_shootout) AS total_penalty_shootouts,
SUM(matches_home_team_score_penalties) AS total_home_team_penalties,
SUM(matches_away_team_score_penalties) AS total_away_team_penalties,
SUM(matches_home_team_score + matches_away_team_score) AS
total_goals,
SUM(matches_home_team_score_penalties +
matches_away_team_score_penalties) AS total_penalties
FROM matches;
""".query[(String, String, String, String, String, String, String,
String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def statsEstadios(): Array[(String, String, String, String)] =


sql"""SELECT COUNT(matches_stadium_id),
AVG(stadiums_stadium_capacity),
MAX(stadiums_stadium_capacity),
MIN(stadiums_stadium_capacity)
FROM stadiums;
""".query[(String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def statsEquipos(): Array[(String, String, String, String, String)] =


sql"""SELECT COUNT(team_id),
COUNT(DISTINCT team_region_name),
SUM(men_team),
SUM(women_team),
SUM(men_team + women_team)
FROM teams;
""".query[(String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def statsTorneos(): Array[(String, String, String, String, String)] =


sql"""SELECT COUNT(matches_tournament_id),
COUNT(DISTINCT tournaments_tournament_name),
MAX(tournaments_year),
MIN(tournaments_year),
AVG(tournaments_count_teams)
FROM tournaments;
""".query[(String, String, String, String, String)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def stattsPlayerAlignments(): Array[(String, String, Int)] =


sql"""SELECT squads_tournament_id, squads_team_id, COUNT(*) AS
tournament_team_players_count
FROM alignments
GROUP BY squads_tournament_id, squads_team_id
ORDER BY 1,2;""".query[(String, String, Int)]
.to[Array]
.transact(xa)
.unsafeRunSync()

def stattsStadiumsXCountry(): List[(String, Double)] =


sql"""SELECT stadiums_country_name, COUNT(*)
FROM stadiums
GROUP BY 1
ORDER BY 1;""".query[(String, Double)]
.to[List]
.transact(xa)
.unsafeRunSync()

def stattsTeamsGenere(): List[(String, Double)] =


sql"""SELECT "Men Teams", SUM(men_team)
FROM teams
UNION
SELECT "Women Teams", SUM(women_team)
FROM teams;""".query[(String, Double)]
.to[List]
.transact(xa)
.unsafeRunSync()

def stattsWinnersTournaments(): List[(String, Double)] =


sql"""SELECT tournaments_winner, COUNT(tournaments_winner)
FROM tournaments
GROUP BY 1;""".query[(String, Double)]
.to[List]
.transact(xa)
.unsafeRunSync()

def stattsGenreWandM(): List[(String, Double)] =


sql"""SELECT "Mujeres", SUM(players_female)
|FROM players
|UNION
|SELECT "Hombres", COUNT(players_female) - SUM(players_female)
|FROM players;""".stripMargin.query[(String, Double)]
.to[List]
.transact(xa)
.unsafeRunSync()
}
8. Generación Script para carga de datos en un motor de BD especifico:

Para poblar la base de datos con los archivos csv se pueden usar dos formas,

directamente en Mysql o en código en lenguaje scala, independientemente del método

utilizado, los datos se limpian.

La primer forma de cargar datos en la base de datos y la implementada en el

proyecto es la siguiente:

import cats.*
import cats.effect.*
import cats.effect.unsafe.implicits.global
import com.github.tototoshi.csv.*
import doobie.*
import doobie.implicits.*

import java.io.File

object InsertarDT {

@main
def exportarDatos2BD(): Unit =
val path2DataFile1 = "C:\\dsPartidosYGoles.csv"
val reader1 = CSVReader.open(new File(path2DataFile1))
val contentFilePyG: List[Map[String, String]] =
reader1.allWithHeaders()
reader1.close()

val path2DataFile2 = "C:\\dsAlineacionesXTorneo-2.csv"


val reader2 = CSVReader.open(new File(path2DataFile2))
val contentFileAxT: List[Map[String, String]] =
reader2.allWithHeaders()
reader2.close()

val xa = Transactor.fromDriverManager[IO](
driver = "com.mysql.cj.jdbc.Driver", //JDBC DRIVER
url = "jdbc:mysql://localhost:3306/practicumbdfr", //URL CONEXION
user = "root",
password = "ExLolIKE.",
logHandler = None
)
generateDataPlayers(contentFileAxT)
.foreach(insert => insert.run.transact(xa).unsafeRunSync())
generateDataTeams(contentFilePyG)
.foreach(insert => insert.run.transact(xa).unsafeRunSync())
generateDataTournaments(contentFilePyG)
.foreach(insert => insert.run.transact(xa).unsafeRunSync())
generateDataStadiums(contentFilePyG)
.foreach(insert => insert.run.transact(xa).unsafeRunSync())
generateDataAlignments(contentFileAxT)
.foreach(insert => insert.run.transact(xa).unsafeRunSync())
generateDataMatches(contentFilePyG)
.foreach(insert => insert.run.transact(xa).unsafeRunSync())
generateDataGoals(contentFilePyG)
.foreach(insert => insert.run.transact(xa).unsafeRunSync())
generateScriptAlignments(contentFileAxT)
generateScriptTournaments(contentFilePyG)

def generateDataPlayers(data: List[Map[String, String]]):


List[doobie.Update0] =
val playerTuple = data
.map(
row => (row("players_birth_date"),
row("players_defender"),
row("players_family_name"),
row("players_female"),
row("players_forward"),
row("players_given_name"),
row("players_goal_keeper"),
row("players_midfielder"),
row("squads_player_id"))
)
.distinct
.map(t7 =>
sql""" INSERT INTO players(players_birth_date, players_defender,
players_family_name, players_female,
players_forward, players_given_name, players_goal_keeper,
players_midfielder, player_id)
VALUES(${t7._1}, ${t7._2}, ${t7._3}, ${t7._4}, ${t7._5},
${t7._6} ,${t7._7}, ${t7._8},${t7._9})
""".update)
playerTuple

def generateDataMatches(data: List[Map[String, String]]):


List[doobie.Update0] =
val matchTuple = data
.map(
row => (row("matches_match_id"),
row("matches_tournament_id"),
row("matches_away_team_id"),
row("matches_home_team_id"),
row("matches_stadium_id"),
row("matches_match_date"),
row("matches_match_time"),
row("matches_stage_name"),
row("matches_home_team_score"),
row("matches_away_team_score"),
row("matches_extra_time"),
row("matches_penalty_shootout"),
row("matches_home_team_score_penalties"),
row("matches_away_team_score_penalties"),
row("matches_result"))
)
.distinct
.map(t7 =>
sql""" INSERT INTO matches(matches_match_id, matches_tournament_id,
matches_away_team_id, matches_home_team_id, matches_stadium_id,
matches_match_date, matches_match_time, matches_stage_name,
matches_home_team_score, matches_away_team_score,
matches_extra_time, matches_penalty_shootout,
matches_home_team_score_penalties, matches_away_team_score_penalties,
matches_result)
VALUES(${t7._1}, ${t7._2}, ${t7._3}, ${t7._4}, ${t7._5},
${t7._6} ,${t7._7}, ${t7._8},${t7._9},${t7._10},
${t7._11},${t7._12},${t7._13},${t7._14},${t7._15})
""".update)
matchTuple

def generateDataGoals(data: List[Map[String, String]]):


List[doobie.Update0] =
val goalTuple = data
.map(
row => (row("goals_goal_id").trim,
row("matches_match_id"),
row("goals_team_id"),
row("goals_player_id"),
row("matches_tournament_id"),
row("goals_minute_label"),
row("goals_minute_regulation"),
row("goals_minute_stoppage"),
row("goals_match_period"),
row("goals_own_goal"),
row("goals_penalty"))
)
.filterNot(_._7 == "NA")
.distinct
.map(t7 =>
sql""" INSERT INTO goals(goals_goal_id, matches_match_id,
goals_team_id, goals_player_id, matches_tournament_id,
goals_minute_label, goals_minute_regulation,
goals_minute_stoppage, goals_match_period, goals_own_goal,
goals_penalty)
VALUES(${t7._1}, ${t7._2}, ${t7._3}, ${t7._4}, ${t7._5},
${t7._6} ,${t7._7}, ${t7._8},${t7._9},${t7._10},
${t7._11})
""".update)
goalTuple

def generateDataAlignments(data: List[Map[String, String]]):


List[doobie.Update0] =
val alignmentTuple = data
.map(
row => (row("squads_player_id").trim,
row("squads_position_name"),
row("squads_shirt_number"),
row("squads_team_id"),
row("squads_tournament_id"))
)
.distinct
.map(t7 =>
sql""" INSERT INTO alignments(squads_player_id,
squads_position_name, squads_shirt_number, squads_team_id,
squads_tournament_id)
VALUES(${t7._1}, ${t7._2}, ${t7._3}, ${t7._4}, ${t7._5})
""".update)
alignmentTuple

def generateDataStadiums(data: List[Map[String, String]]):


List[doobie.Update0] =
val stadiumTuple = data
.map(
row => (row("matches_stadium_id").trim,
row("stadiums_city_name"),
row("stadiums_country_name"),
row("stadiums_stadium_capacity"),
row("stadiums_stadium_name"))
)
.distinct
.map(t7 =>
sql""" INSERT INTO stadiums(matches_stadium_id, stadiums_city_name,
stadiums_country_name,
stadiums_stadium_capacity, stadiums_stadium_name)
VALUES(${t7._1}, ${t7._2}, ${t7._3}, ${t7._4}, ${t7._5})
""".update)
stadiumTuple

def generateDataTeams(data: List[Map[String, String]]):


List[doobie.Update0] =
val teamTuple = data
.map(
row => (row("matches_away_team_id"),
row("away_team_name"),
row("away_region_name"),
row("away_mens_team"),
row("away_womens_team"))
)
.distinct
.map(t7 =>
sql""" INSERT INTO teams(team_id, team_name, team_region_name,
men_team, women_team)
VALUES(${t7._1}, ${t7._2}, ${t7._3}, ${t7._4}, ${t7._5})
""".update)
teamTuple

def generateDataTournaments(data: List[Map[String, String]]) =


val tournamentsTuple = data
.map(
row => (row("matches_tournament_id"),
row("tournaments_tournament_name"),
row("tournaments_year"),
row("tournaments_host_country"),
row("tournaments_winner"),
row("tournaments_count_teams"))
)
.distinct
.map(t7 =>
sql""" INSERT INTO tournaments(matches_tournament_id,
tournaments_tournament_name, tournaments_year,
tournaments_host_country, tournaments_winner,
tournaments_count_teams)
VALUES(${t7._1}, ${t7._2}, ${t7._3}, ${t7._4},
${t7._5},${t7._6})
""".update)
tournamentsTuple

def generateScriptAlignments(data: List[Map[String, String]]) =


val sqlInsert = s"INSERT INTO alignments(squads_player_id,
squads_position_name, squads_shirt_number, squads_team_id,
squads_tournament_id)" +
s" VALUES ('%s', '%s', %d, '%s', '%s');"
val alignmentTuple = data
.map(
row => (row("squads_player_id"),
row("squads_position_name"),
row("squads_shirt_number").toInt,
row("squads_team_id"),
row("squads_tournament_id"))
)
.distinct
.map(t => sqlInsert.formatLocal(java.util.Locale.US, t._1, t._2,
t._3, t._4, t._5))
alignmentTuple.foreach(println)

def generateScriptTournaments(data: List[Map[String, String]]) =


val sqlInsert = s" INSERT INTO tournaments(matches_tournament_id,
tournaments_tournament_name, " +
s"tournaments_year, tournaments_host_country, tournaments_winner,
tournaments_count_teams) " +
s"VALUES('%s', '%s', '%s', '%s', '%s', %d);"
val alignmentTuple = data
.map(
row => (row("matches_tournament_id"),
row("tournaments_tournament_name"),
row("tournaments_year"),
row("tournaments_host_country"),
row("tournaments_winner"),
row("tournaments_count_teams").toInt)
)
.distinct
.map(t => sqlInsert.formatLocal(java.util.Locale.US, t._1, t._2,
t._3, t._4, t._5, t._6))
alignmentTuple.foreach(println)
}

La segunda alternativa para cargar datos a las tablas con el siguiente script en

mysql, el cual los archivos csv tendrán que estar importados en la base de datos:

INSERT INTO teams (team_id, team_name, team_region_name, men_team,


women_team)
SELECT DISTINCT
matches_away_team_id,
away_team_name,
away_region_name,
away_mens_team,
away_womens_team
FROM dspartidosygoles
ORDER BY 1, 2;

INSERT INTO players(player_id, players_family_name, players_given_name,


players_birth_date, players_female, players_goal_keeper,
players_defender, players_midfielder, players_forward)
SELECT DISTINCT
squads_player_id,
players_family_name,
players_given_name,
players_birth_date,
players_female,
players_goal_keeper,
players_defender,
players_midfielder,
players_forward
FROM dsalineacionesxtorneo;

INSERT INTO stadiums(matches_stadium_id, stadiums_stadium_name,


stadiums_city_name, stadiums_country_name, stadiums_stadium_capacity)
SELECT DISTINCT
matches_stadium_id,
stadiums_stadium_name,
stadiums_city_name,
stadiums_country_name,
stadiums_stadium_capacity
FROM dspartidosygoles;

INSERT INTO tournaments(matches_tournament_id, tournaments_tournament_name,


tournaments_year, tournaments_host_country, tournaments_winner,
tournaments_count_teams)
SELECT DISTINCT
matches_tournament_id,
tournaments_tournament_name,
tournaments_year,
tournaments_host_country,
tournaments_winner,
tournaments_count_teams
FROM dspartidosygoles;

INSERT INTO matches(matches_match_id, matches_tournament_id,


matches_away_team_id, matches_home_team_id, matches_stadium_id,
matches_match_date, matches_match_time,
matches_stage_name, matches_home_team_score, matches_away_team_score,
matches_extra_time, matches_penalty_shootout,
matches_home_team_score_penalties, matches_away_team_score_penalties,
matches_result)
SELECT DISTINCT
matches_match_id,
matches_tournament_id,
matches_away_team_id,
matches_home_team_id,
matches_stadium_id,
matches_match_date,
matches_match_time,
matches_stage_name,
matches_home_team_score,
matches_away_team_score,
matches_extra_time,
matches_penalty_shootout,
matches_home_team_score_penalties,
matches_away_team_score_penalties,
matches_result
FROM dspartidosygoles;

INSERT INTO goals(goals_goal_id, goals_team_id, goals_player_id,


matches_tournament_id, matches_match_id, goals_minute_label,
goals_minute_regulation, goals_minute_stoppage,
goals_match_period, goals_own_goal, goals_penalty)
SELECT DISTINCT
goals_goal_id,
goals_team_id,
goals_player_id,
matches_tournament_id,
matches_match_id,
goals_minute_label,
goals_minute_regulation,
goals_minute_stoppage,
goals_match_period,
goals_own_goal,
goals_penalty
FROM dspartidosygoles
WHERE goals_minute_regulation IS NOT NULL
ORDER BY 1;

INSERT INTO alignments (squads_player_id, squads_tournament_id,


squads_team_id, squads_position_name, squads_shirt_number)
SELECT DISTINCT
squads_player_id,
squads_tournament_id,
squads_team_id,
squads_position_name,
squads_shirt_number
FROM dsalineacionesxtorneo;

También podría gustarte