对hcat作业类型使用tdch时出现异常不支持日期列

qcbq4gxm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(392)

我运行的查询是:

hadoop com.teradata.hadoop.tool.TeradataExportTool  -url     
 jdbc:teradata://tdx/TMODE=ANSI,CHARSET=UTF8,database=db  -username  
 xxx -password xxx -jobtype hcat -sourcetable customers -
 sourcedatabase xxx -nummappers 1 -targettable customers

运行作业时,出现以下异常:
com.teradata.connector.common.exception.connectorexception:com.teradata.connector.hive.utils.hiveschemautils.lookuphivedatatypebyname(hiveschemautils)不支持日期字段数据类型。java:475)在com.teradata.connector.hcat.utils.hcatschemautils.getrecordschema(hcatschemautils。java:396)在com.teradata.connector.hcat.processor.hcatinputprocessor.inputprocessor(hcatinputprocessor)。java:89)在com.teradata.connector.common.tool.connectorjobrunner.runjob(connectorjobrunner。java:116)在com.teradata.connector.common.tool.connectorexporttool.run(connectorexporttool。java:62)在org.apache.hadoop.util.toolrunner.run(toolrunner。java:70) 在org.apache.hadoop.util.toolrunner.run(toolrunner。java:84)在com.teradata.hadoop.tool.teradataexporttool.main(teradataexporttool。java:29)我有什么办法克服这个问题吗?配置单元表的板条箱表语句是:

CREATE EXTERNAL TABLE `customers`(                                                  
`row_id` string,                                                                         
`source_start_date` date,                                                                
`source_start_timestamp` timestamp,                                                      
`target_start_timestamp` timestamp,                                                      
`target_start_date` date,                                                                
`source_end_date` date,                                                                  
`source_end_timestamp` timestamp,                                                        
`target_end_date` date,                                                                  
`target_end_timestamp` timestamp,                                                        
`active` string,                                                                         
`is_deleted` string,                                                                     
`status_flag` string,                                                                    
`first_name` string,                                                                         
`last_name` string,                                                                          
`city` string,                                                                                  
)                                                                         
PARTITIONED BY (                                                                               
   `join_dt` date)                                                                           
ROW FORMAT SERDE                                                                               
   'org.apache.hadoop.hive.ql.io.orc.OrcSerde'                                                  
STORED AS INPUTFORMAT                                                                          
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'                                            
OUTPUTFORMAT                                                                                   
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'                                           
LOCATION                                                                                       
   'xxx'   
TBLPROPERTIES (                                                                                
 'transient_lastDdlTime'='1461674429')

如有任何提示,我们将不胜感激。

cwtwac6a

cwtwac6a1#

我没有办法让约会成功,但我找到了一个工作。我创建一个临时表,将日期列转换为字符串。e、 例如,您创建了如下表:

Create table person ( person_id int, joining_date date);

从该表中,可以创建temp hive表,如下所示:

Create table temp_person as select person_id, cast(joining_date as string) from person;

在目标teradata端,可以将数据类型指定为日期:

Create multiset table person ( person_id int, joining_date date);

现在可以像这样运行作业:

hadoop com.teradata.hadoop.tool.TeradataExportTool  -url     
jdbc:teradata://tdx/TMODE=ANSI,CHARSET=UTF8,database=db  -username  
xxx -password xxx -jobtype hcat -sourcetable temp_person -
sourcedatabase xxx -nummappers 1 -targettable person

这个很好用。但是由于复制表的开销,性能会稍微降低。

相关问题