Hadoop Hive SQL:从格式奇怪的文件创建外部表
Posted
技术标签:
【中文标题】Hadoop Hive SQL:从格式奇怪的文件创建外部表【英文标题】:Hadoop Hive SQL: Create External Table from an oddly formatted file 【发布时间】:2013-12-05 21:34:03 【问题描述】:目前我有一个初始系统正在工作,它读取一个文件,每个行格式如下所示:
REVISION 12 30364918 Anarchism 2005-12-06T17:44:47Z RJII 141644
使用此代码:
CREATE EXTERNAL TABLE mytable(type STRING, aid BIGINT, rid BIGINT, title STRING, ts STRING, uname STRING, uid STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ' STORED AS TEXTFILE LOCATION '/my/local/path/to/file';
但现在我有一个文件,每一行的格式如下:
2001-04-29T15:43:48Z [10656,251129]
(注意时间戳后面有个制表符)
而且我不知道如何从中提取数据。我在网上寻找建议,但似乎找不到任何东西。
如果理论上我想从中得到
ts STRING -> 2001-04-29T15:43:48Z
aid BIGINT -> 10656
rid BIGINT -> 251129
【问题讨论】:
【参考方案1】:看起来第二个字段是一个 JSON 数组。您可以创建一个映射到实际底层结构的表,并定义一个视图来提取值。 Brickhouse (http://github.com/klout/brickhouse) 的“from_json”和“json_split”UDF 可以为您解析 JSON
CREATE EXTERNAL TABLE mytable(datestr STRING, jsonArray STRING)
ROW FORMAT FIELDS DELIMITED BY '\t';
CREATE VIEW myview AS
SELECT datestr, numArr[0] as aid, numArr[1] as rid
FROM ( SELECT datestr, from_json( jsonArray, array( cast(1 as bigint) ) ;
【讨论】:
以上是关于Hadoop Hive SQL:从格式奇怪的文件创建外部表的主要内容,如果未能解决你的问题,请参考以下文章