Connectar Superset a una base de dades¶
Exercici superset-first-connection-annex.pdf · PDF
La primera vegada que jugues a un joc en línia, et pregunta coses abans de deixar-te entrar. Quin servidor? Quin món? El teu compte? La teva contrasenya? Si t'equivoques en una cosa, et quedes al vestíbul, mirant un missatge d'error.
Una base de dades fa exactament el mateix. A la pàgina anterior has vist que, dels sis tipus de font de dades, la base de dades relacional és la que més demana abans d'obrir-se. Avui aprens què demana, per què, i com llegir l'error quan la porta es queda tancada.
Després, travessaràs aquesta porta: posaràs un conjunt de dades real dins de la base de dades i li faràs la primera pregunta.
Què aprendràs
- Anomenar les cinc coses que necessita una connexió a una base de dades, més el driver, i dir per a què serveix cadascuna
- Llegir una cadena de connexió i trobar-hi cadascuna d'aquestes parts
- Deduir a partir d'un missatge d'error quina opció és errònia
- Carregar un fitxer CSV en una base de dades des de Superset
- Executar les teves primeres consultes a SQL Lab
- Evitar la trampa: pensar que Superset emmagatzema les teves dades, o que
localhostsempre vol dir "el meu ordinador"
Superset no té les teves dades¶
Comença per la imatge, perquè tota la resta en penja.
flowchart LR
B["<b>El teu navegador</b><br>el que veus i cliques"] -- "pàgina web" --> S["<b>Superset</b><br>(el client del joc)<br>es connecta, pregunta, dibuixa"]
S -- "SQL, a través<br>del driver" --> D[("<b>PostgreSQL</b><br>(el servidor del joc)<br>on viuen les files")]
D -- "files" --> S
Aquí hi ha tres jugadors, i són tres programes diferents:
| Programa | Al joc | Què fa | Què emmagatzema |
|---|---|---|---|
| El teu navegador | La pantalla | Mostra les pàgines de Superset | Res |
| Superset | El client del joc | Es connecta a la base de dades, envia preguntes, dibuixa les respostes | La seva configuració: usuaris, connexions desades, gràfics. No les teves files. |
| PostgreSQL | El servidor del joc | Guarda les taules i respon preguntes sobre elles | Les teves dades |
Un servidor de bases de dades és un programa que guarda dades en taules i respon preguntes sobre elles a qualsevol programa que s'hi connecti amb les dades correctes. PostgreSQL és el que fem servir.
Una connexió és el conjunt de dades que necessita un programa per arribar a un servidor de bases de dades i que el deixin entrar.
Superset és un client. Un client de joc sense cap servidor on unir-se només et mostra un menú bonic i res més. Així que la primera feina a Superset sempre és la mateixa: dir-li on és el servidor.
Compte: \"Superset emmagatzema les meves dades\"
No ho fa. Superset emmagatzema connexions i gràfics. Les files són a PostgreSQL. Si Superset desaparegués demà, les teves taules continuarien allà, i qualsevol altra eina amb les dades de connexió correctes les podria llegir. Ho veuràs per tu mateix al final d'aquesta unitat, amb Power BI.
Cinc coses i un traductor¶
Cada connexió a una base de dades, a totes les eines que faràs servir mai, demana les mateixes cinc coses. Aprèn-les una sola vegada.
| Opció | La pregunta a la qual respon | Al joc | Aspecte |
|---|---|---|---|
| Host | A quina màquina és la base de dades? | A quin servidor t'uneixes | Un nom o un nombre: db.example.com |
| Port | Quina porta d'aquella màquina? | Quina porta d'aquell servidor | Un nombre: 5432 |
| Database | Quina base de dades d'aquell servidor? | Quin món d'aquell servidor | Un nom: shop |
| User | Qui ets? | El teu compte | Un nom: your_user |
| Password | Ho pots demostrar? | La contrasenya del teu compte | Secreta. Mai no es mostra en una pàgina com aquesta. |
Tres d'aquestes paraules són noves:
- El host és el nom de xarxa o l'adreça de la màquina on s'executa el servidor de bases de dades.
- Un port és una porta numerada d'una màquina. Una màquina pot executar molts programes que escolten la xarxa, i cadascun espera darrere del seu propi nombre. La porta habitual de PostgreSQL és la 5432. La pàgina web de Superset en fa servir una altra, la 8088: no les confonguis.
- Un servidor de bases de dades pot contenir diverses bases de dades separades, com un servidor de joc que allotja diversos móns. Has de dir quina vols.
I després hi ha una sisena cosa, que cap formulari et demana d'escriure:
Un driver és un petit programari que permet que un programa parli amb un tipus concret de base de dades.
Superset parla SQL. Però PostgreSQL, MySQL i la resta esperen cadascun que aquest SQL arribi per la xarxa a la seva manera. El driver és el traductor. El driver de Superset per a PostgreSQL es diu psycopg2; per a MySQL en necessitaria un altre.
Compte: \"la contrasenya és correcta, per tant s'ha de connectar\"
No sense el driver. Si el traductor no està instal·lat, Superset no pot dir ni una paraula a aquella base de dades, per correcta que sigui la contrasenya. A Superset ho notes aviat: una base de dades el driver de la qual falta no apareix a la llista de bases de dades a les quals et pots connectar.
Les cinc en una línia: la cadena de connexió¶
Escriure cinc caselles és una manera de donar les dades. L'altra és una línia de text.
Una cadena de connexió és una sola línia que conté totes les dades d'una connexió, en un ordre fix.
Per a PostgreSQL a Superset té aquest patró:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
Amb valors inventats, perquè vegis on va cada part:
postgresql://your_user:your_password@db.example.com:5432/shop
| Peça | Opció |
|---|---|
postgresql:// |
El tipus de base de dades, que diu a Superset quin driver ha d'usar |
your_user |
Usuari |
your_password |
Contrasenya |
db.example.com |
Host |
5432 |
Port |
shop |
Base de dades |
Llegeix la puntuació i podràs descodificar qualsevol cadena de connexió: :// després del tipus de base de dades, : entre usuari i contrasenya, @ abans del host, : abans del port, / abans de la base de dades.
Una cadena de connexió és una contrasenya
Torna a mirar el segon exemple: la contrasenya és allà mateix, en text pla. Una cadena de connexió és una clau de tota la base de dades. No n'enganxis mai cap en un xat, una captura de pantalla, una pregunta en un fòrum o un fitxer que comparteixis. Els valors d'aquesta pàgina són inventats a propòsit; els teus te'ls donen a classe i s'hi queden.
On va a Superset¶
A Superset, una connexió es crea una sola vegada i després tothom qui fa servir aquell Superset treballa a través seu. A la teva VM de classe ja existeix, amb el nom Dades classe. Així és com se'n fa una, perquè sàpigues què estàs mirant.
| Pas | Fes això | Hauries de veure |
|---|---|---|
| 1 | Settings → Database Connections | La llista de connexions que Superset coneix |
| 2 | + Database, i tria PostgreSQL | Un formulari amb les caselles Host, Port, Database name, Username, Password i Display Name |
| 3 | Omple les cinc opcions, i un Display Name: l'etiqueta que veurà la gent | |
| 4 | Prem Connect | Superset prova la connexió. Si alguna dada és errònia, hi apareix un error. |
| 5 | Edita la connexió (icona del llapis) → Advanced → Security → marca Allow file uploads to database → Finish | A la llista: la connexió, el seu backend postgresql, i una marca sota File upload |
El pas 5 no és una de les cinc opcions. És un permís: un interruptor del costat de Superset que decideix què pot fer la gent a través d'aquesta connexió. Sense ell, ningú no pot carregar un fitxer en aquella base de dades des de Superset.
Així que la llista completa per "configurar l'accés" és: host, port, base de dades, usuari, contrasenya, driver i permisos.
Llegir l'error¶
Les connexions fallen. És normal, i el missatge d'error no és soroll: et diu fins on has arribat.
| Què veus | Fins on has arribat | L'opció que cal comprovar |
|---|---|---|
| El tipus de base de dades no és a la llista | A enlloc: no hi ha traductor | Driver |
| Un missatge que conté Connection refused | Has trucat, i no hi havia ningú darrere d'aquella porta | Host o port |
| Un missatge que diu que la contrasenya del teu usuari és incorrecta | Has arribat al servidor, i t'ha dit que no | Usuari o contrasenya |
| La connexió funciona, però no apareix al formulari de càrrega | Hi ets dins, però no tens permís per fer allò | Permís: Allow file uploads |
| La càrrega funciona, però la taula té una sola columna | No és cap problema de connexió | El separador del fitxer |
Quina és la millor notícia: connection refused o contrasenya incorrecta? Contrasenya incorrecta. Vol dir que el host i el port eren correctes i que un servidor ha respost. Ets a una errada de tecleig. Connection refused vol dir que encara no has trobat ni el servidor.
Compte: localhost no sempre és el teu ordinador
localhost és un nom de host especial que vol dir "aquesta mateixa màquina": la màquina on s'executa el programa que fa servir la paraula. També el pots trobar escrit com a nombre 127.0.0.1.
Quan tu escrius localhost al navegador, vol dir el teu ordinador. Però en un formulari de connexió, el programa que usarà la paraula és Superset, i Superset s'executa en un servidor. Així que allà localhost vol dir "busca la base de dades dins de la màquina on s'executa el mateix Superset". Si la base de dades és en un altre lloc, Superset truca a la seva pròpia porta, no hi troba ningú i informa de connection refused.
Al joc: "aquesta consola" sempre és la teva. Per arribar a la d'un amic, necessites el seu gamertag. El host és el gamertag.
Així que quan vegis connection refused, no en concloguis que la base de dades està apagada. Normalment està encesa, i el host és erroni.
Carregar un CSV a la base de dades¶
A la pàgina anterior has descarregat pokemon_df.csv. Un fitxer al teu disc és botí a la motxilla. Per consultar-lo amb SQL, s'ha de convertir en una taula de la base de dades.
Superset ho pot fer per tu: llegeix el fitxer i crea la taula a PostgreSQL, a través de la connexió.
| Pas | Fes això | Hauries de veure |
|---|---|---|
| 1 | + (a dalt a la dreta) → Data → Upload CSV to database | El formulari de càrrega |
| 2 | CSV file: tria pokemon_df.csv |
|
| 3 | Database: Dades classe |
Si no és a la llista, falta el permís Allow file uploads |
| 4 | Schema: public. No el deixis mai buit. |
Si es deixa buit, la càrrega falla amb schema "undefined" does not exist |
| 5 | Table name: pokemon. Curt, en minúscules, sense espais. |
|
| 6 | Delimiter: comprova'l amb el fitxer. El nostre fa servir una coma. | |
| 7 | Upload | Datasets ara llista pokemon |
Dues paraules noves:
- Un esquema (schema) és una carpeta de taules dins d'una base de dades.
publicés el que et dona PostgreSQL des del principi. - Un dataset és el nom que dona Superset a "alguna cosa de la qual puc construir gràfics". Aquí és una etiqueta que apunta a la teva taula nova. Coneixeràs els datasets a fons a Datasets i destí.
El pas 6 és on la pàgina anterior dona fruit. Si el teu fitxer fa servir ; entre valors i el formulari encara diu ,, la càrrega "funciona" i obtens una taula amb una sola columna molt ampla. I si els nombres fan servir una coma decimal, posa també File settings → Decimal character a ,.
Compte: \"la càrrega m'ha espatllat les dades\"
No ho ha fet. El fitxer està bé; a l'eina li han dit un separador o una marca decimal equivocats. Elimina la taula i torna-la a carregar amb les opcions correctes. No ha canviat res del fitxer original.
Una cosa que la càrrega fa en silenci: al nostre fitxer, un valor absent s'escriu amb les dues lletres NA. Superset carrega aquestes cel·les com a NULL, la manera que té la base de dades de dir "aquí no hi ha cap valor". Charmander només té un tipus, així que el seu type_2 és NULL. Aquest és el teu primer tast dels valors absents, el gran tema de la UT2.
Primeres preguntes a SQL Lab¶
SQL (Structured Query Language, llenguatge estructurat de consultes) és el llenguatge per fer preguntes a una base de dades relacional. Una pregunta s'anomena consulta.
SQL Lab és la pàgina de Superset on escrius una consulta, l'executes i en veus la resposta com a taula.
Obre SQL → SQL Lab. A l'esquerra tria la base de dades Dades classe i l'esquema public. Després fes tres preguntes, una a una, prement Run després de cadascuna.
Quantes files hi ha?
SELECT COUNT(*) FROM pokemon;
| count |
|---|
| 949 |
SELECT vol dir "mostra'm", FROM pokemon diu quina taula, i COUNT(*) compta files. 949 Pokémon: el mateix nombre que has comptat a l'editor de text. Ha arribat tot el fitxer.
Quin aspecte tenen les files?
SELECT * FROM pokemon LIMIT 10;
L'* vol dir "totes les columnes" i LIMIT 10 vol dir "para després de deu files". Obtens 10 files i 22 columnes. Aquestes són les quatre primeres files i algunes de les columnes:
| id | pokemon | height | weight | type_1 | type_2 | hp | attack |
|---|---|---|---|---|---|---|---|
| 1 | bulbasaur | 0.7 | 6.9 | grass | poison | 45 | 49 |
| 2 | ivysaur | 1 | 13 | grass | poison | 60 | 62 |
| 3 | venusaur | 2 | 100 | grass | poison | 80 | 82 |
| 4 | charmander | 0.6 | 8.5 | fire | NULL |
39 | 52 |
Executa sempre aquesta en una taula que no hagis vist mai. Costa un segon i et mostra els noms de les columnes, el tipus de valor de cadascuna, i sorpreses com aquell NULL.
Quin tipus colpeja més fort?
SELECT type_1, COUNT(*) AS n, ROUND(AVG(attack)) AS avg_attack
FROM pokemon
GROUP BY type_1
ORDER BY avg_attack DESC;
La resposta té 18 files, una per tipus. Les cinc primeres:
| type_1 | n | avg_attack |
|---|---|---|
| dragon | 39 | 109 |
| fighting | 31 | 99 |
| ground | 36 | 96 |
| steel | 30 | 93 |
| rock | 65 | 90 |
Llegeix-ho com una frase: per a cada tipus principal, compta els Pokémon i fes la mitjana del seu atac, i després ordena de la mitjana més alta a la més baixa. Els tipus dragó colpegen més fort, amb un atac mitjà de 109. El tipus més comú, l'aigua, té 126 Pokémon però queda molt avall de la llista amb una mitjana de 75.
No et preocupis si aquesta tercera consulta sembla molt. GROUP BY és l'única idea realment nova que conté, i té la seva pròpia pàgina: SQL Lab: grups.
Fixa't en què acaba de passar. Al joc de fabricació, això ha estat tota l'etapa 1: has trobat el botí (un CSV en un web), l'has portat a casa (la càrrega) i l'has emmagatzemat on hi pots treballar (una taula). I has fet una pregunta que un editor de text mai no podria respondre.
Prova-ho: la teva primera connexió¶
A la teva VM de classe, amb Superset obert al navegador:
| Pas | Fes això | Hauries de veure |
|---|---|---|
| 1 | Obre Settings → Database Connections i troba Dades classe |
Backend postgresql, i una marca sota File upload |
| 2 | Obre Datasets. Si pokemon no hi és, carrega pokemon_df.csv tal com s'ha explicat més amunt. |
pokemon a la llista |
| 3 | A SQL Lab, executa les tres consultes d'aquesta pàgina | 949; deu files; dragon al capdamunt amb 109 |
| 4 | Canvia la tercera consulta perquè faci servir type_2 en lloc de type_1 (als tres llocs) |
Una classificació diferent, amb fighting al capdamunt amb 112, i una fila on el tipus és NULL |
| 5 | Escriu, sense mirar: les cinc opcions d'una connexió, i la sisena cosa | Host, port, base de dades, usuari, contrasenya; i el driver |
Si has descarregat el teu propi conjunt de dades a la caça de dades obertes, carrega'l també, amb el seu propi nom de taula, i adapta la tercera consulta a la pregunta que has escrit a la fitxa.
Idees clau¶
- Superset és un client: es connecta, pregunta i dibuixa. Les teves files viuen al servidor de bases de dades (PostgreSQL), no a Superset.
- Una connexió necessita cinc coses: host, port, base de dades, usuari i contrasenya. El port habitual de PostgreSQL és el 5432.
- El driver és el traductor entre una eina i un tipus de base de dades. Sense driver, no hi ha connexió, ni tan sols amb la contrasenya correcta.
- Una cadena de connexió ho empaqueta tot en una sola línia, contrasenya inclosa. Tracta-la com un secret.
- Els missatges d'error diuen fins on has arribat: connection refused assenyala el host o el port; contrasenya incorrecta vol dir que ja has arribat al servidor.
localhostvol dir "la màquina on s'executa aquest programa". Per a Superset, és el seu propi servidor, no el teu ordinador.- Carregar un CSV crea una taula real a la base de dades. Comprova l'esquema i el delimitador al formulari. Després fes-li preguntes a SQL Lab.
Comprovació ràpida¶
1. Quina llista conté les cinc opcions d'una connexió a una base de dades?
- Host, port, driver, navegador, contrasenya
- Host, port, base de dades, usuari, contrasenya
- Fitxer, separador, codificació, full, capçalera
- Servidor, esquema, taula, columna, fila
Host (quina màquina), port (quina porta), base de dades (quin món), usuari i contrasenya (el teu compte). El driver és la sisena cosa, però no l'escrius al formulari: és programari que ha d'estar instal·lat.
2. Per a què serveix el driver?
- Emmagatzema la contrasenya perquè no l'hagis de tornar a escriure
- Fa que les consultes s'executin més de pressa
- Permet que un programa parli amb un tipus concret de base de dades
- Converteix fitxers CSV en taules
El driver és el traductor. Superset parla SQL, però cada tipus de base de dades l'espera a la seva manera per la xarxa. Sense el driver correcte, Superset no pot parlar amb aquella base de dades en absolut.
3. A la cadena de connexió postgresql://ana:s3cret@data.example.org:5432/library, quin és el host?
-
ana -
library -
data.example.org -
postgresql
El patró és postgresql://USER:PASSWORD@HOST:PORT/DATABASE. El host va després de l'@ i abans dels : del port. Aquí l'usuari és ana, el port és 5432 i la base de dades és library. I sí: la contrasenya es pot llegir enmig, per això una cadena de connexió és un secret.
4. Superset mostra un missatge que diu que la contrasenya del teu usuari és incorrecta. Què et diu això?
- El servidor de bases de dades està apagat
- El driver no està instal·lat
- El host i el port són correctes: has arribat al servidor i ha rebutjat l'inici de sessió
- El fitxer CSV té el separador equivocat
Per rebutjar una contrasenya, un servidor primer ha de respondre. Així que host i port estan bé, i el problema és a l'usuari o a la contrasenya. És millor notícia que connection refused, on encara no has trobat el servidor.
5. On s'emmagatzemen les 949 files de Pokémon després de carregar el CSV des de Superset?
- Dins de Superset, al costat dels gràfics
- Al teu navegador
- En una taula de la base de dades PostgreSQL
- Només al fitxer CSV original
Superset llegeix el fitxer i crea una taula a la base de dades, a través de la connexió. El mateix Superset només guarda la seva configuració: usuaris, connexions i gràfics. Qualsevol altra eina amb les dades de connexió correctes podria llegir aquesta taula.
6. Què retorna SELECT COUNT(*) FROM pokemon;?
- La primera fila de la taula
- Els noms de les columnes
- Un nombre: quantes files té la taula
- Totes les files de la taula
COUNT(*) compta files, així que la resposta és un sol nombre: 949. Per veure files escriuries SELECT * FROM pokemon LIMIT 10;.
7. Un amic fa servir Superset en un servidor per arribar a una base de dades MySQL d'un altre servidor anomenat botiga. La casella del host diu 127.0.0.1 i Superset respon connection refused. Tria les dues afirmacions que són certes.
-
127.0.0.1vol dir "aquesta mateixa màquina", així que Superset busca MySQL al seu propi servidor; el host hauria de serbotiga - La contrasenya és errònia: connection refused sempre vol dir una contrasenya incorrecta
- Superset també necessita tenir instal·lat un driver de MySQL, o no pot parlar amb MySQL en absolut
- MySQL no es pot usar des de Superset, només PostgreSQL
127.0.0.1 és localhost escrit com a nombre: la màquina on s'executa el programa. Superset ha trucat a la seva pròpia porta. Connection refused assenyala el host o el port, no la contrasenya. I cada tipus de base de dades necessita el seu propi driver: el de PostgreSQL no parla MySQL.
La porta és oberta i la taula ja hi és. Fins ara ho has demanat tot; a continuació aprendràs a demanar exactament les files que necessites: SQL Lab: filtres.