From 3d1093897109fd25f42d2c3ef96752b798079552 Mon Sep 17 00:00:00 2001 From: TeoCalvo Date: Tue, 22 Aug 2023 00:21:30 +0000 Subject: [PATCH] Feature Store of teams --- .../dota/feature_store/etl/teams.sql | 156 ++++++++++++++++++ src/06.workflows/data4u_dota.json | 34 ++++ 2 files changed, 190 insertions(+) create mode 100644 src/03.silver/dota/feature_store/etl/teams.sql diff --git a/src/03.silver/dota/feature_store/etl/teams.sql b/src/03.silver/dota/feature_store/etl/teams.sql new file mode 100644 index 0000000..cc7e7df --- /dev/null +++ b/src/03.silver/dota/feature_store/etl/teams.sql @@ -0,0 +1,156 @@ +SELECT + t1.dtReference, + t1.idTeam, + t1.descTeamName, + t1.descTeamTag, + + coalesce(avg(t2.nrFrequency),0) AS nrFrequency180, + coalesce(avg(t2.avgWin),0) AS avgWin180, + coalesce(avg(t2.avgCampsStacked),0) AS avgCampsStacked180, + coalesce(avg(t2.avgCreepsStacked),0) AS avgCreepsStacked180, + coalesce(avg(t2.avgKills),0) AS avgKills180, + coalesce(avg(t2.avgAssist),0) AS avgAssist180, + coalesce(avg(t2.avgDeaths),0) AS avgDeaths180, + coalesce(avg(t2.avgDenies),0) AS avgDenies180, + coalesce(avg(t2.avgFirstbloodClaimed),0) AS avgFirstbloodClaimed180, + coalesce(avg(t2.avgGold),0) AS avgGold180, + coalesce(avg(t2.avgGoldMinute),0) AS avgGoldMinute180, + coalesce(avg(t2.avgGoldSpent),0) AS avgGoldSpent180, + coalesce(avg(t2.avgHeroDamage),0) AS avgHeroDamage180, + coalesce(avg(t2.avgHeroHealing),0) AS avgHeroHealing180, + coalesce(avg(t2.avgLastHits),0) AS avgLastHits180, + coalesce(avg(t2.avgLevel),0) AS avgLevel180, + coalesce(avg(t2.avgNetWorth),0) AS avgNetWorth180, + coalesce(avg(t2.avgRoshansKilled),0) AS avgRoshansKilled180, + coalesce(avg(t2.avgRunePicks),0) AS avgRunePicks180, + coalesce(avg(t2.avgStunsSec),0) AS avgStunsSec180, + coalesce(avg(t2.avgtTeamfightParticipation),0) AS avgtTeamfightParticipation180, + coalesce(avg(t2.avgTowerDamage),0) AS avgTowerDamage180, + coalesce(avg(t2.avgTowerKilled),0) AS avgTowerKilled180, + coalesce(avg(t2.avgXpMinute),0) AS avgXpMinute180, + coalesce(avg(t2.avgTotalGold),0) AS avgTotalGold180, + coalesce(avg(t2.avgTotalXp),0) AS avgTotalXp180, + coalesce(avg(t2.avgKillsMinute),0) AS avgKillsMinute180, + coalesce(avg(t2.avgKDA),0) AS avgKDA180, + coalesce(avg(t2.avgNeutralKills),0) AS avgNeutralKills180, + coalesce(avg(t2.avgTowerKills),0) AS avgTowerKills180, + coalesce(avg(t2.avgCourierKills),0) AS avgCourierKills180, + coalesce(avg(t2.avgLaneKills),0) AS avgLaneKills180, + coalesce(avg(t2.avgHeroKills),0) AS avgHeroKills180, + coalesce(avg(t2.avgObserverKills),0) AS avgObserverKills180, + coalesce(avg(t2.avgSentryKills),0) AS avgSentryKills180, + coalesce(avg(t2.avgRoshansKills),0) AS avgRoshansKills180, + coalesce(avg(t2.avgNecronomiconKills),0) AS avgNecronomiconKills180, + coalesce(avg(t2.avgAncientKills),0) AS avgAncientKills180, + coalesce(avg(t2.avgBuybackCount),0) AS avgBuybackCount180, + coalesce(avg(t2.avgObserverUses),0) AS avgObserverUses180, + coalesce(avg(t2.avgSentryUses),0) AS avgSentryUses180, + coalesce(avg(t2.avgLaneEfficiency),0) AS avgLaneEfficiency180, + coalesce(avg(t2.avgPurchaseTps),0) AS avgPurchaseTps180, + + coalesce(avg(t3.nrFrequency),0)AS nrFrequency90, + coalesce(avg(t3.avgWin),0)AS avgWin90, + coalesce(avg(t3.avgCampsStacked),0)AS avgCampsStacked90, + coalesce(avg(t3.avgCreepsStacked),0)AS avgCreepsStacked90, + coalesce(avg(t3.avgKills),0)AS avgKills90, + coalesce(avg(t3.avgAssist),0)AS avgAssist90, + coalesce(avg(t3.avgDeaths),0)AS avgDeaths90, + coalesce(avg(t3.avgDenies),0)AS avgDenies90, + coalesce(avg(t3.avgFirstbloodClaimed),0)AS avgFirstbloodClaimed90, + coalesce(avg(t3.avgGold),0)AS avgGold90, + coalesce(avg(t3.avgGoldMinute),0)AS avgGoldMinute90, + coalesce(avg(t3.avgGoldSpent),0)AS avgGoldSpent90, + coalesce(avg(t3.avgHeroDamage),0)AS avgHeroDamage90, + coalesce(avg(t3.avgHeroHealing),0)AS avgHeroHealing90, + coalesce(avg(t3.avgLastHits),0)AS avgLastHits90, + coalesce(avg(t3.avgLevel),0)AS avgLevel90, + coalesce(avg(t3.avgNetWorth),0)AS avgNetWorth90, + coalesce(avg(t3.avgRoshansKilled),0)AS avgRoshansKilled90, + coalesce(avg(t3.avgRunePicks),0)AS avgRunePicks90, + coalesce(avg(t3.avgStunsSec),0)AS avgStunsSec90, + coalesce(avg(t3.avgtTeamfightParticipation),0)AS avgtTeamfightParticipation90, + coalesce(avg(t3.avgTowerDamage),0)AS avgTowerDamage90, + coalesce(avg(t3.avgTowerKilled),0)AS avgTowerKilled90, + coalesce(avg(t3.avgXpMinute),0)AS avgXpMinute90, + coalesce(avg(t3.avgTotalGold),0)AS avgTotalGold90, + coalesce(avg(t3.avgTotalXp),0)AS avgTotalXp90, + coalesce(avg(t3.avgKillsMinute),0)AS avgKillsMinute90, + coalesce(avg(t3.avgKDA),0)AS avgKDA90, + coalesce(avg(t3.avgNeutralKills),0)AS avgNeutralKills90, + coalesce(avg(t3.avgTowerKills),0)AS avgTowerKills90, + coalesce(avg(t3.avgCourierKills),0)AS avgCourierKills90, + coalesce(avg(t3.avgLaneKills),0)AS avgLaneKills90, + coalesce(avg(t3.avgHeroKills),0)AS avgHeroKills90, + coalesce(avg(t3.avgObserverKills),0)AS avgObserverKills90, + coalesce(avg(t3.avgSentryKills),0)AS avgSentryKills90, + coalesce(avg(t3.avgRoshansKills),0)AS avgRoshansKills90, + coalesce(avg(t3.avgNecronomiconKills),0)AS avgNecronomiconKills90, + coalesce(avg(t3.avgAncientKills),0)AS avgAncientKills90, + coalesce(avg(t3.avgBuybackCount),0)AS avgBuybackCount90, + coalesce(avg(t3.avgObserverUses),0)AS avgObserverUses90, + coalesce(avg(t3.avgSentryUses),0)AS avgSentryUses90, + coalesce(avg(t3.avgLaneEfficiency),0)AS avgLaneEfficiency90, + coalesce(avg(t3.avgPurchaseTps),0)AS avgPurchaseTps90, + + coalesce(avg(t4.nrFrequency),0)AS nrFrequency30, + coalesce(avg(t4.avgWin),0)AS avgWin30, + coalesce(avg(t4.avgCampsStacked),0)AS avgCampsStacked30, + coalesce(avg(t4.avgCreepsStacked),0)AS avgCreepsStacked30, + coalesce(avg(t4.avgKills),0)AS avgKills30, + coalesce(avg(t4.avgAssist),0)AS avgAssist30, + coalesce(avg(t4.avgDeaths),0)AS avgDeaths30, + coalesce(avg(t4.avgDenies),0)AS avgDenies30, + coalesce(avg(t4.avgFirstbloodClaimed),0)AS avgFirstbloodClaimed30, + coalesce(avg(t4.avgGold),0)AS avgGold30, + coalesce(avg(t4.avgGoldMinute),0)AS avgGoldMinute30, + coalesce(avg(t4.avgGoldSpent),0)AS avgGoldSpent30, + coalesce(avg(t4.avgHeroDamage),0)AS avgHeroDamage30, + coalesce(avg(t4.avgHeroHealing),0)AS avgHeroHealing30, + coalesce(avg(t4.avgLastHits),0)AS avgLastHits30, + coalesce(avg(t4.avgLevel),0)AS avgLevel30, + coalesce(avg(t4.avgNetWorth),0)AS avgNetWorth30, + coalesce(avg(t4.avgRoshansKilled),0)AS avgRoshansKilled30, + coalesce(avg(t4.avgRunePicks),0)AS avgRunePicks30, + coalesce(avg(t4.avgStunsSec),0)AS avgStunsSec30, + coalesce(avg(t4.avgtTeamfightParticipation),0)AS avgtTeamfightParticipation30, + coalesce(avg(t4.avgTowerDamage),0)AS avgTowerDamage30, + coalesce(avg(t4.avgTowerKilled),0)AS avgTowerKilled30, + coalesce(avg(t4.avgXpMinute),0)AS avgXpMinute30, + coalesce(avg(t4.avgTotalGold),0)AS avgTotalGold30, + coalesce(avg(t4.avgTotalXp),0)AS avgTotalXp30, + coalesce(avg(t4.avgKillsMinute),0)AS avgKillsMinute30, + coalesce(avg(t4.avgKDA),0)AS avgKDA30, + coalesce(avg(t4.avgNeutralKills),0)AS avgNeutralKills30, + coalesce(avg(t4.avgTowerKills),0)AS avgTowerKills30, + coalesce(avg(t4.avgCourierKills),0)AS avgCourierKills30, + coalesce(avg(t4.avgLaneKills),0)AS avgLaneKills30, + coalesce(avg(t4.avgHeroKills),0)AS avgHeroKills30, + coalesce(avg(t4.avgObserverKills),0)AS avgObserverKills30, + coalesce(avg(t4.avgSentryKills),0)AS avgSentryKills30, + coalesce(avg(t4.avgRoshansKills),0)AS avgRoshansKills30, + coalesce(avg(t4.avgNecronomiconKills),0)AS avgNecronomiconKills30, + coalesce(avg(t4.avgAncientKills),0)AS avgAncientKills30, + coalesce(avg(t4.avgBuybackCount),0)AS avgBuybackCount30, + coalesce(avg(t4.avgObserverUses),0)AS avgObserverUses30, + coalesce(avg(t4.avgSentryUses),0)AS avgSentryUses30, + coalesce(avg(t4.avgLaneEfficiency),0)AS avgLaneEfficiency30, + coalesce(avg(t4.avgPurchaseTps),0)AS avgPurchaseTps30 + +FROM feature_store.dota_teams_player_0 AS t1 + +LEFT JOIN feature_store.dota_players_180 AS t2 +ON t1.dtReference = t2.dtReference +AND t1.idPlayer = t2.idPlayer + +LEFT JOIN feature_store.dota_players_90 AS t3 +ON t1.dtReference = t3.dtReference +AND t1.idPlayer = t3.idPlayer + +LEFT JOIN feature_store.dota_players_30 AS t4 +ON t1.dtReference = t4.dtReference +AND t1.idPlayer = t4.idPlayer + +-- WHERE t1.dtReference = '{date}' + +GROUP BY t1.dtReference, t1.idTeam, t1.descTeamName, t1.descTeamTag +ORDER BY t1.idTeam, t1.dtReference \ No newline at end of file diff --git a/src/06.workflows/data4u_dota.json b/src/06.workflows/data4u_dota.json index 24054b1..414c664 100644 --- a/src/06.workflows/data4u_dota.json +++ b/src/06.workflows/data4u_dota.json @@ -307,6 +307,40 @@ "existing_cluster_id": "0809-155233-nc569ju7", "timeout_seconds": 0, "email_notifications": {} + }, + { + "task_key": "fs_teams", + "depends_on": [ + { + "task_key": "fs_teams_player" + }, + { + "task_key": "fs_players_30" + }, + { + "task_key": "fs_players_90" + }, + { + "task_key": "fs_players_180" + } + ], + "notebook_task": { + "notebook_path": "src/03.silver/dota/feature_store/fs_ingestao", + "base_parameters": { + "table": "teams", + "window": "0", + "description": "Feature Store de times com médias das performances dos jogadores", + "id_fields": "dtReference,idTeam", + "partition_fields": "dtReference", + "date_start": "{{start_date}}", + "date_stop": "{{start_date}}", + "monthly": "False" + }, + "source": "GIT" + }, + "existing_cluster_id": "0809-155233-nc569ju7", + "timeout_seconds": 0, + "email_notifications": {} } ], "git_source": {