电力建设网站,宏润建设集团有限公司网站,网站建设实践收获,哪里网站建设目录
hive是否执行mr
创建数据库指定目录
删除数据库 显示表信息/表结构
查看表示内部表还是外部表
拷贝一张已经存在的表的表模式#xff08;而无需拷贝数据#xff09;
复制一张表#xff08;包括数据#xff09; hive-cli 显示当前所在数据库
执行命令不进入hiv…目录
hive是否执行mr
创建数据库指定目录
删除数据库 显示表信息/表结构
查看表示内部表还是外部表
拷贝一张已经存在的表的表模式而无需拷贝数据
复制一张表包括数据 hive-cli 显示当前所在数据库
执行命令不进入hive交互模式
hive关联hbase表
创建外部表
查询数据保存到linux系统
创建内部表
创建parquet格式snappy压缩表
外部执行
清空表中所有行数据
导入数据
1.将文件放入表目录下
2.导入本地文件直接导入表中
3.导入hdfs上数据到表中
4.从别的表中查询插入相应的表
5.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中
UDF
Hive执行引擎设置
Hive指定yarn队列
多表插入
Hive手动创建目录导入数据表刷新partition hive是否执行mr
简单的查询就是只是select不带count,sum,group by这样的都不走map/reduce直接读取hdfs文件进行filter过滤。这样做的好处就是不新开mr任务执行效率要提高不少但是不好的地方就是用户界面不友好有时候数据量大还是要等很长时间但是又没有任何返回。
改这个很简单在hive-site.xml里面有个配置参数叫
hive.fetch.task.conversion
将这个参数设置为more简单查询就不走map/reduce了设置为minimal就任何简单select都会走map/reduce创建数据库指定目录
hive CREATE DATABASE financials LOCATION /my/preferred/directory COMMENT Holds all financial tables
删除数据库
hive DROP DATABASE IF EXISTS financialsIF EXISTS子句是可选的如果加了这个子句就可以避免因数据库finanacials不存在而抛出警告信息默认情况下Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表然后再删除数据库要么在删除命令的最后面加上关键字CASCADE这样可以使Hive自行先删除数据库中的表hive DROP DATABASE IF EXISTS financials CASCADE 显示表信息/表结构
hive DESCRIBE FORMATTED mydb.tableNameFORMATTED 详细表结构
查看表示内部表还是外部表
hive DESCRIBE extended crawler_hive2;
内部表 tableType:MANAGED_TABLE
外部表ableType:EXTERNAL_TABLE
拷贝一张已经存在的表的表模式而无需拷贝数据
CREATE TABLE IF NOT EXISTS mydb.employees2
LIKE mydb.employees
LOCATION xxxx/xxx/xxx
复制一张表包括数据
create table t_copy as select * from t_temp; hive-cli 显示当前所在数据库
hive set hive.cli.print.current.dbtrue;
hive (ods_database)取消显示
set hive.cli.print.current.dbfalse;
执行命令不进入hive交互模式
hive -e SQL 执行单条语句
hive -f /home/root/insert.sql 执行sql文件适合多条语句hive关联hbase表
hive集成hbase
hive 0.13版本 hbase1.2.5版本无法创建hive创建内部表关联提示找不到方法hive更新到2.1.1版本就可以了
hive创建外部表关联可以关联hbase已有的表CREATE EXTERNAL TABLE hive_high_keyword(key string, keyword string, adCode string) STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler WITH SERDEPROPERTIES ( hbase.columns.mapping:key,fn:keyword,fn:adCode )TBLPROPERTIES(hbase.table.name crawl:high_keyword);hive创建内部表关联只能关联hbase中没有的表删除hive表后hbase表也会删除并且通过hive创建hbase的内部表存储数据仍然存在hbse中
CREATE TABLE biz0728(key string, name string)
STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler
WITH SERDEPROPERTIES ( hbase.columns.mapping:key,fn:name )
TBLPROPERTIES(hbase.table.name biz0728); 创建外部表
create EXTERNAL TABLE u_info
(usrid STRING,age STRING,sex STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY \tLINES TERMINATED BY \n; 查询数据保存到linux系统
insert overwrite local directory /home/xxx/xxx select * from tableName; 创建内部表
create TABLE u_info
(usrid STRING,age STRING,sex STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY \tLINES TERMINATED BY \n; 创建parquet格式snappy压缩表
CREATE EXTERNAL TABLE IF NOT EXISTS tableName(xxx string) partitioned by (pt_xvc string) ROW FORMAT DELIMITED FIELDS TERMINATED BY \001 STORED AS PARQUET TBLPROPERTIES(parquet.compressionSNAPPY); 外部执行
hive -f xxx.sql 清空表中所有行数据
truncate table tablename;导入数据
1.将文件放入表目录下
表创建时会指定列分隔符(默认\t)和行分隔符(默认\n)将数据以指定形式放入,hive在hdfs存储目录下
测试导入数据如下a.txt里内容
user1 27 1
user2 28 1
user3 29 0
user4 30 1
user5 31 0
user6 32 1
user7 33 1
user8 34 0
我 是 测试
外 部 表步骤 用上面创建表命令创建一个内部或者外部表将a.txt里的内容导入到hdfs该表的目录下select * from u_info;即可查询到数据如果有两个txt查询时会合并到一起
2.导入本地文件直接导入表中
测试导入数据a.txt
load data local inpath a.txt into table u_info;a.txt,文件路径默认是用户的根目录如root用户读取目录为/home/root/a.txt推荐写绝对路径
load data local inpath /home/root/a.txt into table u_info;在hive中可以直接查看hdfs上的数据使用命令
dfs -ls /user/hive/warehouse/xxx ;3.导入hdfs上数据到表中
测试导入数据a.txt
load data inpath /a.txt into table u_info;与2中的区别是少了一个 local
4.从别的表中查询插入相应的表
创建表 test 并且以age进行分区
create table testc(
id int, name string
,tel string,sdf string)
partitioned by
(age int)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY \t
STORED AS TEXTFILE;查询另一个表的数据并且插入到test表
insert into table test
partition (age25)
select id, name, tel
from wyp;这里做一下说明 我们知道我们传统数据块的形式insert into table values字段1字段2这种形式hive是不支持的。 我们也可以在select语句里面通过使用分区值来动态指明分区
set hive.exec.dynamic.partition.modenonstrict;
insert into table test
partition (age)
select id, name,
tel, age
from wyp;// partition (age)指定创建表时候的列
// partition跟select 中查询的列名无关对应select查询最后一个列为test表中的age做partitiondescribe tablename 可以查看partition在哪个位置 这种方法叫做动态分区插入但是Hive中默认是关闭的所以在使用前需要先把hive.exec.dynamic.partition.mode设置为nonstrict 5.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中
在实际情况中表的输出结果可能太多不适于显示在控制台上这时候将Hive的查询输出结果直接存在一个新的表中是非常方便的我们称这种情况为CTAScreate table .. as select如下
create table test4
as
select id, name, tel
from wyp;UDF
UDFClass
public class Uppercase extends UDF
{
//参数列表可以使用多个参数public Text evaluate(Text s1){String retsults1.toString().toUpperCase();return new Text(retsult);}
}maven引用
dependencygroupIdorg.apache.hadoop/groupIdartifactIdhadoop-common/artifactIdversion2.7.1/version/dependencydependencygroupIdorg.apache.hive/groupIdartifactIdhive-exec/artifactIdversion1.2.1/version/dependency在hive交互界面输入
//添加自己写入的jar包到hive中
add jar /home/root/udf.jar;
// 将自己写的类创建为函数函数名为mytest
create temporary function mytest as com.xxx.hive.udf.Uppercase;
//查看所有可用函数会发现自己刚刚添加的函数
show functions;
//使用udf函数查询
select mytest(u_info.age) from u_info;使用函数查询后结果
704512 BJ-华龙达 北京市华龙达商贸公司
2457600 NNZQD 南宁市百花谷文化传播有限公司
21889024 LYYZCY.COM ztc
7979008 GX303YY200XLWW014 中国人民解放军第三0三医院不使用函数结果
704512 bj-华龙达 北京市华龙达商贸公司
2457600 nnzqd 南宁市百花谷文化传播有限公司
21889024 lyyzcy.com ztc
7979008 gx303yy200xlww014 中国人民解放军第三0三医院使用hive -i 参数在进入hive时自动初始化
$ cat hive_init
add jar /home/root/udf.jar;
create temporary function mytest as com.xxx.hive.udf.Uppercase;
$ hive -i hive_init
//进入hive交互界面就可直接使用函数了和前两者相比第三种方式直接将用户的自定义函数作为注册为内置函数未来使用起来非常简单但这种方式也非常危险一旦出错将是灾难性的因此建议如果不是特别通用并且固化下来的函数还是使用前两种方式比较靠谱。
Hive执行引擎设置
set hive.execution.enginemr;
Hive指定yarn队列
set mapred.job.queue.namequeue3;多表插入
FROM tableName1
INSERT OVERWRITE TABLE tableName2SELECT column1,colum2 GROUP BY year
INSERT OVERWRITE TABLE tableName3SELECT column1,count(1)WHERE column2 100CTAS(CREATE TABLE... AS SELECT) 把查询到的结果创建一个新表保存起来原子性操作查询失败表不会被创建
CREATE TABLE tableName
AS
SELECT column1,column2
FROM tableName2
Hive手动创建目录导入数据表刷新partition
alter table crawler_other_article_hive add partition(created_date201801) location hdfs://xxx:8020/user/hive/warehouse/ods_crawler.db/crawler_other_article_hive/created_date201801;删除表分区
ALTER TABLE testc DROP PARTITION (pt_date20181212)