这是我的样本数据集。
#cust_id, #cust_name, #odr_date,#shipdt,#Courer,#recvd_dt,#returned or not,#returned dt,#reson of return
GGYZ333519YS,Allison,01-01-2017,03-01-2017,Fedx,06-01-2017,**no**,null,null
GGYZ333519YS,Allison,08-01-2017,10-01-2017,Delhivery,13-01-2017,**yes**,15-01-2017,Damaged Item
并创建表结构。
create table order
(
cust_id string,
cust_name string,
order_date date,
ship_date date,
courier_name string,
received_date date,
is_returned boolean,
returned_date date,
reason string
)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;
使用load命令将数据加载到订单表中。为日期字段和布尔字段columun获取NULL。任何想法?如何解决这个问题呢 。
答案 0 :(得分:1)
日期应采用兼容格式'yyyy-MM-dd',以正确插入DATE。并且BOOLEAN应该是(TRUE,FALSE)之一。
解决方案是将列定义为STRING,并在选择过程中对其进行转换,或者在将输入数据加载到表之前对其进行转换。
如果列定义为“ STRING”,则可以在选择期间转换数据:
select
from_unixtime(unix_timestamp( returned_date ,'dd-MM-yyyy'), 'dd-MMM-yyyy') as returned_date,
case when is_returned like '%no%' then false
when is_returned like '%yes%' then true
--else will be null by default
end as is_returned