La jointure de table avec le fichier .csv entraîne des champs nuls après la jointure

8

Semblable aux questions déjà posées sur les fichiers .dbf, j'essaie de joindre des fichiers .csv à une couverture .gdb ou shapefile dans QGIS. Les tables ajoutées à QGIS avant la jointure semblent correctes, mais une fois la jointure terminée, la table fusionnée a des valeurs NULL pour tous les champs joints. La même chose se produit avec une variété de tables différentes, que je me joigne à un fichier de formes ou à un fichier .gdb.

J'exécute QGIS 2.0.1 sur un OSX 10.8.5. Les fichiers de table d'origine sont contenus au format .mdb, j'ai donc acheté et utilisé la visionneuse MDB ACCDB pour les exporter vers .CSV Le fait qu'ils soient corrects lorsqu'ils sont vus séparément me porte à croire que le problème vient de la procédure de jointure, tables elles-mêmes.

Suggestions?

KMT
la source
Pouvez-vous vérifier que la colonne du fichier csv est du même type que la colonne à laquelle se joint le fichier de formes / gdb cible? Vous pouvez généralement voir les types de champs dans la fenêtre des propriétés de chaque couche en accédant à l' onglet Champs .
SaultDon
1
Aha - donc le fichier de formes a un champ entier, alors que tous les champs de la table sont des champs de chaîne. La conversion de .mdb en .csv aurait-elle perdu les types de champ? Puis-je simplement changer le type de champ dans la boîte de dialogue des propriétés?
KMT
Assurez-vous de vérifier si vous avez des correspondances exactes. J'ai eu ce problème même lorsque les types de champs correspondaient. Il s'avère que le problème était que j'avais un espace blanc en tête dans mes cordes. Ce problème a été résolu en créant un nouveau champ à l'aide de la trim(oldField)fonctionnalité QGIS .
Lauren

Réponses:

2

Les fichiers .csv dans QGIS importent par défaut toutes les données sous forme de chaînes. Vous devez créer un fichier texte .csvt qui indique à QGIS quelles colonnes doivent être spécifiées en tant que types de données.

A .csvt file contains only one line and the types for each column have to be quoted and comma separated, e.g.

"Integer","Real","String"

Cité de: http://anitagraser.com/2011/03/07/how-to-specify-data-types-of-csv-columns-for-use-in-qgis/

Vos données seront alors du même type et la jointure devrait fonctionner.

Amos Budde
la source
Merci @Amos Budde, j'essaierai également la route .csvt, mais il s'avère que j'ai essayé un autre fichier de formes et une table, tous deux avec des champs de chaîne, et ne fonctionne toujours pas - j'obtiens des valeurs nulles dans la table jointe . Mes données sont partagées ci-dessus - avez-vous une chance de faire un essai?
KMT
juste essayé avec un fichier .csvt et toujours pas de chance. Est-ce que ça marche pour toi?
le
2

Il est préférable de vous assurer que les deux champs ont le même type de données.

Le type de champ ne peut pas être modifié pour les fichiers de formes. Mais il est facile de créer un nouveau champ de texte vide et de le rendre égal au champ entier.

Vous pouvez utiliser une expression de calculatrice de champ qui ressemble à quelque chose: tostring( "INT_FIELD" )et simplement remplacer INT_FIELDpar le nom du champ entier réel.

Vous pouvez également facilement modifier une valeur d'attribut de couche CSV à partir du texte <-> nombre .


MISE À JOUR

Si vous obtenez des valeurs nulles, vous pouvez essayer de conserver la jointure, mais simplement fermer et rouvrir cette table d'attributs pour voir si les valeurs jointes sont là (ou même fermer / rouvrir QGIS).

J'ai pu joindre avec succès un fichier csv à un fichier de formes avec un mélange de types de champs, donc la chaîne vs l'entier ne devrait pas être le problème.


MISE À JOUR 2

On dirait que pour se débarrasser des valeurs nulles, elles doivent en fait avoir un enregistrement correspondant dans la table correspondante à partir de laquelle les jointures sont effectuées. Mais dans l'image ci-dessous, vous pouvez voir que certains ont un enregistrement correspondant:

jointures réussies en jaune

SaultDon
la source
Ok, même quand ce sont deux valeurs de chaîne, j'ai le problème des valeurs NULL dans la table jointe. D'autres pensées?
KMT
Pas de chance de fermer / ouvrir la table attributaire ou QGIS.
KMT
@KMT Avez-vous des données que vous pouvez partager pour que tout le monde puisse les tester?
SaultDon
Sûr. Shapefile sur dropbox.com/sh/jvbh2pafm2dreec/lr0GiFiq2t (en utilisant le fichier "Delta Covers"). Tableau sur dropbox.com/sh/qw25uxmaoo6pgqh/s8EKrU9DfL (en utilisant le tableau "Covers_Survey"). Ayez également un fichier .gdb (identique au fichier de formes) sur dropbox.com/sh/8vdalc68jjd2c7i/iFpsm7MgAD . Join basé sur les champs "Covlnk_text" (shapefile) et "Covlnktxt" (table).
KMT
1
@KMT Je ne pense pas que la conversion des types de données de champ aidera du tout, car les valeurs ne correspondent toujours pas. Je reviens aux données sources (la mdb) et compare les valeurs de la sortie csv à la table mdb (peut-être qu'elles ont été gâchées en cours de route). LibreOffice Base peut également ouvrir une mdb.
SaultDon