Suite

Filtre SQL plus d'une table dans Cartodb.js

Filtre SQL plus d'une table dans Cartodb.js


J'ai un bouton sur ma carte où lorsque l'utilisateur clique, il filtrera 1 couche cartodb avec SQL. Je souhaite autoriser chaque clic sur un bouton à filtrer deux couches, chacune partageant le même champ et la même valeur. Voici la carte de travail

      

Si vous avez plusieurs couches et que vous extrayez les données à l'aide d'un fichier viz.json, la structure ducouchel'objet de rappel est :couche[0]est le fond de carte,couche[1]sont les couches statiques. Il y a une à plusieurs sous-couches danscalques[1]. Si vous utilisez createLayer, l'objet calque se compose de plusieurs sous-couches.

Si vous extrayez les données d'un fichier viz.json, votre situation est probablement la suivante :

cartodb.createVis('map','vizjson_link') .done(function(vis,layers) { var sublayer0 = layer[1].getSubLayer(0); var sublayer1 = layer[1].getSubLayer(1); $( "#change-sublayer0").on('click',function(e) { sublayer0.setSQL(sql_string0); }); $("#change-sublayer1").on('click',function(e) { sublayer1.setSQL(sql_string1); }); });

Nous avons également essayé de résoudre ce problème dans une leçon de Map Academy sur CartoDB.js : http://academy.cartodb.com/courses/03-cartodbjs-ground-up/lesson-3.html

Éditer: Il y a trois sous-couches danscalques[1]. Par conséquent, lorsque vous appelezcreateSelector(calques[1]), vous pouvez extraire ces sous-couches comme ci-dessus dans createSelector :

var sublayerSup = layer.getSubLayer(0); var sublayerPledge = layer.getSubLayer(1);

Vous pouvez ensuite modifier la requête appliquée à chacun d'eux dans lasidéclaration que vous avez configurée :

var querySup = "SELECT * FROM sup_dist_2011"; var queryPledge = "SELECT * FROM gage"; if(area !== 'all') { querySup = querySup + " où sup_dist_n = " + zone; queryPledge = queryPledge + " WHERE gage = " + otherAttribute; } // modifier la requête dans la couche pour mettre à jour la carte sublayerSup.setSQL(querySup); sublayerPledge.setSQL(queryPledge);

