1. 上传CSV文件到hdfs
hadoop fs -put dwb_pulsar_c_inappropriate_hour.csv /user/root/data/
2. 创建textfile格式的临时表和orc格式的正式表
- textfile临时表
CREATE TABLE `tmp.dwb_pulsar_c_inappropriate_hour`(
`session_id` string COMMENT '会话id',
`staff_id` string COMMENT 'B端用户id',
`user_id` string COMMENT 'C端用户id',
`root_org_id` string COMMENT '总组织机构id',
`org_id` string COMMENT '组织机构id',
`origin_type` string COMMENT '发起类型',
`refer_type` string COMMENT '创建来源类型',
`session_create_time` string COMMENT '会话创建时间',
`c_inappropriate_reason` string COMMENT 'C标记不合适原因',
`c_inappropriate_time` string COMMENT 'C标记不合适时间')
PARTITIONED BY (
`dt` int COMMENT '日期分区',
`hour` string COMMENT '小时分区')
row format delimited fields terminated by ','
stored as textfile;
- orc正式表
CREATE TABLE `dwb.dwb_pulsar_c_inappropriate_hour`(
`session_id` string COMMENT '会话id',
`staff_id` string COMMENT 'B端用户id',
`user_id` string COMMENT 'C端用户id',
`root_org_id` string COMMENT '总组织机构id',
`org_id` string COMMENT '组织机构id',
`jd_no` string COMMENT '职位编号',
`cv_no` string COMMENT '简历编号',
`origin_type` string COMMENT '发起类型',
`refer_type` string COMMENT '创建来源类型',
`session_create_time` string COMMENT '会话创建时间',
`c_inappropriate_reason` string COMMENT 'C标记不合适原因',
`c_inappropriate_time` string COMMENT 'C标记不合适时间')
PARTITIONED BY (
`dt` int COMMENT '日期分区',
`hour` string COMMENT '小时分区')
row format delimited fields terminated by ','
stored as orc;
3. 载入hdfs到临时数据表
load data inpath '/user/root/data/dwb_pulsar_c_inappropriate_hour.csv' into table tmp.dwb_pulsar_c_inappropriate_hour partition(dt=20220316, hour=9);
4. 临时表转到正式表
insert into table
dwb.dwb_pulsar_c_inappropriate_hour partition(dt, hour)
select * from tmp.dwb_pulsar_c_inappropriate_hour;
实现存储格式的转化,如果不使用间接转化,直接load data 到正式ORC表,会出现异常
Caused by: java.io.IOException: Malformed ORC file
原因:
ORC格式是列式存储的表,不能直接从本地或hdfs中的csv文件导入数据,只有当数据源表也是ORC格式存储时,才可以直接加载,否则会出现上述报错。