web-dev-qa-db-fra.com

Ajouter une colonne dans une table dans Hive QL

J'écris un code dans Hive pour créer une table composée de 1300 lignes et 6 colonnes:

create table test1 as SELECT cd_screen_function,
     SUM(access_count) AS max_count,
     MIN(response_time_min) as response_time_min,
     AVG(response_time_avg) as response_time_avg,
     MAX(response_time_max) as response_time_max,
     SUM(response_time_tot) as response_time_tot,
     COUNT(*) as row_count
     FROM sheet WHERE  ts_update BETWEEN unix_timestamp('2012-11-01 00:00:00') AND 
     unix_timestamp('2012-11-30 00:00:00') and cd_office = '016'
     GROUP BY cd_screen_function ORDER BY max_count DESC, cd_screen_function;

Maintenant, je veux ajouter une autre colonne comme access_count1, Qui consiste en une valeur unique pour toutes les 1300 lignes. La valeur sera sum(max_count). max_count est une colonne de ma table existante. Comment je peux faire ça? J'essaie de modifier la table avec ce code ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);

25
user2532312

Vous vous ne pouvez pas ajouter une colonne avec une valeur par défaut dans Hive . Vous avez le bonne syntaxe pour ajouter la colonneALTER TABLE test1 ADD COLUMNS (access_count1 int);, il vous suffit de vous débarrasser de default sum(max_count). L'ajout de la colonne ne modifiera pas les fichiers sauvegardant votre table. Hive traite les données "manquantes" en interprétant NULL comme la valeur de chaque cellule de cette colonne .

Alors maintenant, vous avez le problème de devoir remplir la colonne. Malheureusement, dans Hive, vous devez essentiellement réécrire toute la table, cette fois avec la colonne remplie. Il peut être plus facile de réexécuter votre requête d'origine avec la nouvelle colonne. Vous pouvez également ajouter la colonne à la table que vous avez maintenant, puis sélectionner toutes ses colonnes plus la valeur de la nouvelle colonne.

Vous avez également la possibilité de toujours COALESCE la colonne de votre choix par défaut et de le laisser NULL pour le moment. Cette option échoue lorsque vous souhaitez que NULL ait une signification distincte de celle par défaut. Cela nécessite également que vous dépendiez de toujours vous souvenir de COALESCE.

Si vous êtes très confiant dans votre capacité à traiter les fichiers sauvegardant Hive, vous pouvez également les modifier directement pour ajouter votre valeur par défaut. En général, je le déconseille car la plupart du temps, ce sera plus lent et plus dangereux. Il y a peut-être un cas où cela a du sens, alors j'ai inclus cette option pour plus de complétude.

40
Daniel Koverman