插入配置单元表时出错

ttisahbt  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(460)

我希望在配置单元中对表的列进行编码。
我试过:

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 ',' 在create table encode\测试查询中。
但我越来越 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; 然后将csv文件导入 sample table。并成功导入。
然后我试着用。 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新手
请参考我尝试这个问题的地方的链接

rjee0c15

rjee0c151#

在Hive里, ROW FORMAT SERDE 以及 FIELDS TERMINATED BY 不能共存。你可以用, field.delim 塞德地产。

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 例外情况下,将配置单元查询作为 hdfs 或者 hive 用户自 root 用户没有 WRITE 访问hdfs。

相关问题