我正在尝试将Hive数据从一台服务器复制到另一台服务器。这样,我将从server1导出到hive数据到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表后,整个行数据仅插入第一列。

如何克服这个问题,否则是否有更好的方法将数据从一台服务器复制到另一台服务器?

最佳答案

在创建表时,在创建语句的末尾添加以下行

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;

最重要的一点:

10-04 11:56
查看更多