25 votes

Comment créer AWS Colle à la table, où les partitions sont différentes colonnes? ('HIVE_PARTITION_SCHEMA_MISMATCH')

Selon cette AWS Fil de discussion du Forum, personne ne sait comment les utiliser AWS de la Colle pour créer une AWS Athena tableau dont les partitions contiennent des schémas différents (dans ce cas, différents sous-ensembles de colonnes du schéma de la table)?

Pour le moment, quand je lance le robot sur ces données et ensuite faire une requête dans Athena, j'obtiens l'erreur 'HIVE_PARTITION_SCHEMA_MISMATCH'

Mon cas d'utilisation est:

  • Partitions représentent jours
  • Les fichiers représentent des événements
  • Chaque événement est un json blob dans un seul fichier s3
  • Un événement contient un sous-ensemble de colonnes (dépend du type de l'événement)
  • Le schéma de l'ensemble de la table est l'ensemble des colonnes pour tous les types d'événements (c'est correctement mis en place par la Colle sur chenilles)
  • Le schéma de chaque partition est le sous-ensemble de colonnes pour les types d'événements qui ont eu lieu ce jour (donc dans la Colle de chaque partition a peut-être un autre sous-ensemble des colonnes du schéma de la table)
  • Cette incohérence provoque l'erreur dans Athena je pense

Si je devais écrire manuellement un schéma que je pouvais faire cette amende car il n'y aurait qu'un schéma de la table, et les touches qui sont manquants dans le fichier JSON seraient traitées comme des valeurs Null.

Merci à l'avance!

33voto

Mario Filipović Points 446

J'ai eu le même problème, résolu par la configuration de robot pour la mise à jour des métadonnées de la table de partitions préexistantes:

enter image description here

3voto

Radford7821 Points 21

Cela m'a aidé. Affichage de l'image pour les autres cas, le lien est perdu enter image description here

0voto

ADV-IT Points 71

Il a également fixé mon problème! Si quelqu'un a besoin à disposition Cette Configuration Crawler avec Terraform voici donc comment j'ai fait:

resource "aws_glue_crawler" "crawler-s3-rawdata" {
  database_name = "my_glue_database"
  name          = "my_crawler"
  role          = "my_iam_role.arn"

  configuration = <<EOF
{
   "Version": 1.0,
   "CrawlerOutput": {
      "Partitions": { "AddOrUpdateBehavior": "InheritFromTable" }
   }
}
EOF
  s3_target {
    path = "s3://mybucket"
  }
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X