HIVE-SQL\u服务器:HadoopExecutionException:此行列数不足

HIVE-SQL\u服务器:HadoopExecutionException:此行列数不足,sql,sql-server,hive,hiveql,Sql,Sql Server,Hive,Hiveql,我有一个具有以下结构和数据的配置单元表: 表结构: CREATE EXTERNAL TABLE IF NOT EXISTS db_crprcdtl.shcar_dtls ID string, CSK string, BRND string, MKTCP string, AMTCMP string, AMTSP string, RLBRND string, ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t

我有一个具有以下结构和数据的配置单元表:

表结构:

CREATE EXTERNAL TABLE IF NOT EXISTS  db_crprcdtl.shcar_dtls
  ID  string,
  CSK string,  
  BRND string,  
  MKTCP string,  
  AMTCMP string,  
  AMTSP string,  
  RLBRND string,
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION '/on/hadoop/dir/'


-------------------------------------------------------------------------------
ID  |     CSK |          BRND |          MKTCP |            AMTCMP 
-------------------------------------------------------------------------------
782    flatn,grpl,mrtn  hnd,mrc,nsn    34555,56566,66455     38900,59484,71450   
1231   jikl,bngr        su,mrc,frd     56566,32333,45000     59872,35673,48933 
123    unsrvl           tyt,frd,vlv    25000,34789,33443     29892,38922,36781 
正在尝试将此数据推入SQL Server。但在执行此操作时,会收到以下错误消息:

SQL Error [107090] [S0001]: HdfsBridge::recordReaderFillBuffer - Unexpected error encountered filling record reader buffer: HadoopExecutionException: Not enough columns in this line. 
我尝试的是:

有一篇在线文章,作者记录了类似的问题。我试图实现其中一个
在Excel中查找,发现两列有回车符
,但这也不方便


任何建议/帮助都将不胜感激。谢谢

如果我能够理解您的问题,那么您的,分离数据似乎被分成了不同的列,而不是
SQL-SERVER上的一列,类似于:

------------------------------
ID  |CSK |BRND |MKTCP |AMTCMP 
------------------------------
782    flatn grpl mrtn  hnd mrc nsn  345   56566 66455   38900 59484 71450   
1231   jikl bngr        su  mrc frd  56566 32333 45000   59872 35673 48933 
123    unsrvl           tyt frd vlv  25000 34789 33443   29892 38922 36781 
因此,如果您查看
Hive
,只有5列。而在
SQL-SERVER上时
相同。我认为这是因为您没有共享该模式。但如果是这种情况,那么您会看到传递的值超过5个。而模式定义只有5列。 因此,错误正在填充

参考此内容,尝试使用
字段终止符='\t'
创建
文件格式
, 比如:

创建外部文件格式
与(
格式\u TYPE=DELIMITEDTEXT
格式选项(
字段_终止符='\t',
|字符串分隔符=字符串分隔符
|第一行=整数--仅适用于SQL DW
|日期\格式=日期时间\格式
|使用_TYPE_DEFAULT={TRUE | FALSE}
|编码={'UTF8'|'UTF16'})
);
希望这有助于解决您的问题:)

CREATE EXTERNAL FILE FORMAT <name> 
WITH (   
   FORMAT_TYPE = DELIMITEDTEXT,    
   FORMAT_OPTIONS (             
        FIELD_TERMINATOR ='\t',
        | STRING_DELIMITER = string_delimiter 
        | First_Row = integer -- ONLY AVAILABLE SQL DW
        | DATE_FORMAT = datetime_format  
        | USE_TYPE_DEFAULT = { TRUE | FALSE } 
        | Encoding = {'UTF8' | 'UTF16'} )
  );