Vous devriez probablement aussi ajouter un autre attribut de données à vos éléments de liste afin de pouvoir en extraire des informations supplémentaires :

  • Tous les quartiers
  • Quartier 1
  • Quartier 2
  • Quartier 3
  • Quartier 4
  • Quartier 5
  • De nouveau à l'intérieurcreateSelectorvous pouvez extraire ces données comme ceci :

    var gage = $li.data('gage');

    Soit dit en passant, vous n'avez pas besoin d'utiliser levar sql = nouveau cartodb.SQL(… )car vous n'interagissez qu'avec les sous-couches, pas le composant SQL de CartoDB.js.

    Un peu de divagation, mais j'espère que ça t'aidera !


    KB4022619 - Informations sur la version de SQL Server 2014 Service Pack 3

    Cet article contient des informations importantes à lire avant d'installer Microsoft SQL Server 2014 Service Pack 3 (SP3). Il décrit comment obtenir le Service Pack, la liste des correctifs inclus dans le Service Pack, les problèmes connus et une liste des attributions de copyright pour le produit.

    Noter Cet article sert de source unique d'informations pour localiser toute la documentation relative à ce service pack. Il comprend toutes les informations que vous avez précédemment trouvées dans les notes de version et les fichiers Lisezmoi.txt.


    Tout d'abord, considérons le problème typique :

    Vous avez configuré une tâche d'agent pour qu'elle s'exécute à une heure planifiée, disons pendant la nuit. Bien sûr, tout se passe bien, jusqu'au jour où il échoue, inexplicablement. À ce stade, comme moi, vous cliquez probablement avec le bouton droit sur le travail en question et sélectionnez "Afficher l'historique", pour ouvrir la visionneuse de fichier journal. Ensuite, vous développez les détails de l'étape ayant échoué (en haut de la liste) et lisez les détails dans la partie inférieure de la boîte de dialogue.

    Ensuite, les ennuis commencent car les détails sont pour le moins massivement tronqués. En fait, ils n'affichent que les 1024 premiers caractères, et étant donné l'extrême verbosité de SSIS (car c'est ce que j'utilisais), cela signifiait qu'effectivement tout ce que j'avais était un préambule au problème, mais rien de très utile.

    Oui, je sais qu'une journalisation efficace dans SSIS peut me donner beaucoup d'informations de débogage, et bien sûr, j'ai ajouté une journalisation complète à tous mes packages SSIS. Pourtant, le temps et les efforts consacrés à la recherche des messages d'erreur étant donné l'urgence inévitable d'une situation d'échec de chargement de données m'ont incité à souhaiter quelque chose de plus simple, plus rapide et plus centralisé. Après tout, lors du débogage d'un processus invoqué par l'agent SQL Server, je ne veux pas avoir à creuser profondément dans les journaux spécifiques aux processus qui ont été appelés comme premier port d'appel.


    41 questions d'entretien SQL essentielles *

    Que fait UNION ? Quelle est la différence entre UNION et UNION ALL ?

    UNION fusionne le contenu de deux tables structurellement compatibles en une seule table combinée. La différence entre UNION et UNION ALL est que UNION omettra les enregistrements en double alors que UNION ALL inclura les enregistrements en double.

    Il est important de noter que les performances de UNION ALL seront généralement meilleures que celles de UNION , car UNION nécessite que le serveur effectue le travail supplémentaire de suppression des doublons. Ainsi, dans les cas où il est certain qu'il n'y aura pas de doublons, ou où avoir des doublons n'est pas un problème, l'utilisation de UNION ALL serait recommandée pour des raisons de performances.

    Répertoriez et expliquez les différents types de clauses JOIN pris en charge dans le SQL standard ANSI.

    Le SQL standard ANSI spécifie cinq types de clauses JOIN comme suit :

    INNER JOIN (alias "simple join") : renvoie toutes les lignes pour lesquelles il existe au moins une correspondance dans les DEUX tables. Il s'agit du type de jointure par défaut si aucun type JOIN spécifique n'est spécifié.

    LEFT JOIN (ou LEFT OUTER JOIN ): renvoie toutes les lignes de la table de gauche et les lignes correspondantes de la table de droite, c'est-à-dire que les résultats contiendront tout enregistrements de la table de gauche, même si la condition JOIN ne trouve aucun enregistrement correspondant dans la table de droite. Cela signifie que si la clause ON ne correspond à aucun enregistrement dans la table de droite, le JOIN retournera toujours une ligne dans le résultat pour cet enregistrement dans la table de gauche, mais avec NULL dans chaque colonne de la table de droite.

    RIGHT JOIN (ou RIGHT OUTER JOIN ) : renvoie toutes les lignes de la table de droite et les lignes correspondantes de la table de gauche. C'est exactement le contraire d'un LEFT JOIN, c'est-à-dire que les résultats contiendront tout enregistrements de la table de droite, même si la condition JOIN ne trouve aucun enregistrement correspondant dans la table de gauche. Cela signifie que si la clause ON ne correspond à aucun enregistrement dans la table de gauche, le JOIN retournera toujours une ligne dans le résultat pour cet enregistrement dans la table de droite, mais avec NULL dans chaque colonne de la table de gauche.

    FULL JOIN (ou FULL OUTER JOIN ) : renvoie toutes les lignes pour lesquelles il existe une correspondance dans l'une ou l'autre des tables. Conceptuellement, un FULL JOIN combine l'effet de l'application à la fois d'un LEFT JOIN et d'un RIGHT JOIN, c'est-à-dire que son jeu de résultats équivaut à effectuer une UNION des résultats des requêtes externes gauche et droite.

    CROSS JOIN : renvoie tous les enregistrements où chaque ligne de la première table est combinée avec chaque ligne de la deuxième table (c'est-à-dire renvoie le produit cartésien des ensembles de lignes des tables jointes). Notez qu'un CROSS JOIN peut être spécifié en utilisant la syntaxe CROSS JOIN ("notation de jointure explicite") ou (b) répertoriant les tables dans la clause FROM séparées par des virgules sans utiliser une clause WHERE pour fournir des critères de jointure ("notation de jointure implicite" ).

    Compte tenu des tableaux suivants :

    Quel sera le résultat de la requête ci-dessous ?

    Expliquez votre réponse et fournissez également une version alternative de cette requête qui évitera le problème qu'elle expose.


    Avant que tu commences

    Limitations et restrictions

    Le nombre réel de requêtes peut dépasser la valeur définie dans threads de travail max. auquel cas SQL Server regroupe les threads de travail afin que le prochain thread de travail disponible puisse gérer la demande. Un thread de travail est affecté uniquement aux demandes actives et est libéré une fois la demande traitée. Cela se produit même si la session/connexion utilisateur sur laquelle la demande a été faite reste ouverte.

    le threads de travail max. L'option de configuration du serveur ne limite pas tous les threads pouvant être générés à l'intérieur du moteur. Les threads système requis pour des tâches telles que LazyWriter, Checkpoint, Log Writer, Service Broker, Lock Manager ou autres sont générés en dehors de cette limite. Les groupes de disponibilité utilisent certains des threads de travail à partir du limite maximale de threads de travail mais aussi utiliser des threads système (voir Utilisation des threads par groupes de disponibilité ) Si le nombre de threads configurés est dépassé, la requête suivante fournira des informations sur les tâches système qui ont engendré les threads supplémentaires.

    Recommandations

    Cette option est une option avancée et ne doit être modifiée que par un administrateur de base de données expérimenté ou un professionnel SQL Server certifié. Si vous pensez qu'il y a un problème de performances, il ne s'agit probablement pas de la disponibilité des threads de travail. La cause est plus probablement liée aux activités qui occupent les threads de travail et ne les libèrent pas. Les exemples incluent les requêtes de longue durée ou les goulots d'étranglement sur le système (E/S, blocage, attente de verrouillage, attente de réseau) qui provoquent des requêtes de longue attente. Il est préférable de trouver la cause première d'un problème de performances avant de modifier le paramètre de threads de travail max. Pour plus d'informations sur l'évaluation des performances, voir Surveiller et régler les performances.

    Le regroupement de threads permet d'optimiser les performances lorsqu'un grand nombre de clients se connectent au serveur. Généralement, un thread de système d'exploitation distinct est créé pour chaque demande de requête. Cependant, avec des centaines de connexions au serveur, l'utilisation d'un thread par requête de requête peut consommer de grandes quantités de ressources système. le threads de travail max. L'option permet à SQL Server de créer un pool de threads de travail pour traiter un plus grand nombre de requêtes de requête, ce qui améliore les performances.

    Le tableau suivant montre le nombre de threads de travail maximum configurés automatiquement (lorsque la valeur est définie sur 0) en fonction de diverses combinaisons de processeurs, d'architecture informatique et de versions de SQL Server, à l'aide de la formule : Nombre maximum de travailleurs par défaut + ((processeurs logiques - 4) * Travailleurs par CPU).

    Nombre de processeurs Ordinateur 32 bits (jusqu'à SQL Server 2014 (12.x)) Ordinateur 64 bits (jusqu'à SQL Server 2016 (13.x) SP1) Ordinateur 64 bits (à partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x))
    <= 4 256 512 512
    8 288 576 576
    16 352 704 704
    32 480 960 960
    64 736 1472 1472
    128 1248 2496 4480
    256 2272 4544 8576

    Jusqu'à SQL Server 2016 (13.x) SP1, le Travailleurs par CPU dépendent uniquement de l'architecture (32 bits ou 64 bits) :

    Nombre de processeurs ordinateur 32 bits 1 ordinateur 64 bits
    <= 4 256 512
    > 4 256 + ((processeurs logiques - 4) * 8) 512 2 + ((processeurs logiques - 4) * 16)

    À partir de SQL Server 2016 (13.x) SP2 et SQL Server 2017 (14.x), le Travailleurs par CPU dépendent de l'architecture et du nombre de processeurs (entre 4 et 64, voire supérieur à 64) :

    Nombre de processeurs ordinateur 32 bits 1 ordinateur 64 bits
    <= 4 256 512
    > 4 et <= 64 256 + ((processeurs logiques - 4) * 8) 512 2 + ((processeurs logiques - 4) * 16)
    > 64 256 + ((processeurs logiques - 4) * 32) 512 2 + ((processeurs logiques - 4) * 32)

    1 À compter de SQL Server 2016 (13.x), SQL Server ne peut plus être installé sur un système d'exploitation 32 bits. Les valeurs d'ordinateur 32 bits sont répertoriées pour l'assistance des clients exécutant SQL Server 2014 (12.x) et versions antérieures. Nous recommandons 1 024 comme nombre maximal de threads de travail pour une instance de SQL Server qui s'exécute sur un ordinateur 32 bits.

    2 À partir de SQL Server 2017 (14.x), le Nombre maximum de travailleurs par défaut valeur est divisée par 2 pour les machines avec moins de 2 Go de mémoire.

    Lorsque tous les threads de travail sont actifs avec des requêtes de longue durée, SQL Server peut sembler ne pas répondre jusqu'à ce qu'un thread de travail se termine et devienne disponible. Bien que ce ne soit pas un défaut, cela peut parfois être indésirable. Si un processus semble ne pas répondre et qu'aucune nouvelle requête ne peut être traitée, connectez-vous à SQL Server à l'aide de la connexion administrateur dédiée (DAC) et arrêtez le processus. Pour éviter cela, augmentez le nombre de threads de travail max.

    Sécurité

    Autorisations

    Exécuter les autorisations sur sp_configure sans paramètre ou avec uniquement le premier paramètre sont accordés par défaut à tous les utilisateurs. Éxécuter sp_configure avec les deux paramètres pour modifier une option de configuration ou pour exécuter l'instruction RECONFIGURE, un utilisateur doit disposer de l'autorisation ALTER SETTINGS au niveau du serveur. L'autorisation ALTER SETTINGS est implicitement détenue par le administrateur système et administrateur du serveur rôles de serveur fixes.


    Recommandations et directives pour améliorer les performances de FILESTREAM

    La fonctionnalité FILESTREAM de SQL Server vous permet de stocker des données d'objets volumineux binaires varbinary(max) sous forme de fichiers dans le système de fichiers. Lorsque vous avez un grand nombre de lignes dans les conteneurs FILESTREAM, qui sont le stockage sous-jacent des colonnes FILESTREAM et des FileTables, vous pouvez vous retrouver avec un volume de système de fichiers contenant un grand nombre de fichiers. Pour obtenir les meilleures performances lors du traitement des données intégrées de la base de données ainsi que du système de fichiers, il est important de s'assurer que le système de fichiers est réglé de manière optimale. Voici quelques-unes des options de réglage disponibles du point de vue du système de fichiers :

    Vérification de l'altitude pour le pilote de filtre SQL Server FILESTREAM [par ex. rsfx0100.sys]. Évaluez tous les pilotes de filtre chargés pour la pile de stockage associée à un volume où la fonctionnalité FILESTREAM stocke les fichiers et assurez-vous que le pilote rsfx est situé au bas de la pile. Vous pouvez utiliser le programme de contrôle FLTMC.EXE pour énumérer les pilotes de filtre pour un volume spécifique. Voici un exemple de sortie de l'utilitaire FLTMC : filtres C:WindowsSystem32>fltMC.exe

    Vérifiez que le serveur a la propriété "dernier accès" désactivée pour les fichiers. Cet attribut de système de fichiers est conservé dans le registre :
    Nom de la clé : HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystem
    Nom : NtfsDisableLastAccessUpdate
    Tapez : REG_DWORD
    Valeur : 1

    Vérifiez que le nom 8.3 est désactivé sur le serveur. Cet attribut de système de fichiers est conservé dans le registre :
    Nom de la clé : HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlFileSystem
    Nom : NtfsDisable8dot3NameCreation
    Tapez : REG_DWORD
    Valeur : 1

    Vérifiez que le chiffrement du système de fichiers ou la compression du système de fichiers n'est pas activé dans les conteneurs de répertoire FILESTREAM, car ceux-ci peuvent introduire un niveau de surcharge lors de l'accès à ces fichiers.

    À partir d'une invite de commandes élevée, exécutez les instances fltmc et assurez-vous qu'aucun pilote de filtre n'est attaché au volume sur lequel vous essayez de restaurer.

    Vérifiez que les conteneurs de répertoire FILESTREAM ne contiennent pas plus de 300 000 fichiers. Vous pouvez utiliser les informations de la vue catalogue sys.database_files pour savoir quels répertoires du système de fichiers stockent les fichiers liés à FILESTREAM. Cela peut être évité en ayant plusieurs conteneurs. (Voir la puce suivante pour plus d'informations.)

    Avec un seul groupe de fichiers FILESTREAM, tous les fichiers de données sont créés dans le même dossier. La création de fichiers d'un très grand nombre de fichiers peut être affectée par des index NTFS volumineux, qui peuvent également devenir fragmentés.

    Avoir plusieurs groupes de fichiers devrait généralement aider à cela (l'application utilise le partitionnement ou a plusieurs tables, chacune allant à son propre groupe de fichiers).

    Avec SQL Server 2012 et les versions ultérieures, vous pouvez avoir plusieurs conteneurs ou fichiers sous un groupe de fichiers FILESTREAM, et un schéma d'allocation circulaire s'appliquera. Par conséquent, le nombre de fichiers NTFS par répertoire diminuera.

    La sauvegarde et la restauration peuvent devenir plus rapides avec plusieurs conteneurs FILESTREAM, si plusieurs volumes de stockage de conteneurs sont utilisés.

    SQL Server 2012 prend en charge plusieurs conteneurs par groupe de fichiers et peut rendre les choses beaucoup plus faciles. Aucun schéma de partitionnement compliqué n'est nécessaire pour gérer un plus grand nombre de fichiers.

    Le NTFS MFT peut devenir fragmenté, ce qui peut entraîner des problèmes de performances. La taille réservée MFT dépend de la taille du volume, vous pouvez donc ou non rencontrer cela.

    Vous pouvez vérifier la fragmentation MFT avec defrag /A /V C: (changez C: par le nom du volume réel).

    Vous pouvez réserver plus d'espace MFT en utilisant le jeu de comportements fsutil mftzone 2.

    Les fichiers de données FILESTREAM doivent être exclus de l'analyse du logiciel antivirus.

    Windows Server 2016 active automatiquement Windows Defender. Assurez-vous que Windows Defender est configuré pour exclure les fichiers Filestream. Ne pas le faire peut entraîner une diminution des performances des opérations de sauvegarde et de restauration.


    Quelques commentaires sur la méthode d'import .csv

    • J'ai tapé COPY et pas seulement COPY car mon utilisateur SQL n'a pas les privilèges SUPERUSER, donc techniquement, je ne pouvais pas utiliser la commande COPY (c'est une chose SQL). Taper COPY à la place est la solution de contournement la plus simple — mais la meilleure solution serait de vous donner les privilèges SUPERUSER puis d'utiliser la commande COPY d'origine. (Dans cette vidéo commençant à 2:55, je montre comment donner des privilèges SUPERUSER à votre utilisateur SQL.)
    • Pourquoi n'avons-nous pas fait la COPIE dans notre outil de gestion SQL ? Même raison : si vous ne disposez pas des privilèges SUPERUSER, vous ne pouvez pas exécuter la commande COPY à partir d'un outil SQL, uniquement à partir de la ligne de commande. Si vous suivez la vidéo que j'ai liée au point précédent, vous pourrez exécuter la même instruction COPY à partir de pgadmin ou de SQL Workbench.
    • Le '/home/dataguy/test_results.csv' est l'emplacement du fichier et le nom du fichier, ensemble. Encore une fois, nous avons trouvé l'emplacement en utilisant la commande pwd dans le bon dossier.
    • Et enfin : si vous n'êtes pas à l'aise avec ces étapes de ligne de commande, lisez les premiers articles de ma série d'articles Bash for Data Analytics.

    Et boum, les données sont copiées d'un fichier csv dans notre table SQL.
    Exécutez cette requête à partir de votre outil de requête SQL :

    SELECT * FROM test_results


    Comment utiliser des expressions dans l'instruction SQL SELECT ?

    Les expressions combinent de nombreux opérateurs arithmétiques, elles peuvent être utilisées dans les clauses SELECT, WHERE et ORDER BY de l'instruction SQL SELECT.

    Ici, nous expliquerons comment utiliser des expressions dans l'instruction SQL SELECT. À propos de l'utilisation des expressions dans les clauses WHERE et ORDER BY, elles seront expliquées dans leurs sections respectives.

    Les opérateurs sont évalués dans un ordre de priorité spécifique, lorsque plusieurs opérateurs arithmétiques sont utilisés dans une expression. L'ordre d'évaluation est : parenthèses, division, multiplication, addition et soustraction. L'évaluation est effectuée de la gauche vers la droite de l'expression.


    Modélisation des menaces

    • Les attaques par injection SQL permettent aux attaquants d'usurper l'identité, de falsifier des données existantes, de provoquer des problèmes de répudiation tels que l'annulation de transactions ou la modification de soldes, de permettre la divulgation complète de toutes les données sur le système, de détruire les données ou de les rendre autrement indisponibles, et de devenir administrateurs du serveur de base de données.
    • L'injection SQL est très courante avec les applications PHP et ASP en raison de la prévalence d'interfaces fonctionnelles plus anciennes. En raison de la nature des interfaces de programmation disponibles, les applications J2EE et ASP.NET sont moins susceptibles d'avoir facilement exploité les injections SQL.
    • La gravité des attaques par injection SQL est limitée par les compétences et l'imagination de l'attaquant et, dans une moindre mesure, par les contre-mesures de défense en profondeur, telles que les connexions à faible privilège au serveur de base de données, etc. En général, considérez l'injection SQL comme une gravité d'impact élevée.

    Exemple SQL COUNT ALL

    Jetons un coup d'œil à la table des clients.

    Pour compter tous les clients, vous utilisez la requête suivante :

    La requête suivante renvoie le nombre de pays à l'exception des valeurs NULL :