如何避免字符串

时间:2017-05-30 07:43:34

标签: hive hiveql

首先请原谅,如果这个问题非常规律,我对HIVE非常陌生,并且我会亲自动手。我需要在comma(',')delimeter的帮助下将数据插入表格列的位置,下面是一个示例条目:

列标题:Name,status,location

示例数据:Arverne,closed,"312 Beach 54 Street Arverne,NY 11692 (40.59428994144626, -73.78442865540268)"

问题是当我尝试FIELDS TERMINATED BY','作为位置时,只能获取“312 Beach 54 Street Arverne ,但要求是获取 312 Beach 54 Street Arverne,NY 11692(40.59428994144626,-73.78442865540268)

 create table library(name string,Location string) row format delimited
 fields terminated by ','  stored as TextFile;

1 个答案:

答案 0 :(得分:1)

1。

tblproperties(' serialization.last.column.takes.rest' =' true')

create external table library (Name string,status string,location string)
row format delimited
fields terminated by ','
tblproperties ('serialization.last.column.takes.rest'='true')    
;
select * from library
;
+---------+--------+---------------------------------------------------------------------------------+
|  name   | status |                                    location                                     |
+---------+--------+---------------------------------------------------------------------------------+
| Arverne | closed | "312 Beach 54 Street Arverne,NY  11692 (40.59428994144626, -73.78442865540268)" |
+---------+--------+---------------------------------------------------------------------------------+

2

<强> OpenCSVSerde

https://cwiki.apache.org/confluence/display/Hive/CSV+Serde
https://github.com/ogrodnek/csv-serde

默认服务属性

create external table library (Name string,status string,location string)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
stored as textfile
;
select * from library
;
+---------+--------+-------------------------------------------------------------------------------+
|  name   | status |                                   location                                    |
+---------+--------+-------------------------------------------------------------------------------+
| Arverne | closed | 312 Beach 54 Street Arverne,NY  11692 (40.59428994144626, -73.78442865540268) |
+---------+--------+-------------------------------------------------------------------------------+

显式SerDe属性

create external table library (Name string,status string,location string)
row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
with serdeproperties 
(
    'separatorChar' = ','
   ,'quoteChar'     = '"'
   ,'escapeChar'    = '\\'
)  
stored as textfile
;
select * from library
;
+---------+--------+-------------------------------------------------------------------------------+
|  name   | status |                                   location                                    |
+---------+--------+-------------------------------------------------------------------------------+
| Arverne | closed | 312 Beach 54 Street Arverne,NY  11692 (40.59428994144626, -73.78442865540268) |
+---------+--------+-------------------------------------------------------------------------------+