目录
目录
一、背景
二、代码
1.hive 建表语句
2.datax自定义json
3.查询语句
三、定位问题
四、解决方案
1.load data
2.设置参数
3.文件格式
一、背景
datax同步postgre库表数据到hive表,同步完成后select报错
java.io.IOException: java.lang.IllegalArgumentException: Bucket ID out of range: -1
二、代码
1.hive 建表语句
代码语言:javascript复制create table if not exists hive_table_name(
col1 string,
col2 srting)
row format delimited fields terminated by 't'
stored as orc;
2.datax自定义json
代码语言:javascript复制{
"job": {
"content": [
{
"reader": {
"name": "postgresqlreader",
"parameter": {
"connection": [
{
"jdbcUrl": ["jdbc:postgresql://ip:port/db"],
"querySql": ["select col1,col2 from pg_table_name"],
}
],
"username": "user",
"password": "pwd"
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"defaultFS": "hdfs://ip:port",
"fileType": "orc",
"path": "/user/hive/warehouse/db_name.db/hive_table_name",
"fileName": "hive_table_name",
"column": [
{"name":"col1","type":"string"},
{"name":"col2","type":"string"}
],
"writeMode": "append",
"fieldDelimiter": "t",
"encoding": "utf-8"
}
}
}],
"setting": {
"speed": {
"channel": "1"
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
}
}
}
3.查询语句
代码语言:javascript复制select * from hive_table_name;
三、定位问题
hive3.1默认是桶表,但是我没有分桶,桶数量就是-1,这里就会报错。
定位原因为hdfs文件在hive中不可访问,没有加载到hive表中。
hadoop3.1建表默认创建acid表,acid表只支持ORC格式
四、解决方案
1.load data
手动将hdfs文件映射到hive表中
代码语言:javascript复制load data inpath '/user/hive/warehouse/db_name.db/hive_table_name'
overwrite into table hive_table_name;
2.设置参数
hive.fetch.task.conversion
这个属性有3个可选的值:
none :关闭fetch task优化
minimal:只在select *、使用分区列过滤、带有limit的语句上优化
more:在minimal的基础上,select 不仅可以是*,还可以单独选择几列,并且fitler也不再局限于分区字段,同时支持虚拟列(别名)
代码语言:javascript复制set hive.fetch.task.conversion=none;
3.文件格式
建表语句建成textfile格式(一劳永逸)
代码语言:javascript复制create table if not exists hive_table_name(
col1 string,
col2 srting)
row format delimited fields terminated by 't'
stored as textfile;