我有以下问题...... 我使用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';
对此有何想法?
我很想听到一些想法=)
答案 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.输出表格式 。)
从一般意义上讲,这就是数据库流行的原因 - 为您考虑优化。