2016-05-04 11 views
2
unterstützt

Die Abfrage, die ich laufen ist:Ausnahme mit TDCH für den Jobtyp hcat. DATE-Spalte nicht

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 

Während der Job läuft, bekomme ich diese Ausnahme:

com.teradata.connector.common.exception.ConnectorException: DATE Felddaten Typ nicht bei com.teradata.connector.hive.utils.HiveSchemaUtils.lookupHiveDataTypeByName (HiveSchemaUtils.java:475) bei com.teradata.connector.hcat.utils.HCatSchemaUtils.getRecordSchema unterstützt (HCatSchemaUtils.java:396) an com.teradata.connector.hcat.processor.HCatInputProcessor.inputPreProcessor (HCatInputProcessor.ja VA: 89) bei com.teradata.connector.common.tool.ConnectorJobRunner.runJob (ConnectorJobRunner.java:116) bei com.teradata.connector.common.tool.ConnectorExportTool.run (ConnectorExportTool.java:62) bei org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:70) bei org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:84) bei com.teradata.hadoop.tool.TeradataExportTool. main (TeradataExportTool.java:29) Gibt es eine Möglichkeit, das Problem zu umgehen? Die Kiste Tabelle Anweisung der Stockes Tabelle ist:

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

Alle Zeiger geschätzt werden.

+0

mit hcatalog Datum Typ wird nicht unterstützt, auch wenn Sie Tabelle bei Hive auch erstellen ... besser ist die Verwendung von TDCH, die Datum Datentyp unterstützt –

Antwort

1

Es gab keine Möglichkeit, dass ich das Datum funktionierte, aber ich fand eine Arbeit herum. Ich erstelle eine temporäre Tabelle, in der die Datumsspalten in String enthalten sind. zB erstellt eine Tabelle wie:

Create table person (person_id int, joining_date date); 

Aus dieser Tabelle können Sie Temp hive Tabelle erstellen wie:

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

In der Ziel teradata Seite Sie den Datentyp als Datum geben kann:

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

Und jetzt können Sie den Job wie laufen:

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 

Das funktioniert gut. Aufgrund des Overheads des Kopiertisches verlangsamt sich die Leistung jedoch ein wenig.