hive学习笔记-数据操作

hive数据操作

hive命令行操作

hive -d --define <key=value> 定义一个key-value可以在命令行中使用

hive -d database <databasename>    指定使用的数据库

hive -e “hql”    不需要进入cli执行hql语句,可以在脚本中使用

hive -f fileName 将hql放到一个file文件中执行,sql语句来自file文件

hive -h hostname 访问主机,通过主机的地址

hive -H --help 打印帮助信息

hive -H --hiveconf <property=value> 使用的信息可以在这里定义property的value

hive -H --hivevar <key-value> 使用可变的命令,将一个命令重新赋值使用

hive -i filename hive的初始化文件,可以将hive的一些初始化信息放到这个文件中,比如使用自定义函数的时候可以将相应的jar包目录写进去

hive -S --silent 在shell下进入安静模式,不需要打印一些输出信息

hive -v --verbose 打印执行的详细信息,比如执行的SQL语句

实例:查询test表,并且将打印的结果放到/home/data/select_result.txt中

hive -S -e "select * from test" > /home/data/select_result.txt

含有执行的SQL语句

hive -v -e "select * from test" > /home/data/select_result.txt

执行放在文件中的SQL

hive -f /home/colin/hive-1.2.1/select_test

hive cli中使用list查看分布式缓存中的file|jar|archive(比如通过add jar添加进去的,可以通过list jar查看添加到分布式缓存中的jar包)

hive cli中使用source执行指定目录下的文件,比如执行指定目录下的一个sql文件 source /home/colin/hive-1.2.1/select_test

hive操作变量

配置变量

set val_Name=val_Value;

${hiveconf:val}

查看linux下的环境变量

${env:变量名称},env查看所有的环境变量

实例定义变量val_test,设置为yang,作为查询语句条件

set val_test=yang;

select * from test2 where name=‘${hiveconf:val_test}‘;

查看

HIVE_HOME的环境变量

select ‘${env:HIVE_HOME}‘ from test;

注:test表中有多少条记录,打印多少次路径

hive数据加载

内表数据加载

创建表时加载

create table tableName as select col_1,col_2... from tableName2;

创建表的时候指定数据位置

create table tablename(col_name typye comment ...) location ‘path‘;(path为hdfs中的路径,注意这个path是文件上层的目录,也就是说指定文件到上层目录,目录下的数据都会作为该表的数据。并且这种方式不会在hive/warehouse下创建该表的目录,因为他会把hdfs中指定的path作为该表目录操作    )

注:这种指定方式,在内表中会将数据的拥有权给当前表,当表删除的时候数据也会删除(连同上层目录)

本地数据加载

load data local inpath ‘localpath‘ [overwrite] into table tableName;

加载HDFS中数据

load data inpath ‘hdfspath‘ [overwrite] into table tableName;

注意:这种方式,是将hdfs中指定位置的数据移动到表的目录下

使用Hadoop命令拷贝数据到指定位置(hive中shell执行和Linux中shell执行)

hdfs dfs -copyFromLocal /home/data /data

hive shell中 dfs -copyFromLocal /home/data data(hadoop命令直接可以在hive中执行,同样hive也可以执行linux命令,但是需要在命令前加上!)

由查询语句加载数据

insert [overwrite|into] table tableName select col1,col2... from tablenName2 where ...

from tableNable2 insert [overwrite|into] table tableName select col1,col2... where ...

select col1,col2.. from tableName2 where ... insert [overwrite|into] table tableName;

注:可以select的字段名字可以和table中不同,hive在数据加载时候不会进行字段检测和类型检测。只有在查询的时候检测

外表数据加载

创建表的时候指定数据位置(因为外表对数据没有控制权)

create external table (col_Name type comment...) location ‘path‘;

通过insert语句,和内表一样

通过hadoop命令,和内表一样

hive分区表数据加载

内部分区表和内表数据加载类似

外部分区表和外表数据加载类似

