Quelle est la différence entre --split-par et-limite-requête de SQOOP?
En supposant que nous n'avons pas une colonne où les valeurs sont distribuées équitablement, disons que nous avons une commande de ce type:
sqoop import \
...
--boundary-query "SELECT min(id), max(id) from some_table"
--split-by id
...
Quel est le point à l'aide de --limite de la requête, ici --split-en fait la même chose?
Est-il un autre moyen d'utilisation à la limite de la requête?
Ou de toute autre manière à diviser les données de manière plus efficace quand il n'y a pas de clé(unique) de la colonne?
OriginalL'auteur burakongun | 2016-11-28
Vous devez vous connecter pour publier un commentaire.
--split-by id
va diviser vos données uniformément sur la base du nombre de mappers (par défaut 4).Maintenant limite de requête par défaut est quelque chose comme cela.
Mais si vous savez
id
commence à partir deval1
et se termine avecval2
. Alors il est inutile de calculermin()
etmax()
opérations. Cela va faire sqoop l'exécution d'une commande plus rapide.Vous pouvez spécifier n'importe quelle requête de retour
val1
etval2
.Edit:
Droit maintenant (1.4.7) il n'existe aucun moyen de sqoop pour spécifier inégale des partitions pour le fractionnement.
Par exemple, vous avez des données comme:
Si vous avez défini 4 mappeurs dans la commande. Il va vérifier min et max qui est de 1 200 et dans notre cas.
Alors il sera divisé en 4 parties:
Oui, dans cette 3ème mappeur(101-150) rien à partir de la table de SGBDR.
Mais il n'y a aucun moyen de définir des partition comme :
De données pour les grandes (des milliards de lignes), en pratique, il n'est pas apte à trouver des valeurs exactes comme ceci ou utiliser un autre outil pour trouver le modèle de données d'abord et ensuite préparer personnalisé partitions.
découvrez mon répondre pour comprendre comment les données fractionnement des travaux dans sqoop.
vérifier mon édité réponse.
Merci pour la clarification. C'était aussi ce que je pensais. Je suppose que je peux faire maintenant est d'importer directement Oracle de partitions ou de jouer avec les arguments no_lig etc. (?) ou de modifier des requêtes pour obtenir un uniforme de la colonne. Personnalisé partitions semble plus difficile à mettre en œuvre pour les grandes tables, corrigez-moi si je me trompe.
Je ne suis pas très familier de l'oracle, mais je suppose que les arguments no_lig est distribué uniformément de sorte que tous vos partitions obtiendrez charge équilibrée. Si vous avez une colonne ayant des valeurs uniformes (pas nécessairement de la clé primaire) choisissez que. Custom partition n'est pas pris en charge par sqoop (comme je l'ai mentionné dans la réponse). Vous avez besoin de modifier le code source de sqoop pour l'ajout de cette fonctionnalité.
OriginalL'auteur dev ツ
--split-par
Pour la forme libre de la requête importations, vous devez spécifier "split-by".
Lorsque vous importez le résultat d'une requête particulière, sqoop a besoin de savoir la colonne nom à l'aide de laquelle il va créer des divisions.
Considérant que, lors de l'importation de tables, si non spécifié, il utilise la clé primaire de la table importée pour créer des scissions. Dans le cas où votre clé primaire est inégale et ne sont pas conformes, vous pouvez également spécifier n'importe quelle autre colonne à l'aide de split.
--limite de requête
Au cours de sqoop processus d'importation, il utilise cette requête pour calculer la limite pour créer des scissions: select min(), max() from table_name.
Dans certains cas, cette requête n'est pas le plus optimal, de sorte que vous pouvez spécifier n'importe quel
requête arbitraire retour de deux colonnes numériques à l'aide de --limite de requête d'argument.
Cela permet d'économiser min(split) et max(divisé par) des opérations et ce qui est plus efficace.
OriginalL'auteur Prashant Dixit
Je n'ai pas lu les réponses que j'attendais.
--split-par:
Je dirais --split-en est le plus souvent utilisé lorsque vous avez une table qui n'a pas obtenu une clé primaire, sqoop normalement cracher un message d'erreur si la table n'a pas de clé primaire. --split-par est utilisée pour déterminer une autre colonne à utiliser pour calculer le min() & max en l'absence d'un pk. Certaines exigences sont:
utilisation --split-seulement sur des colonnes indexées pour des raisons de performances. Dans le cas où vous avez pour importer des données à partir de plusieurs tables, c'est tout naturellement dur pour inspecter l'ensemble de ces tables pour voir ceux qui ont les clés primaires et qui n'ont pas de clés primaires.Ici, u --autoreset-à-un-mappeur de côté les mappeurs utilisée avec l'option-m #of_mappers. votre commande devrait ressembler à ceci:
Tables ne contenant pas de clé primaire va utiliser un thread ( séquentielle ) et ceux avec des clés primaires utilisera 5 threads ou cartographes, comme spécifié. Vous ne pouvez pas utiliser les deux --autoreset-à-un-mappeur et -split-par en une seule commande.
--limite de requêtes:
Si vous connaissez le min et la valeur sur une table, vous pouvez renoncer complexe de calcul par défaut pour les obtenir, vous pouvez simplement coder en dur comme argument à la limite de requêtes. @burakongun explique cette bien.
OriginalL'auteur Eric Tabot