Dato i Excel til dato i mySQL

Excel brukes til å utveksle data, også data som burde deles i andre formater. En tid tilbake fikk jeg noen databasetabeller, delt opp i fem excel-dokumenter (slik at den som gav meg dataen kunne maile den). Jeg ville (naturlig nok?) ha dette over i mySQL. Av det lærte jeg et par triks.

1. Datoer i Excel må krangles over i mySQL, alternativt kan du gjøre dette:
Lag en ny kolonne for dato.
Legg inn følgende formel i første celle:
=TEKST(A1, YYYY-MM-DD)
(min versjon av Excel er på Norsk, hvis du har en utenlandsk versjon skal TEKST skrives som TEXT)

Så kommer enda en utfordring. For å duplisere formlen ville jeg vanligvis ha klikket og dratt det lille krysset nede i høyre hjørne av cellen, helt ned til nederste rad i kolonnen. Men kolonnen er et titalls-tusen rader lang! Å klikk og dra tar jo evig tid.

Ved å dobbeltklikke på dette likke krysset, så auto-kopieres formelen helt ned til siste rad. Nice.
Lagre som CSV.

2. Excel lagrer CSV-dokumenter med rare tegnsett.
For å importere til mySQL må tegnsettet være noe mySQL skjønner. Ved å bare large som CSV gikk dette i ball for meg. For å enkelt få kontroll på dette åpnet jeg den nylagde CVS-filen i Textmate og lagret den igjen, men da ved å endre tegnsettet til UTF-8 og linjeskift til LF (begge de anbefalte valgene i Textmate).

Vips, importer til mySQL
Jeg bruker Sequal Pro som GUI til mySQL. Her er det en egen «Import…» kommando under «File..».

Lage indexer i mysql med MAMP

Jeg har ikke funnet noen måte å lager indexer på i Sequel Pro, og med det har jeg alternativet klart; i terminalen.

Antagelsen er at mysql kjører i MAMP på OSX (10.5.8).

Åpne terminalen.
Skriv inn

/Applications/MAMP/Library/bin/mysql -uroot -p

kvitter med root-passordet som ut-av-boksen er root.

Velg en database:

mysql> use tabellnavn;

Vis tabellene i databasen (fint å vite hva som finnes):

mysql> show tables;

Sjekk om tabellen har en index:

mysql> show indexes from 2009analyse_int;

Lag en index

mysql> CREATE INDEX minNye_index ON tabellnavn(kolonne_du_vil_lage_index_på);

Done.

PS – Note to self: Behovet for indexer dukket for min del opp når jeg skulle hente ut ca 75.000 rader fra en tabell over nettartikler, hvorav noen var duplikater. For å hente ut kun én linje per unike url gjorde jeg følgende spørring:

SELECT *, COUNT(unik_id) AS duplikat
FROM min_fine_tabell
GROUP BY unik_id
ORDER BY duplikat DESC;

Da kommer duplikatene (med antall større enn 1) øverst, følger alle som er unike.

Sequel Pro avløser CocoaMySQL

CocoaMySQL er en fantastisk liten klient til DBMSet mySQL. For Mac. På tross av at cocoamysql alltid fikk jobben gjort, så ser videreføringen i Sequel Pro ut som et steg opp.

Sequel Pro GUI

Sequel Pro GUI.

At CocoaMySQL hverken var fullt av fancy funksjoner eller revolusjonerende teknologier var aldri noe hinder for arbeidsflyten for oss som stort sett jobber med databaser for web. Sequel Pro følger i samme fotspor. Det er først og fremst GUIet som er oppdatert til dagens standard for Mac, så vell som mindre endringer som nærmest likner bugfixer. Personlig er det bare muligheten til å kommentere tabellene som jeg virkelig savnet.

(som er uendelig nyttig hvis du lagrer verdier av typen verdiskalaer, f.eks. 0 – 10 hvor 10 er admin og tallene nedover beskriver ulike tilgangrettigheter, eller tallskalaer som kategoriserer variabler i et analyseopplegg).

En av de viktigste egenskapene til en SQLklient, er at den er enkel å bruke og sette opp. Typisk kjører jeg en lokal server på laptop’n min, og da stort sett en ferdig pakke ala MAMP. At det tar mindre enn 2 minutter å sette dette opp er målet, og dette viderefører Sequel Pro. Se f.eks. instruksene for MAMP/XAMP her.