不同之处是指定分区;在外部分区表中数据存放的层次要表的分区一致,如果分区表下没有新增分区,即使目录下有数据也是查不到的,当满足目录结构对应的时候需要添加分区 alter table tableName add partition (dt=20150820)。

load data local inpath ‘path‘ [overwrie] into table tableNmme partition(pName=‘..‘);

insert [overwrite|into] table tableName partition(pName=‘..‘) select col1,col2.. from tableName2 where ...

注意:row format分隔符如果设定多个字符起分割作用,只有第一个字符有作用

load数据的时候,字段类型不能相互转换,否则会加载为NULL

插入数据时候如果selct后的类型也不能相互转换,否则插入为NULL;

在HDFS中NULL是以\N来显示的

Hive数据导出

导出方式:

Hadoop命令的方式

get

text

通过Insert....DIRECTOR

insert overwrite [local] directory ‘path‘ [row format delimited fields terminated by ‘\t‘ lines terminated by ‘\n‘] select col1,col2.. from tableName

注:如果使用local是导到本地,否则是HDFS中,row format只对导到本地起作用(在1.2.1hive中已经能够在HDFS中使用row format了

)。

通过Shell命令加管道

通过第三方工具

实例:

hdfs dfs -get /user/hive/warehouse/test4/* ./data/newdata

hdfs dfs -text /user/hive/warehouse/test5/* > ./data/newdata(可以对多种格式进行输出,压缩、序列化等)

hive -S -e "select * from test4" | grep yang > ./data/newdata

hive动态分区

分区不确定,需要从查询结果中查看。不需要为每个分区都使用alter table添加

使用动态分区需要配置的参数:

set hive.exec.dynamic.partition=true;//使用动态分区

set hive.exec.dynamic.partition.model=nonstrick;//分区有两种方式:一种是strick有限制分区,需要有一个静态分区,且放在最前面。一种就是nostrick无限制模式

set hive.exec.max.dynamic.partitions.pernode=10000;//每个节点生成动态分区的最大个数

set hive.exec.max.dynamic.partitions=100000;//生成动态分区的最大个数

set hive.exec.max.created.fiels=150000;//一个任务最多可以创建的文件数目

set dfs.datanode.max.xcievers=8192;//限定一次最多打开的文件数

insert overwrie table test7 partition(dt) select name,time as dt from test6;

表属性操作

修改表名:

alter table tableName rename to newName

修改列明:

alter table tableName change column old_col new_col newType comment ‘....‘ after colName(如果要为第一列则将aftercolName 改为first)

增加列:

alter table tableName add columns (c1 type comment ‘..‘,c2 type comment ‘...‘)

修改表属性

查看表属性

desc formatted tablename

这个是可以要修改的表的属性信息

Table Parameters:

COLUMN_STATS_ACCURATE    false

last_modified_by        colin

last_modified_time      1440154819

numFiles                0

numRows                 -1

rawDataSize             -1

totalSize               0

transient_lastDdlTime    1440154819

修改属性:

alter table tableName set tblproerties(‘propertiesName‘=‘.....‘);

比如修改comment

alter table tableName set tblproperties("comment"="xxxxx");

修改序列化信息:

无分区表

alter table tableName set serdepropertie(‘fields.delim‘=‘\t‘);

有分区表

alter table tableName partition(dt=‘xxxx‘) set serdeproperties(‘fields.delim‘=‘\t‘);

修改Location:

alter table tableName [partition(..)] set localtion ‘path‘;

内部表外部表转换:

alter table tableName set tblproperties (‘EXTERNAL‘=‘TRUE|FALSE‘);必须大写EXTERNAL

更多属性操作查看:https://cwiki.apache.org/confluence/display/Hive/Home

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 18:35:43

hive学习笔记-数据操作的相关文章

MongoDB学习笔记(数据操作)

1.  批量插入:     以数组的方式一次插入多个文档可以在单次TCP请求中完成,避免了多次请求中的额外开销.就数据传输量而言,批量插入的数据中仅包含一份消息头,而多次单条插入则会在每次插入数据时封装消息头数据.对于数据导入而言,我们可以使用mongoimport完成. 2.  数据库清除:    > db.users.remove()     以上命令将会清除users集合中的所有数据,但是不会删除集合本身以及关联的索引.数据删除操作是不可恢复的,一旦删除就物理的删除了.对于全集合清除这种c

hive学习笔记-表操作

Hive数据类型 基本数据类型 tinyint,smallint,int,biging,float,double,decimal,char,varchar,string,binary,boolean,timestamp,date, 引用数据类型 Array:同样数据类型组合的数组,使用array[1]訪问 MAP:Key-value键值对,通过键进行訪问,使用map['key']訪问 STRUCT:结构体类型,用来存储不同数据类型的数据,是用struct.key訪问 类型不区分大写和小写 Hiv

memcached学习笔记5--socke操作memcached 缓存系统

使用条件:当我们没有权限或者不能使用服务器的时候,我们需要用socket操作memcached memcached-client操作 特点: 无需开启memcache扩展 使用fsocketopen()套接字连接memcached 同样执行CRUD require_once(CLASS_PATH.'memcached-client.php');//CLASS_PATH 是我定义的类文件文件夹路径 $mc = new memcached( array( 'servers' => array( '1

树莓派学习笔记——SQLite操作简述

0 前言 本文介绍如何在树莓派中利用SQLite数据库保存CPU温度数据.SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景按需说明.本文介绍的SQLite技巧也可以在其他平台使用,并不局限于树莓派. 本文继续折腾树莓派温度,需要从中可以玩出新花样. [相关博文] [树莓派学习笔记--索引博文]--更多博文请关注. [树莓派学习笔记--获取树莓派CPU温度] [树莓派学习笔

memcached学习笔记3--telnet操作memcached

方式: 一.telnet访问memcached缓存系统(主要用于教学,不讨论) telnet 127.0.0.1 11211     => telnet IP地址 端口号 //往Memcached中存放数据 add username 0 60 5       => add:添加命令 username:key的名字(是以key/value存放) 0:标示,一般不用管 60:缓存多长时间,超过时间自动删除,单位(秒) s 5: 表示放入的数据大小 注意:如果一个key已经存在,再要添加数据到这个k

hive 学习笔记精简

创建表: drop table t create table if not exists t (t string) partitioned by (log_date string) row format delimited fields terminated by '\t' lines terminated by '\n' create table t1 like t create table t2 as select * from t //如果加多余的字段或者加group by等关键字会报错

Blender学习笔记 | 02 | 操作

Shift 点击不同图层 同时显示多图层物件 z 切换 Solid / Wireframe 视图模式 点选物件后M 移动到图层选项 Ctrl + 鼠标左键拖动 自由全选物件 B 方形区域圈选物件 Tab Object / Edit Mode 切换 T 开 / 关 侧栏 Ctrl + Tab 编辑状态下切换编辑对象 E Extrude Region 推挤区域.以发现为轴线. X 删除物件菜单 Blender学习笔记 | 02 | 操作,布布扣,bubuko.com

[Python] Python 学习 - 可视化数据操作(一)

Python 学习 - 可视化数据操作(一) GitHub:https://github.com/liqingwen2015/my_data_view 目录 折线图 散点图 随机漫步 骰子点数概率 文件目录 折线图 cube_squares.py import matplotlib.pyplot as plt x_values=list(range(1, 5000)) y_values=[pow(x, 3) for x in x_values] plt.scatter(x_values, y_v

计算机操作系统学习笔记_1_操作系统概述

操作系统概述 一.操作系统的概念.特征.功能和提供的服务 1.操作系统的概念     操作系统是计算机系统中最重要.最基本的系统软件,操作系统位于硬件和用户程序之间.    对于用户来讲:它能向用户提供使用计算机的接口;    从资源管理角度来看:它能管理计算机软硬件资源,提高其利用率;    再者,利用虚拟机技术(如WMWare,VirtualBox,Java虚拟机等),扩展了计算机的功能和使用范围.     因此,操作系统的定义为:操作系统是控制和管理计算机软.硬件资源,以尽可能合理.高效的