在Hive中从字符串中分隔字段

时间:2013-04-20 15:50:44

标签: string input hive field

我有以下问题...... 我使用Hive并希望添加一个包含几行(不同)字符串的文件。那些包含固定大小的字段,如下所示:

A20130420bcd   34  fgh  

其中字段的长度为1,8,6,4,3。 分开它看起来像这样:

“A,20130420,bcd,fgh”

是否有可能读取字符串并将其排序到字段中,除了将其作为每个字段的子字符串(如

substring(col_value,1,1) Field1 

等? 我认为剪切已经读取的字符串部分会提高性能,但我可以想办法用给定的函数here做任何事情。

其次,如前所述,有不同类型的字符串,由第一个字符排序和识别。现在只需检查那些带有WHERE-Statement的字符串,但它很可怕,因为它贯穿整个文件只是为了找到第一个String。有没有办法按他们的号码阅读特定的行?如果我知道,第一个字符串将是某种类型,可以直接读取它?

对,它看起来像这样:

insert overwrite table TEST 
SELECT 
substring(col_value,1,1) field1, 
... 
substring(col_value,10,3) field 5 
from temp_data WHERE substring(col_value,1,1) = 'A'; 

对此有何想法?

我很想听到一些想法=)

1 个答案:

答案 0 :(得分:1)

你需要编写你的泛型UDF解析器,输出结构或映射或任何适当的。你可以参考UDF that output multi-values

然后你可以写

insert overwrite table output
select parsed.first, parsed.second
from (
  select parse(taget)
  from input
) parsed
where first='X';

关于第二个问题,您可能需要检查配置单元的“解释”命令以查看配置单元是否为您进行过滤下推。(只需看看减少了多少地图,理论上它应该是一个地图,具体取决于1 .hive版本, 2.输出表格式 。)

从一般意义上讲,这就是数据库流行的原因 - 为您考虑优化。