IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Utilisation incorrecte de Null


Sujet :

Requêtes et SQL.

  1. #21
    Rédacteur/Modérateur

    Avatar de User
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    8 425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 8 425
    Points : 20 002
    Points
    20 002
    Billets dans le blog
    67
    Par défaut
    Bonsoir,

    Il me semble en avoir parlé au début :

    Citation Envoyé par User Voir le message
    Bonsoir,

    Il faudrait voir si vous n'avez pas des valeurs nulles pour le champ [coll.dat_debt_comm] :

    La fonction CDate() risque de provoquer une erreur si vous lui passez une valeur nulle.

    Cdlt,
    à+

  2. #22
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    oui en effet, pas vu ... ou zappé

  3. #23
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm) AS Date_Debt_comm
    Qu'en sera t'il du
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDate([coll.dat_debt_comm])>=Date()-'9
    Merci d'avance

  4. #24
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    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'
    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 ...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CDate(IIf(IsNull([dat_debt_comm]),"0",dat_debt_comm))>=Date()-'9'
    idem pour le champ dur_reel_comm pour le Group By

  5. #25
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    Bonjour à tous,

    j'ai donc lancé la requête corrigée :

    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))
    Visiblement le message
    Citation Envoyé par Access
    utilisation incorrecte du NULL
    ne s'affiche plus mais un nouveau message apparait: (:
    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.
    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?
    Fichiers attachés Fichiers attachés

  6. #26
    Invité
    Invité(e)
    Par défaut
    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!

  7. #27
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    La Base est compactée lors de la fermeture. J'ai réésayé avec un Top 100 , le message d 'erreur persite!!

  8. #28
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    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 ?

  9. #29
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    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

  10. #30
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    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)

  11. #31
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    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

  12. #32
    Invité
    Invité(e)
    Par défaut
    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

  13. #33
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    Ok je vois mais je croyais que grâce à la jointure inner join cela simplifiait son travail et raccourcissait son traitement?
    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 ...

  14. #34
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    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?
    Fichiers attachés Fichiers attachés

  15. #35
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    mais c'est normal que cela mouline ... 27 millions d'enregistrements c'est énorme pour Access. Comment faut-il le traduire ?

  16. #36
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    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!
    Fichiers attachés Fichiers attachés

  17. #37
    Expert éminent sénior
    Avatar de tee_grandbois
    Homme Profil pro
    retraité
    Inscrit en
    Novembre 2004
    Messages
    8 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Novembre 2004
    Messages : 8 859
    Points : 14 977
    Points
    14 977
    Par défaut
    bonjour,
    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!
    toujours et encore la même réponse : 27 millions d'enregistrements cela semble être beaucoup trop pour Access.
    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 ?

  18. #38
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    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 ..

  19. #39
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 57
    Points : 27
    Points
    27
    Par défaut
    Bonjour,

    Bon je suis finalement passé par le SQL DIRECT dans Access. Cela résout mon problème.
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. erreur 94 utilisation incorrecte de null
    Par caossak dans le forum Général VBA
    Réponses: 2
    Dernier message: 24/06/2007, 12h00
  2. Réponses: 3
    Dernier message: 30/03/2007, 15h48
  3. Réponses: 6
    Dernier message: 03/07/2006, 09h26
  4. Utilisation incorrecte de Null ?
    Par pafi76 dans le forum Access
    Réponses: 6
    Dernier message: 28/06/2006, 10h40
  5. Utilisation incorrecte de Null ?
    Par illight dans le forum Access
    Réponses: 2
    Dernier message: 23/11/2005, 11h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo