0
votes

Fichier interne mis en scène CSV.GZ Donner une erreur que le fichier ne correspond pas à la taille de la table correspondante?

J'essaie de copier un fichier CSV.GZ dans un tableau que j'ai créé pour commencer à analyser les données d'emplacement pour une carte. Je rencontrais une erreur qui dit qu'il y a trop de caractères et je devrais ajouter une option on_error. Cependant, je ne suis pas sûr que cela aidera à charger les données, pouvez-vous jeter un coup d'œil?

Source de données: https://data.world/cityofchicago/array-of-things-locations p>

p>

CREATE OR REPLACE TABLE ARRAYLOC(name varchar, location_type varchar, category varchar, notes varchar, status1 varchar, latitude float, longitude varchar, location varchar);

COPY INTO ARRAYLOC
   FROM @staged/array-of-things-locations-1.csv.gz;
 
 CREATE or Replace FILE FORMAT r_csv
   TYPE = "CSV"
   COMPRESSION = "GZIP"
   FILE_EXTENSION= 'csv.gz'
   SKIP_HEADER = 1
   ERROR_ON_COLUMN_COUNT_MISMATCH=FALSE
   EMPTY_FIELD_AS_NULL = TRUE;
 
 create or replace stage staged
    file_format='r_csv';
    
copy into ARRAYLOC from @~/staged 
   file_format = (format_name = 'r_csv');
   
SELECT * FROM ARRAYLOC LIMIT 10;


0 commentaires

3 Réponses :


3
votes

Votre erreur ne dit pas que vous avez trop de caractères, mais que votre fichier comporte 8 colonnes et votre table dispose de 9 colonnes. Il ne sait donc pas comment aligner les colonnes du fichier dans la table dans la table.

Vous pouvez énumérer les colonnes spécifiquement à l'aide d'une sous-requête dans votre Copier dans Déclaration.

notes:

  • Les colonnes du fichier sont basées sur la position, de sorte que 1 $ est la première colonne du fichier, 2 $ est la seconde, etc ....
  • Vous pouvez mettre les colonnes du fichier dans n'importe quel ordre que vous devez correspondre à votre table.
  • Vous aurez besoin de trouver la colonne qui ne dispose pas de données dans le fichier et de le remplir avec null ou une valeur par défaut. Dans mon exemple, je suppose que c'est la dernière colonne et je vais mettre l'horodatage actuel.
  • Il aide à énumérer les colonnes de la table derrière le nom de la table, mais cela n'est pas requis.

    Exemple: xxx

    Je conseillerai contre la modification du error_on_column_count_mismatch Paramètre, cela pourrait entraîner des données se terminant dans la mauvaise colonne de la table. Je conseillerais également de changer le paramètre on_error car je pense qu'il est préférable d'être alerté de telles erreurs plutôt que de les supprimer.


1 commentaires

Donc, cela a fonctionné après avoir retiré le courant actuel_timettamp (), mais n'affué aucune donnée. Je devais mettre à jour les données.



1
votes

Oui, définir cette option devrait aider. De La documentation :

error_on_column_count_mismatch = true | FAUX Utilisation: Chargement des données uniquement

Définition: Boolean qui spécifie s'il faut générer une erreur d'analyse Si le nombre de colonnes délimitées (i.e. champs) dans un fichier d'entrée ne fait ne correspond pas au nombre de colonnes dans la table correspondante.

Si défini sur False, une erreur n'est pas générée et la charge continue. Si Le fichier est chargé avec succès:

Si le fichier d'entrée contient des enregistrements avec plus de champs que des colonnes dans la table, les champs correspondants sont chargés par ordre d'occurrence dans Le fichier et les champs restants ne sont pas chargés.

Si le fichier d'entrée contient des enregistrements avec moins de champs que les colonnes de La table, les colonnes non correspondantes de la table sont chargées avec NULL valeurs.

Cette option suppose que tous les enregistrements dans le fichier d'entrée sont les mêmes. longueur (c'est-à-dire un fichier contenant des enregistrements de la longueur variable retourner un Erreur quelle que soit la valeur spécifiée pour ce paramètre).

Assumez donc que vous allez bien avec Obtenir des valeurs null pour la colonne manquante de vos données d'entrée, vous pouvez utiliser error_on_column_count_mismatch = false pour charger le fichier avec succès.


1 commentaires

Cela a aidé avec l'inadéquation, mais en vérité, j'ai fini par nettoyer les données.



0
votes

Lors de la visualisation de cette table directement sur DATA.WORLD, il y a des colonnes nommées à la fois emplacements et emplacement_2 avec des données identiques. On dirait que l'affichage est erroné, car lors du téléchargement du CSV, il ne dispose que d'une seule colonne .

Je soupçonne si vous modifiez votre Créer ou remplacer La déclaration suivante qui omet la création de emplacement_2 , vous arriverez là où vous voulez aller: xxx


1 commentaires

C'était la première erreur, qui a réparé cela, mais j'avais également manqué beaucoup plus de nettoyage des données. Donc, je viens de supprimer le fichier de la scène et de commencer.