用kettle加工,加载数据到impala上
- 首先确认数据来源,例如 DB2数据库里的某些数据加工一下 传到impala
表输入组件里加工数据EXTRACT
输出到HDFS的指定路径(impala表的LOCATION
)
- kettle加工数据上传到HDFS指定路径下
impala表数据不能update和delete,若要把实时数据加载进impala表,对于数据量较大的表(可以在impala里创建 临时表TEXTFILE
格式的,正式表PARQUET
格式的 并分区;每次实时加工的数据传到临时表里,再把临时表的数据overwrite
到正式表)
TEXTFILE
格式的表在创建时要指定字段分隔符 (一般常用ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
或者 ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
)
kettle 加工 拖拽相关组件如下图:
若源数据量很大,例如订单数据每天千万条,每次要更新最近3天的数据,可以按日期生成txt文件,每天一个文件, FILE_NAME
自定义文件目录,根据日期指定数据存放在HSFS上的位置'hdfs://IP:8020/user/hive/warehouse/test.db/order_tmp/dt_day_id='||substr(char(DT_DAY_ID),1,8)||'/order_'||substr(char(DT_DAY_ID),1,8) FILE_NAME
数据放在按日期命名的文件下/user/hive/warehouse/test.db/order_tmp/dt_id=20190301/order_20190301.txt
如果数据量不大一个txt文件即可
输入impala表指定的分隔符,编码选择UTF-8,如果分隔符不一致会造成传入NULL数据(另外如果分隔符是特殊字符要转义),编码不是UTF-8会乱码
如果源字段是string型,选择最小宽度可以一键快速搞定去掉左右两端空格。
- 关于impala的操作
远程到impala服务器上,输入impala-shell
进入impala数据库环境
show databases; ##查看所有数据库
use test; ##连接test库
show tables; ##查看test库下所有表
show create table test.order_tmp; ##查看test.order_tmp表创建的表结构和格式
create table test.order_tmp(
order_cd STRING,
row_cd STRING,
dt_id Int,
order_qty STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
WITH SERDEPROPERTIES ('field.delim'=',', 'serialization.format'=',')
STORED AS TEXTFILE
LOCATION 'hdfs://dcbigdatamgr2:8020/user/hive/w