Hadoop Hive SQL:从格式错误的文件创建外部表

时间:2013-12-05 21:34:04

标签: hadoop hbase hive bigdata

目前我有一个初始系统工作,它读入一个文件,每个行格式如下:

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 个答案:

答案 0 :(得分: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) ) ;
相关问题