将制表符分隔的数据读入Hive数组

时间:2014-09-17 21:59:15

标签: csv awk sed hive

我需要的数据格式:

    12cef8e1b711a351        [1377045694501,1377045728475,1377045709652]
    12cf3cb988f10a87        [1380741459591,1380739871201,1380739785397,1380740303830,1380739849591]
    12d1be8adb90a88b        [1375541238666,1375541281821]
    12d29ba61341e7ce        [1377855844089,1377855785342]
    12d2e28e50d42d19        [1381974506104,1381973579872,1377988785664,1381976074258]

我拥有的数据格式 - 所有内容都以制表符分隔:

    12cef8e1b711a351      1377045694501       377045728475       1377045709652
    12cf3cb988f10a87      1380741459591       1380739871201      1380739785397     1380740303830     1380739849591
    12d1be8adb90a88b      1375541238666       1375541281821 
    12d29ba61341e7ce      1377855844089       1377855785342 
    12d2e28e50d42d19      1381974506104       1381973579872      1377988785664      1381976074258 

如何处理制表符分隔的数据,以便第一个字段与其余选项卡分隔,其他所有字符以逗号分隔并由[]包围。可能每个以逗号分隔的项目也必须加入“”。

我需要将这些数据读入Hive表

  CREATE TABLE id_timestamps (id STRING, timestamps array<STRING>);

我是否可以通过一些技巧或shell将其直接读取到Hive我用awk或sed转换制表符分隔的数据?请帮助提供一些建议和食谱。

谢谢!

1 个答案:

答案 0 :(得分:1)

这个awk脚本产生了所需的格式:

awk '{printf "%s\t[", $1; for(i=2;i<=NF;++i) printf "%s%s", $i, (i<NF?",":"]\n")}' file

打印第一列,然后是制表符和开头“[”。打印其余列,后跟一个“,”,除了最后一个,后面跟一个“]”和换行符。

测试出来:

$ awk '{printf "%s\t[", $1; for(i=2;i<=NF;++i) printf "%s%s", $i, (i<NF?",":"]\n")}' file
12cef8e1b711a351        [1377045694501,377045728475,1377045709652]
12cf3cb988f10a87        [1380741459591,1380739871201,1380739785397,1380740303830,1380739849591]
12d1be8adb90a88b        [1375541238666,1375541281821]
12d29ba61341e7ce        [1377855844089,1377855785342]
12d2e28e50d42d19        [1381974506104,1381973579872,1377988785664,1381976074258]