Al sinds mijn allereerste KScope in 2012 heb ik de behoefte om de lijst van sessies zoals deze door ODTUG online gepubliceerd worden bij kop en kont te pakken en te doen wat ik het beste kan met data: Er queries op los laten, in plaats van door pagina’s en pagina’s ervan te scrollen.
Als je dezelfde behoefte voelt om eenvoudig middels een SQL query, de sessies van KScope te vinden die aan jouw criteria voldoen, dan ben je op de juiste pagina beland.
Queries loslaten op de KScope site
Elk jaar opnieuw maakt ODTUG een fraaie website met onder andere de lijst van presentaties en een samenvatting van de inhoud ervan
En tegen de tijd dat KScope begint krijgen we normaal gesproken ook weer een nieuwe conference app.
Maar als ik naar zo’n webpagina kijk kan ik niet anders dan denken “De vragen die ik heb over deze data zouden zo veel eenvoudiger te beantwoorden zijn als het in een tabel in de database zou zitten”.
In 2012 heb ik daarom een eenvoudige package gebouwd die van de KScope website de broncode van de pagina met de presentaties uitleest, de relevante data er uit extraheert en deze presenteert als een pipelined tablefunction.
In 2013 heb ik hem verbouwd voor de site van dat jaar, en het jaar erna voor kscope14.
In 2015 heb ik de code zodanig gewijzigd dat het elke KScope waarvan de site nog in de lucht is ondersteunt.
De code kan verder naar beneden op deze pagina gedownload worden.
Disclaimer:
Houdt in gedachten,
Ik heb dit ontwikkeld omdat ik de data querybaar wilde hebben, en ik kan me voorstellen dat ik daar niet alleen in sta, Buiten dat heb ik gewoon veel lol aan beleefd aan het bouwen ervan.
Ik heb dit niet gepubliceerd om op te scheppen met mijn briljante code. Dat is het niet. Het is behoorlijk simpel, en door de afhankelijkheid van de structuur van de code van de webpaina, nogal instabiel.
Wijzigingen aan de pagina die ODTUG mogelijk toepast, kunnen mijn code in de huidige vorm onbruikbaar maken.
Als dat gebeurt zal ik het trachten te verhelpen en een nieuwe versie publiceren.
Als je er voor kiest om mijn code te gebruiken en op een dag bemerk je dat de boel niet meer werkt, laat het me dan alsjeblieft weten (misschien heb ik het zelf nog niet gemerkt), dan zal ik een gewijzigde versie voor de nieuwe layout van de webpagna beschikbaar stellen.
Ik zou nooit of te nimmer iets als dit bouwen om op te leveren naar een productie omgeving. Evenmin wil ik wie dan ook aanmoedigen om dat wel te doen.
Voorbeelden:
Onderstaande voorbeelden zijn voor de data van KScope15
Geef de functie het ‘nummer’ mee van de editie van KScope waar je in geïnteresseerd bent en de sessies worden geretourneerd.
Voor KScope15 is dat nummer uiteraard 15.
1 2 3 4 5 6 7 |
SELECT * FROM TABLE(ero$kscope_sessions.kscope_sessions(15)) ORDER BY starttime , session_id , topic , subtopic ; |
Nu kun je eenvoudig vragen beantwoorden als
– Welke sprekers hebben moeite hun presentatie in een sessie van een uur te proppen.
1 2 3 4 5 6 7 8 9 10 |
SELECT presenter , session_id , starttime , title , description FROM TABLE(ero$kscope_sessions.kscope_sessions(15)) WHERE UPPER(title) LIKE '%PART %' ORDER BY starttime , session_id ; |
– Welke sprekers van dit jaar hebben de laatste paar jaar niet een presentatie gegeven bij KScope.
1 2 3 4 5 6 7 8 9 10 11 12 |
SELECT presenter FROM TABLE(ero$kscope_sessions.kscope_sessions(15)) MINUS SELECT presenter FROM TABLE(ero$kscope_sessions.kscope_sessions(14)) MINUS SELECT presenter FROM TABLE(ero$kscope_sessions.kscope_sessions(13)) MINUS SELECT presenter FROM TABLE(ero$kscope_sessions.kscope_sessions(12)) ; |
Code
Zip bestand dat scripts bevat met alle create statements voor de package, types en ACL die nodig zijn om SQL queries uit te kunnen voeren op de kscope site. Gewoon uitpakken en driving_script.sql uitvoeren. De download bevat ook scripts voor materialized views (een voor elke ondersteunde kscope). De mviews heten MV_ERO_KSCOPE##_SESSIONS, waarbij ## staat voor het volgnummer van de betreffende kscope. Voer procedure ero$kscope_sessions.mv_refresh uit zonder parameters om alle kscope mviews te verversen. Geef een parameter mee (bijvoorbeeld 15) om alleen de mview voor die specifieke kscope te verversen. Na een verversing kan je de data van de mview veel sneller benaderen dan van de pipelined table function. Ververs opnieuw als (je vermoedt dat) er wijzigingen zijn in de sessies. |
||
Versie | Datum | Wijzigingen |
2017-03 | 21-05-2017 | Nieuwe versie. Wijzigingen:
|
2017-02 | 08-03-2017 | Nieuwe versie, kleine wijziging: html code voor bullets wordt nu vervangen door een asterisk (*). Alleen de package body is gewijzigd, en het versienummer in de specification. |
2017-01 | 28-12-2016 | Nieuwe versie ondersteunt KScope17 sessies Site bevat op dit moment nog geen datum/tijd gegevens,dus die worden uiteraard ook nog niet opgeleverd door de code. Zodra de datum/tijd gegevens gepubliceerd zijn zal i\de code, indien nodig, hierop aangepast worden. Plus: Functionaliteit toegevoegd die html ascii codes en sommige tags in session title en description afhandelt. |
2016-02 | 05-06-2016 | Nieuwe versie. In de lijst van sessies op de site was een ‘lege sessie’ verschenen waardoor bij geen enkele sessie nog de starttijd, einddtijd en sessie-id werd getoond. De package is aangepast zodat hij hier nu goed mee omgaat. |
2016-01 | 01-02-2016 | Nieuwe versie, ondersteunt KScope16 sessies De KScope site bevat inmiddels datum/tijd gegevens, code hoefde niet aangepast te worden, dus nog versie 2016-1 |
2015.03 | 21-05-2015 | – Nieuwe code om de gewijzigde broncode van de KScope site aan te kunnen. – materialized views + mv_refresh procedure geïntroduceerd. Data eenmalig ophalen, vaak querieen. |
2015.02 | 23-04-2015 | Geen code wijzigingen, Maar het $ teken is verwijderd uit de scriptnamen (niet de objectnamen!) omdat sommigen problemen hiermee hebben gerapporteer op unix/linux. |
2015.01 | 25-01-2015 | Zoals Kim aangaf: het vorige zip bestand was niet compleet 🙁 |
Statische tabel
Ik kan me voorstellen dat je liever een statische tabel hebt, of dat je niet de beschikking hebt over een schema met voldoende rechten om de acl te maken.
Om die reden heb ik een create table as select voor je uitgevoerd en biedt ik hier het resultaat aan in de vorm van een Oracle tabel en een Excel bestand:
Uiteraard zijn ze statisch. Kom hier dus terug voor een nieuwe versie als de sessielijst wijzigt, of …. download de pipelined table function 🙂
Deze twee downloads bevatten de KScope17 data die geldig was op 17 juni 2017
Let op, vanaf 21 mei 2017:
|
|
Excel bestand | Oracle tabel + insert statements |