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格式存储时,才可以直接加载,否则会出现上述报错。



