HIVE-SQL_SERVER: HadoopExecutionException: недостаточно столбцов в этой строке - PullRequest
1 голос
/ 17 февраля 2020

У меня есть таблица улья со следующей структурой и данными:

Структура таблицы:

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 

Попытка передать sh эти данные на сервер SQL. Но при этом выдается следующее сообщение об ошибке:

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

Что я пробовал:

Есть онлайн-статья, в которой автор задокументировал подобные проблемы. Я попытался реализовать один из них Looked in Excel and found two columns that had carriage returns, но это также не пригодилось.

Буду очень признателен за любые предложения / помощь. Спасибо

1 Ответ

1 голос
/ 18 февраля 2020

Если я в состоянии понять вашу проблему, то кажется, что ваши , данные разделены на различные столбцы, а не один столбец на 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 столбцов. Итак, ошибка заполняется.

Обратитесь к этому Документу от MS и попробуйте создать FILE_FORMAT с FIELD_TERMINATOR ='\t', например:

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

Надеюсь, что это поможет решить вашу проблему:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...