Je voudrais m'assurer que j'ai tout fait correctement.sqlite insérer une nouvelle valeur dans la vue
Il existe un fichier journal 3Gb que je souhaite analyser. Afin d'exécuter toutes les requêtes dans ": memory:" pour booster les performances, je remplace les 10 colonnes de texte par des entiers pour chaque ligne de logs.
create table if not exists app (
id Integer primary key autoincrement,
value text unique
);
create table if not exists secret (
id integer primary key autoincrement,
value text unique
);
and 10 more tables
create table if not exists raw_log
(
id Integer primary key autoincrement,
app_id INTEGER,
secret_id INTEGER,
and 10 more _id columns
);
et de créer une vue pour la requête et un déclencheur pour insertion.
create view if not exists log as
Select
raw_log.id,
app.value as app,
secret.value as secret,
and 10 more ...
from raw_log, app, secret, ..... x 10
where raw_log.app_id = app_id.id and raw_log.secret = secret.id and ... x 10
CREATE TRIGGER insert_log
INSTEAD OF INSERT ON log
FOR EACH ROW BEGIN
INSERT OR IGNORE INTO app(value) VALUES(NEW.app);
INSERT OR IGNORE INTO secret(value) values(NEW.secret);
... x 10
INSERT INTO raw_log(app_id,secret_id, .... x 10)
select app.id, secret.id, x 10
from app, secret, x 10
where app.value = NEW.app
and secret.value = NEW.secret
and ... x 10
END;
questions:
L'insert par déclencheur semble fonctionne pas. Le nombre d'entités dans la table de journal est bien inférieur à ce qu'il devrait être, tandis que le nombre d'entités dans le secret et l'application semble correct.
Je pense que c'est parce qu'une nouvelle application et un secret apparaissent dans le journal. Ils peuvent être insérés dans la table sans problème. Toutefois, puisque ces modifications ne sont pas encore validées, la requête suivante ne peut pas référencer ces valeurs avec succès.
Si oui, comment puis-je résoudre ces requêtes?
INSERT INTO raw_log(app_id,secret_id, .... x 10)
select app.id, secret.id, x 10
from app, secret, x 10
where app.value = NEW.app
and secret.value = NEW.secret
and ... x 10
peut-être quelques-unes des colonnes où et ainsi nulls, lorsque vous faites un compte, n'a pas obtenu compté? l'avez-vous résolu? Je suis intéressé par votre solution. – cybork
avez-vous testé ma solution? –