Start a new topic
Answered

Utilisation de pattern integration hive pour le partitionning d'une table

Bonjour,


je vous contacte car je trouve pas d'exemple ou de doc stambia pour la création de table partitionné, et l'insertion de données dans cette dernière avec le pattern  Integration Hive , ainsi que l'utilisation des bucket dans stambia


1-creation d'une table selon une clé de partition

pour le faire je suis allé dans metadata, onglet standard--> partitionning et j'ai rajouté le nom de la clé de partition.

Le problème c'est que ca crée bien la table partitionnée avec tous les champs, sauf le champ utilisé comme clé de partitionning, et dont j'ai besoin dans ma table.


avez vous une solution pour remédier a ca?


2- lors du lancement de l'exécution du mapping de recharge de la table cible (notre table que nous avons partitionné dans l'étape 1), et on utilisant le patterne Integration Hive pour inserer les données dans la table que nous avons partitionnée, la req générée par le pattern est la suivante : 


insert into table schéma.nom_table_partitionnée

PARTITION (clé_partition=schéma.clé_partition)

select  nom_des_champs

from table


j'ai le message d'erreur suivant :

ParseException line 3:20 cannot recognize input near 'schéma' '.' 'clé_partition' in constant


j'ai l'impression que ce message d'erreur est a cause du mont clé rajouté par stambia "clé_partition="


3- comment utilisé les buckets dans stambia


techno utilisé : Hive

version stambia designer  :     Stambia Designer 19.0.0.20190125_092334

pattern utilisé : Integration Hive


Merci d'avance pour votre retour


Best Answer

Bonjour Sofiane,


Voici mes réponses aux différents points remontés sur l'utilisation Hive :


1-creation d'une table selon une clé de partition


Il faut bien définir la clé de partition dans l'onglet Standard - Attribut Partitionning de la metadata table.

Exemple :


image



En observant la création de la table: 


image


Voici le type de script de création de table que vous devriez obtenir :


Create table stb_hadoop_demo.countries_list_3

(

 countryname STRING ,

 capital STRING ,

 population STRING

)

PARTITIONED BY(countryid INT )

STORED AS ORC


En activant l'option de création de table dans un mapping au niveau du template d'Intégration : 


image


A quel endroit ne voyez vous pas le champ de partition ?


2- lors du lancement de l'exécution du mapping de recharge de la table cible (notre table que nous avons partitionné dans l'étape 1), et on utilisant le patterne Integration Hive pour inserer les données dans la table que nous avons partitionnée, la req générée par le pattern est la suivante : 


Je comprends que vous souhaitez alimenter la clé de partition dynamiquement et pas avec une partition constante.

Pour cela, vous devez ajouter le  tag DYNAMIC_PARTITION sur votre champ de partition dans le mapping :


image


La requête d'insertion ainsi obtenue est : 


image


Je vous joins un mapping d'exemple pour ce cas de création + insertion dans une table partitionnée.


3- comment utilisé les buckets dans stambia


Les Buckets ne sont pas encore gérés dans Stambia/Semarchy xDI.

Vous pouvez les définir manuellement en créant votre table en dehors de Semarchy.

C'est cependant une fonctionnalité d'optimisation intéressante que nous envisageons d'ajouter dans une future version de notre connecteur.


Cordialement,

Michaël Turchi


zip

Answer

Bonjour Sofiane,


Voici mes réponses aux différents points remontés sur l'utilisation Hive :


1-creation d'une table selon une clé de partition


Il faut bien définir la clé de partition dans l'onglet Standard - Attribut Partitionning de la metadata table.

Exemple :


image



En observant la création de la table: 


image


Voici le type de script de création de table que vous devriez obtenir :


Create table stb_hadoop_demo.countries_list_3

(

 countryname STRING ,

 capital STRING ,

 population STRING

)

PARTITIONED BY(countryid INT )

STORED AS ORC


En activant l'option de création de table dans un mapping au niveau du template d'Intégration : 


image


A quel endroit ne voyez vous pas le champ de partition ?


2- lors du lancement de l'exécution du mapping de recharge de la table cible (notre table que nous avons partitionné dans l'étape 1), et on utilisant le patterne Integration Hive pour inserer les données dans la table que nous avons partitionnée, la req générée par le pattern est la suivante : 


Je comprends que vous souhaitez alimenter la clé de partition dynamiquement et pas avec une partition constante.

Pour cela, vous devez ajouter le  tag DYNAMIC_PARTITION sur votre champ de partition dans le mapping :


image


La requête d'insertion ainsi obtenue est : 


image


Je vous joins un mapping d'exemple pour ce cas de création + insertion dans une table partitionnée.


3- comment utilisé les buckets dans stambia


Les Buckets ne sont pas encore gérés dans Stambia/Semarchy xDI.

Vous pouvez les définir manuellement en créant votre table en dehors de Semarchy.

C'est cependant une fonctionnalité d'optimisation intéressante que nous envisageons d'ajouter dans une future version de notre connecteur.


Cordialement,

Michaël Turchi


zip

Bonjour Michaël,


Merci pour ton retour détaillé.

concernant ta question "A quel endroit ne voyez vous pas le champ de partition ?"


j'aurais aimer avoir la même req mais avec le champ de la clé de partition selectionné, car j'ai besoin de ce champ dans ma table.

Exemple :


Create table stb_hadoop_demo.countries_list_3

(

      countryname String,

      capital STRING,

      population STRING

      countryid INT 

)

PARTITIONNED BY (countyid INT)

STORED AS ORC


je sais que c'est le comportement normale que la clé de partition ne se trouve pas dans la liste des champs sélectionné, mais j'aurais aimé récupérer ce champ pour des besoin fonctionnels.




Bonjour Sofiane,


Ce type de requête de création de table n'est pas possible sur Hive et terminerais avec l'erreur suivante :


Error while compiling statement: FAILED: SemanticException [Error 10035]: Column repeated in partitioning columns


Je ne connais pas votre besoin fonctionnel mais les champs de partition sont bien accessible avec une requête SELECT key_part FROM table


Cordialement,

Michaël TURCHI

Login to post a comment