La fusion de Python et de SQL dans MonetDB est un bon début pour déplacer une grande partie de la logique métier dans le serveur de base de données. Cependant, la documentation actuelle contient quelques obstacles à franchir par un novice dans ce jeu. Considérez la fonction suivante:Gestion des UDF Python dans MonetDB
sql>select * from getsourceattributes('tables');
+---------------+
| c |
+===============+
| id |
| name |
| schema_id |
| query |
| type |
| system |
| commit_action |
| access |
| temporary |
+---------------+
et le tableau suivant pour recueillir quelques statistiques:
create table dummy(tbl string, col string, stat integer);
savoir Maintenant que PTBL est un tableau numpy, j'ai essayé les éléments suivants:
create function gatherStatistics(ptbl string)
returns string
language python {
for p in ptbl:
attr = _conn.execute("select * from getSourceAttributes('"+ str(p) +"');")
for col in attr :
stat = _conn.execute("select count(*) from "+ str(p) +";")
_conn_execute("insert into dummy values('"+ str(p)+"','"+ str(col) +"',"+ str(stat)+");")
return ptbl;
};
et appeler avec
select gatherstatistics('tables');
SELECT: no such table 't'
Python exception
3. attr = _conn.execute("select * from getSourceAttributes('"+ str(p) +"');")
4. for col in attr :
5. stat = _conn.execute("select count(*) from "+ str(p) +";")
6. _conn_execute("insert into dummy values('"+ str(p)+"','"+ str(col) +"',"+str(stat)+");")
7. return ptbl;
SQL Query Failed: ParseException:SQLparser:42S02!SELECT: no such table 't'
- ne sait pas d'où vient le 't'?
- Quelle est la mauvaise conception?