2017-06-27 5 views
2

Après avoir parcouru Skewed tables dans Hive, j'ai été confondu avec la façon dont les données sont stockées pour les tables asymétriques et la façon dont elles sont traitées pour les tables partitionnées. Quelqu'un peut-il indiquer clairement les différences avec exemples marqués à où ces deux conceptsSkew vs Partition dans Hive

Skewed Tables and Partitioned Tables

et où ils coïncident diffèrent? Veuillez fournir un exemple.

Répondre

1

Le but des tables asymétriques et partitionnées est le même, pour optimiser la requête. Cependant, la façon dont ils le font et quand ils sont applicables est un peu différent. Supposons que nous construisons un tracker de fitness comme Strava et que les données des utilisateurs nous soient constamment envoyées.

  • Partitioning: Il est tout à fait normal de partitionner ce type de données par date et heure comme /year=2017/month=10/day=12 etc. De cette façon, les filtres basés sur la date et l'heure seront très rapide par exemple.

SELECT col FROM table WHERE year=2017 AND month=10

  • Skewed table: Il peut arriver que certains des utilisateurs ne sont pas seulement envoyaient séance d'entraînement de gymnastique, mais aussi la marche étapes comptent, géo-localisation, balade à vélo, la consommation de calories, le sommeil et que non. Ce sont très peu d'utilisateurs, mais la quantité de données qu'ils envoient est très grande par rapport aux utilisateurs moyens. Donc, si vous voulez interroger par UserId, il serait lent:

SELECT col FROM table WHERE year=2017 AND month=10 AND userid=20

Cependant, le tableau biaisé peut aider ici. Disons que ces utilisateurs actifs étaient 20, 23, 25. Maintenant, vous pouvez créer des données de stockage comme:

/year=2017/month=10/day=12/userid=20
/year=2017/month=10/day=12/userid=23
/year=2017/month=10/day=12/userid=27
/year=2017/month=10/day=12/userid=others

Comme vous pouvez le voir, ces fanas de conditionnement physique ont obtenu leur propre répertoire. Cela entraînera une requête rapide lorsque vous exécutez la même requête ci-dessus (filtre par ID utilisateur).

Il y a un peu plus, refer to this documentation.