oui en effet, pas vu ... ou zappé
Bonjour à tous,
Comment donc corriger ma requête initiale sur la date ?
Est ce qu'il faut ajouter une seconde condition sur celle ci ?
A savoir :Qu'en sera t'il du
Code : Sélectionner tout - Visualiser dans une fenêtre à part IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm) AS Date_Debt_commMerci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part CDate([coll.dat_debt_comm])>=Date()-'9
bonjour,
dans la mesure où elles peuvent contenir la valeur "Null", il faut tester les dates partout où elles seront utilisées (Expression, Where, Group By ...)Comment donc corriger ma requête initiale sur la date ? Est ce qu'il faut ajouter une seconde condition sur celle ci ? A savoir
IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm) AS Date_Debt_comm? Qu'en sera t'il du CDate([coll.dat_debt_comm])>=Date()-'9'
idem pour le champ dur_reel_comm pour le Group By
Code : Sélectionner tout - Visualiser dans une fenêtre à part CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm))>=Date()-'9'
Bonjour à tous,
j'ai donc lancé la requête corrigée :
Visiblement le message
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 SELECT T1.idnt_accs, T1.numr_telp_accs,T1.idnt_comp_serv_utls,T1.idnt_clnt,T1.cod_pta, coll.cod_typ_tick, coll.dur_reel_comm, coll.part_date AS mois_cour ,cod_catg_fin,coll.apn, IIF( IsNull ([dur_reel_comm]) ,0,dur_reel_comm) as DUREE_EM, CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm)) as DATE_DEBT,Count(*) AS idnt_tick INTO Table_usg_tick_suspension_coll_mobq FROM dom_usage_tag_usg_tick_coll_mobl_q AS coll inner join Table_usages_abusifs_voix_detection T1 on T1.idnt_accs = coll.idnt_accs and T1.numr_telp_accs=coll.msisdn WHERE coll.cod_typ_tick in ('01','03','08','09') AND CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm))>=Date()-'9' And CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm)) <Date()-'2' Group by T1.idnt_accs, T1.numr_telp_accs,T1.idnt_comp_serv_utls,T1.idnt_clnt,T1.cod_pta ,coll.cod_typ_tick, coll.dur_reel_comm, coll.part_date ,cod_catg_fin,coll.apn, IIF( IsNull ([dur_reel_comm]) ,0,dur_reel_comm) , CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm))ne s'affiche plus mais un nouveau message apparait: (:Envoyé par Access
Alors j'ai été regardé dans mon espace temporaire :Temp et je suis à 1,99Go. il me semble que je ne dépasse pas les 2G0. Ce qui m'etonne c'est que je fais la jointure avec la Table "Table_usages_abusifs_voix_detection T1" qui ne comprend que 40 acces(T1.idnt_accs) et il est donc impossible que ces 40 idnt_acces fassent les 2G0.? Est ce que vous voyez autre chose?impossible d'executer la requete, la taille du resultat de la requete est supérieure à la taille d'une base de donnéee(2Go)
ou bien l'espace de stockage temporaire est insuffisant pour stocker le résultat.
Bonjour,
La taille maximale d'une base de donnée Access est de 2Go espace réservé au compactage inclus.
Commence par compacter ta base.
Depuis 20 ans ma société utilise une application Access que j'ai développé (30 personnes) elle ne fait paS 500Mo!
Bonjour,
La Base est compactée lors de la fermeture. J'ai réésayé avec un Top 100 , le message d 'erreur persite!!
bonsoir,
combien d'enregistrements y a-t-il dans les tables externes Hive ?
je ne pense pas qu'Access utilise les index des tables attachées appartenant à des bases tierces. Du coup, sans index et avec des enregistrements conséquents les accès à ces tables seront très gourmands en ressources (d'où le message espace de stockage temporaire insuffisant).
Pourrais-tu copier un extrait des tables Hive en tables Access et lancer la requête avec pour vérifier si ce n'est pas à cause de ça ?
Bonsoir,
Je ne pense pas non plus. un extrait de table en question en PJ. La table en mode création n'indique pas d'index à priori. Lorsque je ne fais pas de jointure et que je prends les 40 idnt_accs de la Table que je souhaite joindre il m'affiche les résultats mais des que je fais une jointure avec cette table sur l'idnt_accs et même avec un TOP 25 il m'annonce l'insuffisance sur le disque temporaire....
il y a 26819208447 enregistrements
oui, mais un top 25 sur 26 819 208 447 enregistrements cela peut provoquer l'erreur malgré tout.
Access n'est pas prévu pour traiter autant d'enregistrements à la fois. J'ai eu des problèmes avec des tables Access correctement indexées contenant dix fois moins (2,3 millions d'enregistrements)
Bonjour,
1° Ok je vois mais je croyais que grâce à la jointure inner join cela simplifiait son travail et raccourcissait son traitement? En fait il ne supporte pas la jointure il me semble? car qd je saisis directement les ID il me sort les résultats et des que je l'appelle via la jointure il refuse? la jointure ne sert donc pas à faciliter le traitement? A quoi sert t'elle alors?
2°Quelle solution envisagée? car mon but ce n'est pas de saisir manuellement ces ID mais de lancer auto le traitement avec les données de la table de jointure
Bonjour,
Test ça sens garantie!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select * from table1,table2 Where table.id=table2.id
bonjour,
je me répète mais presque 27 millions d'enregistrements c'est énorme, il faut déjà pouvoir lire la table jusqu'au bout sans avoir une erreur de stockage temporaire, si tu ajoutes les fonctions de conversion ou de détection de valeurs nulles, cela ajoute encore du temps de calcul et si après cela il y a une jointure sur un champ non indexé (de la table HIVE) c'est pire encore: 27 millions x 40, on arrive à 108 millions de transactions ...Ok je vois mais je croyais que grâce à la jointure inner join cela simplifiait son travail et raccourcissait son traitement?
Bonjour à tous,
Quand j'exécute la requête de dysorthographie ,il m'affiche rapidement une vue des resultats(petit espoir ) mais après impossible d'enregistrer la requête ou de consulter l'affichage car il mouline sans arrêt..cela rejoint peut être le pb lié à l'index. Bon je ne suis pas encore sortir de là mais on avance .est ce qu'il ya une solution au pb de l'index ou autre?
bonjour,
mais c'est normal que cela mouline ... 27 millions d'enregistrements c'est énorme pour Access. Comment faut-il le traduire ?
Bonsoir,
1°)Si je resume à ce stade il n'y a pas de solution pour resoudre le pb d'index? C'est assez surprenant qu'une si grosse base de données n'a pas d'index? Y a t'il un moyen de trouver les index sur cette table dom_usage_tfa_enr_ticket_collect? c'est le champ idnt_accs(id client qui m'interesse)
2°)La même requête est lancée sur RSTUDIO VIA connexion ODBC HIVE et elle fonctionne bien, ce qui veut dire que Rstudio gère bien le pb d'index de la base de donnée. Du coup, c'est ACCESS qui lors de l'importation de la base dom_usage_tfa_enr_ticket_collect doit ne pas importer les index... dc un pb ds ACCESS
3°) Du coup j'essaie de trouver un contournement en ne me servant plus de la jointure , donc j'essaie de travailler dans la base dom_usage_tfa_enr_ticket_collect direcetement soit:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 conn <- odbcConnect("HIVE") REQ.USG_VOIX_ILLILITE<-paste0("create table bus_daf_dfrc.usages_voix_abusifs_suspension_Test AS SELECT Z.idnt_accs, CASE WHEN SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.dur_reel_comm END) IS NULL THEN 0 ELSE SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.dur_reel_comm END) END AS DUREE_EM, SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.IDNT_TICK END) AS NB_VX, SUM(Z.IDNT_TICK) AS NB_TOT, 100 * ((SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.IDNT_TICK END)) +0.001) / ((SUM(Z.idnt_tick)) +0.001) AS TX_VX, 'UA' AS TYPO,to_date('",Today,"') as Zdate_modif From dom_usage.tfa_enr_ticket_collect Z group by z.idnt_accs HAVING ((CASE WHEN SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.dur_reel_comm END) IS NULL THEN 0 ELSE SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.dur_reel_comm END) END > 23*3600) AND (100 * ((SUM(CASE WHEN Z.cod_typ_tick = '01' THEN Z.IDNT_TICK END)) +0.001) / ((SUM(Z.IDNT_TICK)) +0.001) > 98)) OR ((CASE WHEN SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.dur_reel_comm END) IS NULL THEN 0 ELSE SUM(CASE WHEN Z.cod_typ_tick_sfr = '01' THEN Z.dur_reel_comm END) END > 35*3600) AND (100 * ((SUM(CASE WHEN Z.cod_typ_tick_sfr= '01' THEN Z.IDNT_TICK END)) +0.001) / ( (SUM(Z.IDNT_TICK)) +0.001) > 95))") sqlQuery(conn,REQ.USG_VOIX_ILLILITE,as.is = TRUE) # as.is pour ne pas convertir les champs texte en numérique odbcCloseAll
cette requete passe correctement, j'essaie donc de la dupliquer sur Access ainsi:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 SELECT Z.idnt_accs, SUM(iif(USAG = '01',NZ(DUREE_EM,0),0)) AS DUREE_EM, SUM(iif(USAG = '01',NZ(IDNT_TICK,0),0)) AS NB_VX, SUM(Z.IDNT_TICK) AS NB_TOT 100 * sum(iif(USAG = '01',nz(IDNT_TICK,0),0)+0.001) / SUM(nz(IDNT_TICK,0) +0.001) AS TX_VX INTO Table_abusifs_voix_recidivistes_coll FROM ( SELECT HEB.idnt_accs,HEB.cod_typ_tick AS USAG, CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm)) AS DATE_DEBT, NZ([HEB.dur_reel_comm],0) AS DUREE_EM, Count(*) AS idnt_tick FROM dom_usage_tag_usg_tick_coll_mobl_q AS coll HEB.cod_typ_tick In ('01','03','08','09') And CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm))>=Date()-'9' And CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm))<Date()-'2' GROUP BY HEB.idnt_accs, HEB.cod_typ_tick, CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm)) , NZ([HEB.dur_reel_comm],0)) as Z Group by Z.idnt_accs HAVING SUM(iif(USAG = '01',NZ(DUREE_EM,0),0))> 23*3600) and (100 * sum(iif(USAG = '01',nz(IDNT_TICK,0),0)+0.001) / SUM(nz(IDNT_TICK,0) +0.001) >98)) or (SUM(iif(USAG = '01',NZ(DUREE_EM,0),0))> 35*3600) and (100 * sum(iif(USAG = '01',nz(IDNT_TICK,0),0)+0.001) / SUM(nz(IDNT_TICK,0) +0.001) >95))
Sauf que l'execution se passe bien dans ACCESS mais dure depuis presque 8h00, est ce que cette requête peut être optimisée svp? désolé de vous embêter encore!
bonjour,
toujours et encore la même réponse : 27 millions d'enregistrements cela semble être beaucoup trop pour Access.Sauf que l'execution se passe bien dans ACCESS mais dure depuis presque 8h00, est ce que cette requête peut être optimisée svp? désolé de vous embêter encore!
Pourquoi ne pas utiliser RSTUDIO pour faire tourner une requête création de table puis exporter le résultat sur Access, si c'est possible ?
Bonsoir,
le but c'est d'automatiser la tache tous les mois et de livrer à des utilisateurs(qui n'ont pas de connaissance sql) la base accesss pour analyse et exploitations des resultats ..
Bonjour,
Bon je suis finalement passé par le SQL DIRECT dans Access. Cela résout mon problème.
Merci à tous
Partager