我希望在配置单元中对表的列进行编码。
我试过:
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新手
请参考我尝试这个问题的地方的链接
1条答案
按热度按时间rjee0c151#
在Hive里,
ROW FORMAT SERDE
以及FIELDS TERMINATED BY
不能共存。你可以用,field.delim
塞德地产。而对于
PermissionDenied
例外情况下,将配置单元查询作为hdfs
或者hive
用户自root
用户没有WRITE
访问hdfs。