1
votes

Comment insérer une valeur vide au lieu de NULL dans des colonnes autres que le type de données String dans Hive

J'ai une instruction de création comme

CREATE TABLE temp_tbl (EmpId String, Salary int);

Je voudrais insérer un identifiant d'employé et une valeur vide dans le tableau.

Donc, ce que j'ai fait est

  1. insert overwrite table temp_tbl select '013' as EmpId, '' as Salary from tbl;
CREATE TABLE temp_tbl (EmpId String,Salary int) TBLPROPERTIES ('serialization.null.format' = '');

Mais le résultat attendu est

hive> select * from temp_tbl;
OK
013     NULL ---> Blank instead of NULL
  1. Également essayé avec "". Je l’obtiens toujours comme NULL au lieu de vide

3. J'ai essayé de créer une table avec la propriété de sérialisation

hive> select * from temp_tbl;
OK
013     NULL

Cela n'a pas non plus changé la valeur NULL en vide.

Quoi peut être la solution de contournement pour le même.


0 commentaires

3 Réponses :


0
votes

Cas d'utilisation lors de la sélection des données.

Select 
(CASE 
       WHEN columnName is null THEN ''
       ELSE columnName 
END) as 'Result' from temp_tbl;


2 commentaires

Mon exigence est d'insérer une valeur vide dans la colonne de salaire sans aucune condition de cas


@UnmeshaSreeVeni Vous ne pouvez pas insérer de valeur vide dans la colonne Integer car Integer lui-même ne peut pas être vide, seule la chaîne peut être vide, la chaîne vide est une valeur de chaîne normale comme toute autre chaîne. L'entier peut être NULL ou un nombre valide



0
votes

Tous les types sauf strings / varchar / char et certains types complexes comme array, dans Hive ne peuvent pas être vides, seul NULL est possible. La chaîne vide '' est une valeur tout à fait normale de type String. Vous pouvez également produire un tableau vide () (tableau avec une taille nulle).

Pour contourner le problème , vous pouvez utiliser des valeurs prédéfinies qui ne figurent normalement pas dans vos données pour représenter des valeurs numériques spéciales, telles que -99999. Vous pouvez également stocker vos valeurs numériques dans une colonne String, dans ce cas, vous pourrez y avoir des valeurs vides. Mais il n'est pas possible d'attribuer (transtyper) des chaînes vides à des types numériques, car une telle valeur vide n'est pas autorisée.

Si vous essayez d'attribuer une chaîne vide à une colonne numérique ou de convertir en type numérique, le résultat sera le même que si vous convertissez une chaîne non numérique en numérique - NULL (dans Hive s'il n'est pas possible de convertir, il renvoie NULL ) ou obtenez java.lang.NumberFormatException en Java.


0 commentaires

0
votes

Sachant que le type de données Int peut être NULL ou entier, je réfléchirais à la manière de contourner le problème.

  1. J'ai l'impression que 0 peut faire le travail. Pourquoi pas?
  2. Si 1 n'est pas idéal, pourquoi ne pas créer une nouvelle table temp_employees_with_no_salary?
  3. Si 2 n'est pas idéal, pouvez-vous vous permettre de changer le type de données de temp_tbl.Salary de Int en String, puis d'utiliser CAST (Salary AS INT) pour l'utiliser?

0 commentaires