HIVE-SQL_SERVER: HadoopExecutionException: 此行中没有足够的列

HIVE-SQL_SERVER: HadoopExecutionException: Not enough columns in this line

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

Table结构:

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 服务器。但是在这样做时,收到以下错误消息:

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

What I tried:

有一篇在线文章,作者记录了类似的问题。我尝试实现其中之一 Looked in Excel and found two columns that had carriage returns 但这也派不上用场。

任何 suggestion/help 将不胜感激。谢谢

如果我能够理解您的问题,那么您的 , 分隔数据似乎被分为不同的列,而不是 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 列。 所以错误正在填充。

参考此 Document by MS 并尝试用 FIELD_TERMINATOR ='\t' 创建一个 FILE_FORMAT, 喜欢:

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'} )
  );

希望对解决您的问题有所帮助:)