如何在Hive中进行双分隔符(||)?

时间:2014-08-25 10:37:22

标签: hadoop hive

我正在尝试将数据加载到由双管(||)分隔的hive表中。当我尝试这个时:

样本I / P:

1405983600000||111.111.82.41||806065581||session-id

在配置单元中创建表:

create table test_hive(k1 string, k2 string, k3 string, k4 string,) row format delimited fields terminated by '||' stored as textfile;

从文本文件加载数据:

load data local inpath '/Desktop/input.txt' into table test_hive;

当我这样做时,它以下列格式存储数据:

1405983600000 tabspace-as-second-column 111.111.82.41 tabspace-as-fourth-column

我期待表格中的数据

1405983600000 111.111.82.41 806065581 session-id

请帮助我,我已经尝试了不同的选项,但无法解决它

3 个答案:

答案 0 :(得分:0)

Multicharater分隔符,例如。 ||在版本0.13之前,Hive不支持。因此字段由||终止将无法解决。有一个替代本地。

  CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
 page_url STRING, referrer_url STRING,
 ip STRING COMMENT 'IP Address of the User',
 country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 SERDE serde_name WITH SERDEPROPERTIES (field.delim='||')
 STORED AS TEXTFILE
 LOCATION '<hdfs_location>';

可以使用默认的serde。通过在serde属性中指定多字符分隔符,可以将多字符分隔符用于字段,行,转义字符。

答案 1 :(得分:0)

使用multidelimiter serde在hive 14中解决了这个问题。请在这里找到文档。 https://cwiki.apache.org/confluence/display/Hive/MultiDelimitSerDe

答案 2 :(得分:0)

如果您不想使用替代serde或拥有早期版本的配置单元,则可以执行此操作:

create external table my_table (line string) location /path/file;

然后在顶部创建视图:

create view my_view as select split(line,'\\|\\|')[0] as column_1 
, split(line,'\\|\\|')[1] as column_2
, split(line,'\\|\\|')[2] as column_3
from my_table;

查询视图。祝你好运。