6. insert 语句
1) 因为目标表有partition, 所以刚开始我使用的语句是
insert overwrite table sa_r_item_sales_day_week_month partition(part=FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd'))
select ...
然而报错:
Error while compiling statement: FAILED: ParseException cannot recognize input near 'FROM_UNIXTIME' '(' 'UNIX_TIMESTAMP' in constant
原因: 语法不对
2) 正确语法:
insert overwrite table sa_r_item_sales_day_week_month partition(part='2015-12-17')
或者
insert overwrite table sa_r_item_sales_day_week_month partition(part='${part}') --part就是你穿进去的参数
??
变量在哪赋值或声明 尚不清楚
7. datetime 并没有这个类型
time
FROM_UNIXTIME(UNIX_TIMESTAMP()) 可以获得现在的年月日时分秒;
2016-01-21 10:41:26 |
8. 分号字符
分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:
select concat(key,concat(';',key)) from dual;
但HiveQL在解析语句时提示:
FAILED: Parse Error: line 0:-1 mismatched input '<EOF>' expecting ) in function specification
解决的办法是,使用分号的八进制的ASCII码进行转义,那么上述语句应写成:
select concat(key,concat('\073',key)) from dual;
9. hive文件上传后,中文显示为乱码
因为hive的数据是保存在HDFS里的,所以保存文件时,选择UTF8即可。