Jeg snublet over Sequel Pro da cocoamysql, av en aller annen grunn, tok urimelig mye systemresurser i et stort datasett jeg jobber med. Sequel Pro kjører som det skulle være det neste på skjermen her, noe som er langt fram sannheten. At små detaljer som redigering av innhold i celler, reorganisering av tabellstrukturer og bedre håndtering av tabellenes metadata er betydelig smoothere enn før gjør opplevelsen sammenliknbar med forgjengeren, men samtidig et skritt opp. Jobber du med mysqldatabaser på mac, så er Sequel Pro absolutt verdt å ta en titt på. Open source er det også.

web-hospitari ved UiB

Overnatte på hospits.uib.no? – Her er det du trenger å vite!

UiB er visstnok i gang med et webhotellprosjekt for deg som trenger mer standard funksjonalitet som blog, wiki osv. Om relativt kort tid vil denne guiden kun være spennende for de sære.

Jeg trengte et webhotell til min masteroppgave, og måtte med det gjennom en prosess for å legges inn på hospits.uib.no. Det er noen enkle skritt som skal til, men de er ikke spesielt godt dokumentert. Dette dokumentet burde være nok til at din innsjekking går raskere enn min.

Hva kan du forvente av hospits.uib.no?

  • Et subdomene under uib.no
  • lagringsplass der html kan leses utenifra
  • php (de hadde også de innstikkene jeg trengte, imagemagic & phpGD)
  • mysql database
  • Lite eller ingen support, dette er nok en sport for de som vil lage sine egne problemer

Andre og mer konkrete løfter om ting du kan forvente, kan du lese om her.

Komme i gang:

  • Søke om å få plass på bs.uib.no (må være student/ansatt/ol med god grunn)
    Du ber også om et domenenavn nå, fint å ha tenkt dette ut først som sist.
  • Logge inn med ssh/sftp
    Du har fått opprettet en mappe som heter mittdomene.uib.no, den finner du under
    /www/sites/mittdomene.uib.no/. Denne mappen ligger et par hakk under din vanlige bruker (min er est040), og så inn i /www/sites/…
    Du logger inn med vanlig brukernavn + passord (samme som når du logger deg på en UiB-maskin), mot serveren hospits.uib.no
    Huske port 22 (ssh/sftp), ikke 21 som er vanlig ftp.
    sFTP er nesten likt som FTP

    Skjermbildet er av Transmit. sFTP er nesten likt som FTP. Husk port 22. Brukernavn og passord er den vanlige kombinasjonen din.

  • Last nå opp filene dine
  • Opprette database

    For å opprette database må en av dere logge på med kommandoline/ssh og kjøre kommandoen /usr/bin/db – denne oppretter en database med samme navn som brukernavnet til den som er logget på og du får sette et selvvalgt passord på denne. Kommandoen kan kjøres senere for å endre passord på databasen. Hver bruker får opprette en database på denne måten. Trengs det flere databaser kan dette opprettes på forespørsel, men da blir det mindre fleksibelt mtp eventuelle passordbytter. Det er ikke smart å ha samme passord på databasen som på resten av systemet.
    (sitat fra min dialog med brukerstøtte)

    Altså: logg på med terminalen, skrive inn /usr/bin/db, og følg instruksjonene. Ta passordproblematikken på alvor.

  • phpMyAdmin finner du på https://hospits.uib.no/phpMyAdmin/,
    jeg måtte gjette dette, du vet det nå. Brukernavn er ditt vanlige, passordet er det du satt på databasen noen skritt tidligere i guiden. (et annet enn ditt vanlige, helst.)

Dette skulle være mer enn nok til å få prosjektet ditt på lufta, men en kravstor fyr som meg forventer også å kunne koble seg til databasen fra en klient, f.eks. shift.

For å få dette til må du:

  1. Lage en ssh-tunell mot hospits.uib.no:
    Skriv inn ssh -L 8888:hospits.uib.no:3306 ditt-vanlige-brukernavn@hospits.uib.no i terminalen. Kvitter med ditt vanlige passord.
  2. Koble til mysql-klienten med følgende info:

    Brukernavn er ditt vanlige, passord det database-passordet, og databasenavnet er automatisk satt da du opprettet den, hvis det er du som opprettet databasen er det ditt brukernavn som er navnet på den.

Og vips kan du redigere databasen via et langt mer sexy GUI an hva phpMyAdmin har.

Lykke til?