簡體   English   中英

在Hive表中以CSV格式加載數據

[英]Load data in CSV format in Hive Table

我正在嘗試將以下數據以csv文件的形式存儲到Hive表中,但無法成功完成

Ann, 78%,7,  
Beth,81%,5,  
Cathy,83%,2,  

數據存在CSV文件中。 我使用以下定義在Hive中創建了表:

Hive> CREATE TABLE test1 (Name String, Perc String, Rank String)  
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'  
WITH SERDEPROPERTIES ("input.regex" = "^(\w+)\,(\w+)\%\,(\w+)$",  
"output.format.string" = "%1$s %2$s %3$s" )
STORED AS TEXTFILE;"      
ok
hive> load data local inpath '/tmp/input.csv' into table test1;  
ok  
hive> Select * from test1;  
ok  

Name    Perc    Rank  
Null    Null    Null  
Null    Null    Null  
Null    Null    Null  

我無法找出錯誤。 結果數據未加載到表中。

您不需要RegexSerDe。 您應該能夠將定界符設置為逗號。

CREATE TABLE test1 (Name String, Perc String, Rank String) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS TEXTFILE;

您也可以簽出此CVS Serde。 https://github.com/ogrodnek/csv-serde

如果需要靈活性,請使用OpenCSVSerde

CREATE EXTERNAL TABLE `mydb`.`mytable`(
    `product_name` string,
    `brand_id` string,
    `brand` string,
    `color` string,
    `description` string,
    `sale_price` string)
PARTITIONED BY (
    `seller_id` string)
ROW FORMAT SERDE
    'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
    'separatorChar' = '\t',
    'quoteChar' = '"',
    'escapeChar' = '\\')
STORED AS INPUTFORMAT
    'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
    'hdfs://namenode.com:port/data/mydb/mytable'
TBLPROPERTIES (
    'serialization.null.format' = '',
    'skip.header.line.count' = '1')

這樣,您就可以完全控制分隔符,引號字符,轉義字符,空值處理和標頭處理。

這里這里

您可以像這樣使用HIVE的內置正則表達式UDF嗎?

create table temp (raw STRING);

load data local inpath '/tmp/input.csv' into table temp;

create table table1
as
select regexp_extract(line, "^(\w+)\,(\w+)\%\,(\w+)$", 1) Name,
regexp_extract(line, "^(\w+)\,(\w+)\%\,(\w+)$", 2) Perc,
regexp_extract(line, "^(\w+)\,(\w+)\%\,(\w+)$", 3) Rank
from temp;

根據您的示例cvs數據,您的正則表達式不匹配結尾的逗號,並且也不匹配cvs數據的第一個示例行中所示的可選空格字符。 您的正則表達式應從^(\\ w +)\\,(\\ w +)\\%\\,(\\ w +)$更改為:^(\\ w +)\\,\\ s *(\\ w +)\\%\\,(\\ w + )\\,$

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM