我试图学习Hive,这可能是一个愚蠢的问题,但我创建了一个Hive表如下
create table if not exists tweets_table(
tweetdata STRING,
followerscount INT,
friendscount INT,
statuscount INT,
retweetcount INT,
favouritescount INT,
lang STRING,
placefullname STRING,
placename STRING,
countryname STRING,
countrycode STRING,
hashtags STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '^**^'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;
LOAD DATA LOCAL INPATH '/home/cloudera/Desktop/TestDB.txt' INTO TABLE tweets_table5 ;
我用“^**^”来分隔文本,因为tweets有很多“\n\r”(如果有的话,请建议一个标准的做法)
所以我有一个文本文件,我正在尝试加载
09-09-2016 10:51:33|^**^|@ArvindKejriwal @abpnewstv तुम्हारे दावों का क्या हुआ केजरीवाल।|^**^|74|^**^|30|^**^|0|^**^|98|^**^|0|^**^|49|^**^|en|^**^|Ambikapur, India|^**^|Ambikapur|^**^|India|^**^|IN|^**^|[]
09-09-2016 10:51:37|^**^|@LiveLawIndia It is shocking a judge arrested. I am sure Higher Judiciary will come their rescue , Judges per se cannot be wrong|^**^|0|^**^|14|^**^|0|^**^|32|^**^|0|^**^|2|^**^|en|^**^|Rajasthan, India|^**^|Rajasthan|^**^|India|^**^|IN|^**^|[]
在成功加载并查询它之后,我得到以下输出
09-09-2016 10:51:33| NULL NULL NULL NULL NULL |30| **|0|**|98| **
09-09-2016 10:51:37| NULL NULL NULL NULL NULL |14| **|0|**|32| **
我不明白我哪里做错了是在我的文件里还是在Hive表里。请帮忙
2条答案
按热度按时间wgmfuz8q1#
您尝试执行的操作有几个问题:
使用
FIELDS TERMINATED BY
分隔符不能超过1个字符。即使这样做有效,也不能解决tweet中有行分隔符的问题
\n
在tweet中开始新的一行。您描述表的方式—不可能正确解析—您不能
\n
作为行分隔符和在tweet数据中。如果您是生成此输入文件的人,我建议将所有\n
以及\r
在有空格的推特上。pjngdqdw2#
使用regex serde而不是默认配置单元serde创建表。
根据列数修改下面的正则表达式:
表格:
加载数据:
如果你得到
RegexSerDe classNotFoundException
然后添加regex serde jar: