我正在尝试将Hive数据从一台服务器复制到另一台服务器。这样,我将从server1导出到蜂窝数据到CSV中,并试图将该CSV文件导入到server2中的hive中。
我的表包含以下数据类型:
比金
字符串
数组
这是我的命令:
出口:
hive -e 'select * from sample' > /home/hadoop/sample.csv导入:
load data local inpath '/home/hadoop/sample.csv' into table sample;导入到Hive表后,整个行数据只插入到第一列中。
我如何克服这个问题,否则是否有更好的方法将数据从一台服务器复制到另一台服务器?
发布于 2018-04-24 05:40:19
在创建表时在create 末尾添加下面一行
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',',如下所示:
hive>CREATE TABLE sample(id int,
name String)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';然后加载数据:
hive>load data local inpath '/home/hadoop/sample.csv' into table sample;作为示例
sample.csv
123,Raju,Hello|How Are You
154,Nishant,Hi|How Are You因此,在上面的示例数据中,第一列是bigint,第二列是String,第三列是由|分隔的Array。
hive> CREATE TABLE sample(id BIGINT,
name STRING,
messages ARRAY<String>)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '|';
hive> LOAD DATA LOCAL INPATH '/home/hadoop/sample.csv' INTO TABLE sample;最重要的一点:
为集合项定义分隔符,不要将常规programming.Also中的数组结构强加于人,尝试使字段分隔符与集合项分隔符不同,以避免混淆和意外结果。
发布于 2018-04-25 01:36:39
您不应该使用CSV作为您的数据传输格式。
发布于 2018-04-26 09:33:51
为什么不使用hadoop命令将数据从一个集群传输到另一个集群,如
bash$ hadoop distcp hdfs://nn1:8020/foo/bar \
hdfs://nn2:8020/bar/foo然后将数据加载到新表中。
load data inpath '/bar/foo/*' into table wyp;您的问题可能是由定界符(默认分隔符'\001' )引起的,如果在创建可见性时没有设置.如果你使用hive -e 'select * from sample' > /home/hadoop/sample.csv,所有的云都会变成一个云
https://stackoverflow.com/questions/49994039
复制相似问题