hive 使用笔记(partition; HDFS乱码;日期函数)

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

  CURRENT_DATE 和 CURRENT_TIMESTAMP

  

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('73',key)) from dual;

9. hive文件上传后,中文显示为乱码

因为hive的数据是保存在HDFS里的,所以保存文件时,选择UTF8即可。

10. Hive 删除列

alter table product replace columns(name string);  

--  原列为id, name

-- 会把列往前移动,前面的列被抹掉,但文件格式不变,只是不显示

11. impala 和hive 相通,impala是计算引擎

1)invalidate metadata;

  • 如果在hive里面做了新增、删除数据库、表或者数据等更新操作,需要执行在impala里面执行此命令,才能将hive的数据同步impala; 
  • 如果直接在impala里面新增、删除数据库、表或者数据,会自动同步到hive,无需执行任何命令。

2)impala sql 只能写insert into,不能overwrite

原文地址:https://www.cnblogs.com/skyEva/p/5044171.html