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'} )
);
希望对解决您的问题有所帮助:)
我有一个具有以下结构和数据的配置单元 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'} )
);
希望对解决您的问题有所帮助:)