Obtenir des valeurs NULL lors du chargement des données à partir de fichiers plats dans des tables Hive
J'obtiens les valeurs null pendant le chargement des données à partir de fichiers plats dans la ruche tables.
mon de la structure des tables est comme ceci:
hive> create table test_hive (id int,value string);
et mon fichier plat est comme ceci:
input.txt
1 a
2 b
3 c
4 d
5 e
6 F
7 G
8 j
quand je suis en cours d'exécution les commandes ci-dessous, j'obtiens des valeurs null:
hive> LOAD DATA LOCAL INPATH '/home/hduser/input.txt' OVERWRITE INTO TABLE test_hive;
hive> select * from test_hive;
OK<br>
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
capture d'écran:
hive> create table test_hive (id int,value string);
OK
Time taken: 4.97 seconds
hive> show tables;
OK
test_hive
Time taken: 0.124 seconds
hive> LOAD DATA LOCAL INPATH '/home/hduser/input2.txt' OVERWRITE INTO TABLE test_hive;
Copying data from file:/home/hduser/input2.txt
Copying file: file:/home/hduser/input2.txt
Loading data to table default.test_hive
Deleted hdfs://hydhtc227141d:54310/app/hive/warehouse/test_hive
OK
Time taken: 0.572 seconds
hive> select * from test_hive;
OK
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
NULL NULL
Time taken: 0.182 seconds
source d'informationauteur user1823697
Vous devez vous connecter pour publier un commentaire.
De l'indicateur par défaut dans la Ruche est ^A. Vous devez le mentionner explicitement dans votre instruction create table que vous utilisez un autre séparateur de champ.
Similaire à ce que Lorand Flexion indiqué dans le commentaire, utiliser:
Vous n'avez pas besoin de spécifier un emplacement depuis que vous êtes à la création d'un géré la table (et non pas une table externe).
Problème auquel vous êtes confronté est parce que dans vos données, les champs sont séparés par des ', et lors de la création de la table vous n'avez pas mentionné le délimiteur de champ. Donc, si vous ne mentionnez pas le délimiteur de champ lors de la création de la ruche de table, par défaut ruche estime ^) comme délimiteur.
Afin de résoudre votre problème, vous pouvez recréer la table de mentionner ci-dessous la syntaxe et cela fonctionne.
CREATE TABLE test_hive(id INT, value STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';
Du répertoire de stockage par défaut d'enregistrement et de champ séparateurs de liste:
\n
^Un
^B
^C
appuyez sur ^V^Un pourrait insérer un ^Un dans Vim.
La solution est assez simple. Le Tableau wan a pas été créé dans le droit chemin.
Solution Simple à votre problème ou tout autres problèmes est de savoir comment charger les données.
Maintenant lemme expliquer le code :
Première Ligne
La création de votre table. [S'il n'EXISTE PAS] est facultatif qui indique si la table existe pas de ne pas l'écraser. Ses plus de mesure de sécurité.
Deuxième ligne
Spécifie un séparateur au niveau de la table pour structurée champs.
Troisième Élément
Vous pouvez inclure n'importe quel caractère unique, mais la valeur par défaut est '\001'.
'/t' est pour un onglet de l'espace : dans votre cas
'|' est pour les données qui sont à côté les uns des autres et séparés par des |
'pour un char de l'espace. Et ainsi de suite...
Quatrième Ligne :
Spécifie le type de fichier dans lequel les données seront stockées. Le fichier peut être un fichier de TEXTE, SEQUENCEFILE, RCFILE, ou BINAIRE SEQUENCEFILE. Ou, comment les données sont stockées peuvent être spécifiées comme Java d'entrée et de sortie des classes.
lors du chargement Localement :
Toujours essayer de vérifier vos données par une simple instruction select*.
Espère que cela aide.
Les éléments sont séparés par des espaces ou des tabulations? Laissez la patte de suivre ces étapes. En cas de séparation d'utilisation de l'espace '' au lieu de '\t' Ok.
Que vous devez entrer
Maintenant, vous pouvez profiter exacte de votre sortie attendue de "nom de fichier".
veuillez vérifier le jeu de données date de la colonne il faut respecter le format de date aaaa-mm-jj
Si la chaîne est sous la forme "aaaa-mm-jj', puis une date de valeur correspondant à celle de l'année/mois/jour est retourné. Si la valeur de chaîne ne correspond pas à ce formiate, la valeur NULL est retournée.
La ruche de la documentation Officielle