Ajouter une colonne dans un tableau 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 se compose d'une valeur unique pour toutes les 1300 lignes et la valeur sera sum(max_count) . max_count est une colonne dans ma table existante. Comment je peux faire? J'essaie de modifier la table par ce code ALTER TABLE test1 ADD COLUMNS (access_count1 int) set default sum(max_count);

21
demandé sur John Bollinger 2013-10-25 16:09:26

1 réponses

Vous impossible d'ajouter une colonne avec une valeur par défaut dans la Ruche . Vous avez la syntaxe pour ajouter la colonne ALTER TABLE test1 ADD COLUMNS (access_count1 int); , vous avez juste besoin de se débarrasser de default sum(max_count) . Aucun changement à ce que les dossiers soutenant votre table se produiront à la suite de l'ajout de la colonne. Hive traite les données" manquantes "en interprétant NULL comme la valeur pour chaque cellule dans cette colonne .

donc maintenant vous avez le problème d'avoir à remplir la colonne. Malheureusement dans Hive vous avez essentiellement besoin de réécrire la table entière, cette fois avec la colonne peuplée. Il peut être plus facile de rediriger votre requête originale avec la nouvelle colonne. Ou vous pouvez ajouter la colonne à la table que vous avez maintenant, puis sélectionnez toutes ses colonnes plus la valeur pour la nouvelle colonne.

vous avez également l'option de toujours COALESCE la colonne à votre défaut désiré et le laisser NULL pour l'instant. Cette option échoue lorsque vous voulez que NULL ait une signification distincte de votre défaut désiré. Il exige également que vous dépendez de toujours se rappeler à COALESCE .

si vous êtes très confiant dans vos capacités à traiter les fichiers de support de la ruche, vous pouvez également les modifier directement pour ajouter votre défaut. En général, je déconseille ce parce que la plupart du temps, il sera plus lent et plus dangereux. Il y a peut-être un cas où ça a du sens, donc j'ai inclus cette option pour l'exhaustivité.

30
répondu Daniel Koverman 2017-05-23 12:32:26