Sql 加载到配置单元表仅将整个数据导入第一列

Sql 加载到配置单元表仅将整个数据导入第一列,sql,database,hadoop,hive,Sql,Database,Hadoop,Hive,我正在尝试将配置单元数据从一台服务器复制到另一台服务器。通过这种方式,我将从服务器1将配置单元数据导出到CSV中,并尝试将该CSV文件导入到服务器2中的配置单元中 我的表包含以下数据类型: 比基特 串 排列 以下是我的命令: 导出: hive -e 'select * from sample' > /home/hadoop/sample.csv load data local inpath '/home/hadoop/sample.csv' into table sample; hiv

我正在尝试将配置单元数据从一台服务器复制到另一台服务器。通过这种方式,我将从服务器1将配置单元数据导出到CSV中,并尝试将该CSV文件导入到服务器2中的配置单元中

我的表包含以下数据类型:

比基特

排列

以下是我的命令:

导出:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
导入:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
导入到配置单元表中后,整个行数据将仅插入到第一列中


如何克服这一问题,或者有更好的方法将数据从一台服务器复制到另一台服务器吗?

在创建表格时,请在“创建状态”末尾的下一行添加数据。

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
如下所示:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
然后加载数据:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
以您为例

123,Raju,Hello|How Are You
154,Nishant,Hi|How Are You
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;
hive>CREATE TABLE sample(id BIGINT,
名称字符串,
消息(数组)
以“,”结尾的行格式分隔字段
以“|”结尾的收款项目;
配置单元>将数据本地INPATH'/home/hadoop/sample.csv'加载到表sample中;
最重要的一点:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
为集合项定义分隔符,不要强制使用数组 您在正常编程中执行的结构。
另外,试着让场地更开阔 不同于集合项的分隔符要避免的分隔符 混乱和意外的结果


创建表格时,在“创建表格”末尾的行下方添加

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
如下所示:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
然后加载数据:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
以您为例

123,Raju,Hello|How Are You
154,Nishant,Hi|How Are You
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;
hive>CREATE TABLE sample(id BIGINT,
名称字符串,
消息(数组)
以“,”结尾的行格式分隔字段
以“|”结尾的收款项目;
配置单元>将数据本地INPATH'/home/hadoop/sample.csv'加载到表sample中;
最重要的一点:

hive -e 'select * from sample' > /home/hadoop/sample.csv
load data local inpath '/home/hadoop/sample.csv' into table sample;
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;
为集合项定义分隔符,不要强制使用数组 您在正常编程中执行的结构。
另外,试着让场地更开阔 不同于集合项的分隔符要避免的分隔符 混乱和意外的结果


您确实不应该使用CSV作为数据传输格式

  • DistCp按原样在Hadoop集群之间复制数据

您确实不应该使用CSV作为数据传输格式

  • DistCp按原样在Hadoop集群之间复制数据

    • 为什么不使用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
      将所有cloumn转换为一个cloumn

      为什么不使用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
      将所有cloumn设置为一个cloumn

      您可以在此处添加
      创建表样本
      脚本吗您可以在此处添加
      创建表样本
      脚本吗