插入Hive表错误

时间:2017-02-27 08:10:21

标签: hadoop hive hiveql

我希望在hive中对表的列进行编码。

我试过了:

hive> create table encode_test(id int, name STRING, phone STRING, address STRING) 
> ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
> WITH SERDEPROPERTIES ('column.encode.columns'='phone,address', 'column.encode.classname'='org.apache.hadoop.hive.serde2.Base64WriteOnly') STORED AS TEXTFILE;

假设我有一个CSV文件,后面有一行

100,'navis','010-0000-0000','Seoul Seocho'

现在我尝试使用。

LOAD DATA LOCAL INPATH
'/home/path/to/csv/test.csv'
INTO TABLE encode_test;

但是在做Select * from encode_test i am getting all columns NULL

结果应该是

100 navis MDEwLTAwMDAtMDAwMA== U2VvdWwsIFNlb2Nobw==

另外,我想给Fields TERMINATED BY ',' IN创建表encode_test查询。

但我得到了error: EOF error Near Fields

我还尝试创建另一个表sample

create table sample(id int, name STRING, phone STRING, address STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS TEXTFILE; 然后在sample表中导入csv文件。它已成功导入。

然后我尝试使用。

insert into encode_test select * from sample;

但是我收到了这个新错误 Permission denied: user=root, access=WRITE, inode="/user":h dfs:supergroup:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.DefaultAuthorizationProvider.c heckFsPermission(DefaultAuthorizationProvider.java:279)

我是hadoop的新手

请参阅我尝试此问题的this link

1 个答案:

答案 0 :(得分:1)

在Hive DDL中,ROW FORMAT SERDEFIELDS TERMINATED BY无法共存。相反,您可以使用field.delim serde属性。

create table encode_test(id int, name STRING, phone STRING, address STRING) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES (
             'field.delim'=',',
             'column.encode.columns'='phone,address',
             'column.encode.classname'='org.apache.hadoop.hive.serde2.Base64WriteOnly')     
STORED AS TEXTFILE;

对于PermissionDenied例外,请将hive查询作为hdfshive用户运行,因为root用户没有WRITE访问HDFS。