Quelle est la différence entre le partitionnement et la création de compartiments d'une table dans la Ruche ?
Je sais que les deux est effectuée sur une colonne dans la table, mais comment est-ce que chaque opération différents.
Vous devez vous connecter pour publier un commentaire.
Partitionnement de données est souvent utilisé pour la distribution de la charge à l'horizontale, ce qui a d'avantage de performances, et les aide dans l'organisation des données dans une logique de mode. Exemple: si nous avons affaire à un grand
employee
table et souvent exécuter des requêtes avec desWHERE
clauses de restreindre les résultats à un pays particulier ou d'un département . Pour accélérer la réponse à la requête de table de la Ruche peut êtrePARTITIONED BY (country STRING, DEPT STRING)
. Le partitionnement des tables de change le fonctionnement de la Ruche de structures de stockage des données et de la Ruche va maintenant créer des sous-répertoires reflétant la structure de partitionnement commeSi les limites de la requête pour l'employé de
country=ABC
, il suffira de scanner le contenu d'un répertoirecountry=ABC
. Cela peut améliorer considérablement les performances de la requête, mais seulement si le schéma de partitionnement reflète commune de filtrage. Partitionnement fonctionnalité est très utile dans la Ruche, cependant, une conception qui crée trop de partitions peuvent optimiser certaines requêtes, mais préjudiciables pour d'autres requêtes. L'autre inconvénient est d'avoir trop de partitions est le grand nombre de Hadoop fichiers et répertoires créés inutilement et les frais généraux de NameNode, car il doit garder toutes les métadonnées du système de fichiers dans la mémoire.Écopage est une autre technique de décomposition des ensembles de données dans des pièces plus faciles à gérer. Par exemple, supposons qu'une table à l'aide de
date
que le niveau supérieur de la partition etemployee_id
que le deuxième niveau de la partition conduit à de trop nombreuses petites partitions. Au lieu de cela, si nous seau à la table des employés et l'utilisationemployee_id
que l'écopage colonne, la valeur de cette colonne sera haché par un définis par l'utilisateur nombre dans des seaux. Les enregistrements avec le mêmeemployee_id
seront toujours stockées dans le même seau. En supposant que le nombre deemployee_id
est beaucoup plus grande que le nombre de compartiments, chaque compartiment aura beaucoup deemployee_id
. Lors de la création de la table, vous pouvez spécifier commeCLUSTERED BY (employee_id) INTO XX BUCKETS;
où XX est le nombre de compartiments . Écopage a plusieurs avantages. Le nombre de compartiments est fixé de sorte qu'il ne varient pas en fonction de données. Si les deux tables sont placées dans un compartiment paremployee_id
, la Ruche peut créer une logique d'échantillonnage. Écopage aussi le sida en faisant efficace la carte-côté se joint etc.Il y a quelques détails manquants dans les explications précédentes.
Pour mieux comprendre comment le partitionnement et la création de compartiments fonctionne, vous devriez regarder la façon dont les données sont stockées dans la ruche.
Disons que vous avez une table
puis ruche va stocker les données dans une hiérarchie de répertoire comme
Donc, vous devez être prudent lors du partitionnement, parce que si vous avez par exemple la partition par employee_id et que vous avez des millions de salariés, vous finirez par avoir des millions de répertoires dans votre système de fichiers.
Le terme "cardinalité " désigne le nombre de valeur possible d'un champ peut avoir. Par exemple, si vous avez un champ pays, les pays dans le monde sont environ 300, de sorte que la cardinalité serait ~300. Pour un domaine comme 'timestamp_ms', qui change à chaque milliseconde, la cardinalité peut être des milliards. En général, lors du choix d'un terrain pour le partitionnement, il ne devrait pas avoir une grande cardinalité, parce que vous vous retrouverez avec beaucoup trop de répertoires dans votre système de fichiers.
De Clustering aka écopage sur l'autre main, sera le résultat avec un nombre fixe de fichiers, puisque vous ne spécifiez le nombre de compartiments. Ce hive faire est de prendre le champ, de calculer une valeur de hachage et attribuer un enregistrement de ce seau.
Mais qu'advient-il si vous utilisez disons 256 seaux et le terrain, vous êtes écopage sur a un faible cardinalité (par exemple, c'est un état AMÉRICAIN, donc peut être que de 50 valeurs différentes) ? Vous aurez 50 seaux de données, et 206 seaux avec pas de données.
Quelqu'un a déjà parlé de la façon dont les partitions peuvent réduire considérablement la quantité de données que vous interrogez. Donc, dans mon exemple de tableau, si vous voulez interroger uniquement à partir d'une certaine date, le partitionnement par année/mois/jour va considérablement réduire la quantité de IO.
Je pense que quelqu'un a également parlé de la façon dont la création de compartiments peuvent accélérer les jointures avec les autres tables qui ont exactement la même écopage, donc, dans mon exemple, si vous êtes à joindre deux tables de la même employee_id, la ruche peut faire la jointure seau par seau (encore mieux si ils sont déjà triés par employee_id car il va mergesort les pièces qui sont déjà triés, qui fonctionne en temps linéaire aka O(n) ).
Ainsi, la création de compartiments fonctionne bien lorsque le terrain a une cardinalité élevée et que les données sont réparties de façon égale entre les seaux. Partitionnement fonctionne mieux lorsque la cardinalité de la segmentation du champ n'est pas trop élevé.
Aussi, vous pouvez partition sur plusieurs champs, avec un ordre (année/mois/jour est un bon exemple), tandis que vous pouvez seau sur un seul champ.
Je pense que je suis en retard pour répondre à cette question, mais de garder à venir dans mon alimentation.
Navneet a fourni une excellente réponse. En ajoutant à cela visuellement.
Partitionnement aide à l'élimination des données, si elle est utilisée dans la clause where, où, comme la création de compartiments aide dans l'organisation des données dans chaque partition en plusieurs fichiers, de sorte que même jeu de données est toujours écrite dans le même seau. Aide beaucoup à se joindre à des colonnes.
Imaginons que vous ayez une table avec cinq colonnes, nom, server_date, some_col3, some_col4 et some_col5. Supposons que, vous avez partitionné le tableau de la server_date et placées dans un compartiment sur nom colonne de 10 seaux, la structure de votre fichier devrait ressembler à quelque chose comme ci-dessous.
Ici server_date=xyz est la partition et 000 fichiers sont les compartiments dans chaque partition. Les seaux sont calculées en fonction de certaines fonctions de hachage, de sorte que les lignes avec nom=Sable la volonté de toujours aller dans le même seau.
Ruche De Partitionnement:
Partition divise grande quantité de données en plusieurs tranches en fonction de la valeur d'une colonne de table(s).
Supposons que vous êtes à stocker des informations de personnes dans le monde entier répartis dans 196 pays couvrant environ 500 crores d'entrées. Si vous voulez interroger les gens à partir d'un pays en particulier (cité du Vatican), en l'absence de partitionnement, vous devez analyser tous les 500 crores de participations, même pour aller chercher de mille entrées d'un pays. Si vous avez une partition de la table selon les pays, vous pouvez affiner processus de requête par la simple vérification des données pour un seul pays de la partition. La ruche partition crée un répertoire séparé pour une colonne(s) de valeur.
Pour:
Contre:
De La Ruche De La Création De Compartiments:
Écopage se décompose de données plus faciles à gérer ou des parties égales.
Avec le partitionnement, il ya une possibilité que vous pouvez créer de multiples petites partitions en fonction des valeurs de la colonne. Si vous optez pour la création de compartiments, vous limitez le nombre de compartiments pour stocker les données. Ce nombre est défini lors de la création de la table des scripts.
Pros
Contre
La différence est écopage divise les fichiers par Nom de Colonne, et partitionnement divise les fichiers sous Par une valeur particulière à l'intérieur de la table de
J'espère que je définis correctement
Avant d'aller dans
Bucketing
, nous avons besoin de comprendre ce quePartitioning
est. Prenons le tableau ci-dessous à titre d'exemple. Note que j'ai donnée à seulement 12 enregistrements dans l'exemple ci-dessous pour les débutants niveau de compréhension. En temps réel scénarios, vous pouvez avoir des millions d'enregistrements.PARTITIONNEMENT
---------------------
Partitioning
est utilisé pour obtenir les performances tout en interrogeant les données. Par exemple, dans le tableau ci-dessus, si nous écrire ci-dessous sql, il faut analyser tous les enregistrements dans la table, ce qui réduit les performances et augmente la surcharge.Pour éviter full table scan et de lire uniquement les enregistrements associés à
product_id='P1'
nous pouvons partition (split de la ruche de la table de fichiers) dans plusieurs fichiers basé sur leproduct_id
colonne. En cela, la table de la ruche du fichier sera divisé en deux fichiers un avecproduct_id='P1'
et d'autres avecproduct_id='P2'
. Maintenant, lorsque nous exécutons la requête ci-dessus, il va scanner uniquement leproduct_id='P1'
fichier.La syntaxe pour la création de la partition est donnée ci-dessous. Notez que nous ne devrions pas utiliser la
product_id
définition de la colonne ainsi que le non-partitionné colonnes dans le dessous de la syntaxe. Ce devrait être uniquement dans lepartitioned by
clause.Contre : Nous devons être très prudents lors du partitionnement. C'est, il ne doit pas être utilisé pour les colonnes où nombre de le répéter, les valeurs sont très moins (en particulier les colonnes de clé primaire), car il augmente le nombre de fichiers partitionnés et augmente la charge pour les
Name node
.ÉCOPAGE
------------------
Bucketing
est utilisé pour surmonter lacons
que je l'ai mentionné dans la section de partionnement. Cela devrait être utilisé lorsqu'il y a très peu de doublons dans une colonne (par exemple colonne de la clé primaire). Ceci est similaire à la notion d'index sur la colonne de clé primaire dans les SGBDR. Dans notre tableau, nous pouvons prendreSales_Id
colonne pour la création de compartiments. Il sera utile lorsque nous avons besoin d'interroger lesales_id
colonne.Ci-dessous est la syntaxe pour la création de compartiments.
Ici, nous allons découper les données en quelques fichiers supplémentaires sur le dessus de partitions.
Depuis, nous avons spécifié
3
seaux, elle est divisée en 3 fichiers pour chaqueproduct_id
. Il utilise en internemodulo operator
de déterminer dans quelle seau chaquesales_id
doit être stocké. Par exemple, pour laproduct_id='P1'
, lesales_id=1
seront stockées dans 000001_0 fichier (c'est à dire, 1%3=1),sales_id=2
seront stockées dans 000002_0 fichier (c'est à dire, 2%3=2),sales_id=3
seront stockées dans 000000_0 fichier (c'est à dire, 3%3=0), etc.À l'aide de Partitions dans le tableau de la Ruche est fortement recommandée pour les raisons suivantes -
pour écrire des données sur des partitions )
Exemple :-
Supposons que le Fichier d'Entrée (100 GO) est chargé en temp-ruche-table et il contient les données de la banque de dans des zones géographiques différentes.
Tableau de la ruche sans Partition
Problème avec cette approche est - Il analyse l'ensemble des données pour chaque requête que vous exécutez sur ce tableau. Le temps de réponse sera élevé en comparaison à d'autres approches où le partitionnement et la création de compartiments sont utilisés.
Tableau de la ruche avec de la Partition
Pros - Là, on peut accéder à des données plus rapide quand il s'agit de l'interrogation des données spécifiques à la géographie des transactions.
Les inconvénients de l'Insertion et d'interrogation de données peut encore être améliorée par le fractionnement des données au sein de chaque partition. Voir Écopage des options ci-dessous.
Tableau de la ruche avec de la Partition et la création de compartiments
Remarque: Créer un tableau de la ruche ..... avec "CLUSTER PAR(Partiton_Column) dans les 5 seaux
Pros - Plus Rapide De L'Insertion. Plus Rapide Requête.
Contre - Écopage permettra de créer plusieurs fichiers. Il pourrait y avoir de problème avec de nombreux petits fichiers, dans certains cas spécifiques
Espère que cela va aider !!
Il y a de grandes réponses ici. Je voudrais le garder court et à mémoriser la différence entre la partition & seaux.
Vous, en général, de la partition sur un moins de colonne unique. Et écopage sur la plupart colonne unique.
Exemple, si vous envisagez de la population Mondiale avec des pays, le nom de la personne et leur bio-métrique id comme un exemple. Comme vous pouvez le deviner, le champ pays serait le moins unique de la colonne et de la bio-métrique id seraient les plus uniques de la colonne. Idéalement, vous devez partitionner le tableau par pays et d'un seau en bio-métrique id.