将 TDCH 用于 hcat 作业类型的异常。不支持 DATE 列
Exception using TDCH for hcat job type. DATE column not supported
我运行的查询是:
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: 不支持 DATE 字段数据类型
在 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.inputPreProcessor(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)
有什么办法可以解决这个问题吗?
配置单元 table 的 crate table 语句是:
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')
感谢任何指点。
我找不到让日期有效的方法,但我找到了解决方法。我创建了一个临时 table 并将日期列强制转换为字符串。
例如,您创建了一个 table,例如:
Create table person ( person_id int, joining_date date);
从这个table你可以创建临时配置单元table像:
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
这很好用。但是由于复制的开销table,性能略有下降。
我运行的查询是:
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: 不支持 DATE 字段数据类型 在 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.inputPreProcessor(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) 有什么办法可以解决这个问题吗? 配置单元 table 的 crate table 语句是:
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')
感谢任何指点。
我找不到让日期有效的方法,但我找到了解决方法。我创建了一个临时 table 并将日期列强制转换为字符串。 例如,您创建了一个 table,例如:
Create table person ( person_id int, joining_date date);
从这个table你可以创建临时配置单元table像:
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
这很好用。但是由于复制的开销table,性能略有下降。