目录
一、问题描述
二、定位原因
三、解决方案
1、建表分隔符和导入时的分隔符不一致
1.修改建表分隔符
2.建表时直接指定好分隔符
3.针对分区表和无分区表的区别
2、字段的数据类型不一致
3、文件类型和压缩格式不对(ORC、TEXTFILE...)
4、字段值包含了分隔符,可以换一个分隔符试试
一、问题描述
hive建表ddl:
代码语言:javascript复制create table table_name(
a bigint,
b string
)
comment 'xx表'
partitioned by (`ds` string) ;
datax自定义json:
代码语言:javascript复制{
"job": {
"content": [
{
"reader": {
"name": "postgresqlreader",
"parameter": {
"connection": [
{
"jdbcUrl": ["jdbc:postgresql://ip:host/db"],
"querySql": ["select a,b from table_name"],
}
],
"username": "name",
"password": "pwd"
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://ip:host",
"fileType": "text",
"path": "/user/hive/warehouse/db.db/table_name/ds=${ds}",
"fileName": "table_name",
"column": [
{"name":"a","type":"bigint"},
{"name":"b","type":"string"}
],
"writeMode": "append",
"fieldDelimiter": "t",
"encoding": "utf-8"
}
}
}],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
执行后在hue上查询该表数据发现所有数据都为null
二、定位原因
可能原因如下:
1.建表分隔符和导入时的分隔符不一致
2.字段的数据类型不一致
3.文件类型和压缩格式不对(ORC、TEXTFILE...)
4.字段值包含了分隔符,可以换一个分隔符试试
三、解决方案
1、建表分隔符和导入时的分隔符不一致
1.修改建表分隔符
代码语言:javascript复制alter table ds.ods_user_info_dd set serdeproperties('field.delim'='t');
2.建表时直接指定好分隔符
代码语言:javascript复制create table table_name(
a bigint,
b string
)
comment 'xx表'
partitioned by (`ds` string)
row format delimited fields terminated by 't';
3.针对分区表和无分区表的区别
2、字段的数据类型不一致
修改字段类型与源表一致
代码语言:javascript复制alter table 表名 change column 原字段名 现字段名 字段类型;
3、文件类型和压缩格式不对(ORC、TEXTFILE...)
代码语言:javascript复制--修改为ORC格式
ALTER TABLE 表名 SET FILEFORMAT ORC
--修改为Text
ALTER TABLE 表名 SET FILEFORMAT TEXTFILE