Hadoop Hive sql语法详解(2)

2019-04-09 14:22

hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');

增加/更新列

?ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)

? ADD是代表新增一字段,字段位置在所有列后面(partition列前) REPLACE则是表示替换表中所有字段。

增加表的元数据信息

?ALTER TABLE table_name SET TBLPROPERTIES table_properties table_properties:

:[property_name = property_value…..]

?用户可以用这个命令向表中增加metadata

改变表文件格式与组织

?ALTER TABLE table_name SET FILEFORMAT file_format

?ALTER TABLE table_name CLUSTERED BY(userid) SORTED BY(viewTime) INTO num_buckets BUCKETS

?这个命令修改了表的物理存储属性

创建/删除视图

?CREATE VIEW [IF NOT EXISTS] view_name [ (column_name [COMMENT column_comment], ...) ][COMMENT view_comment][TBLPROPERTIES (property_name = property_value, ...)] AS SELECT ?增加视图

?如果没有提供表名,视图列的名字将由定义的SELECT表达式自动生成 ?如果修改基本表的属性,视图中不会体现,无效查询将会失败 ?视图是只读的,不能用LOAD/INSERT/ALTER ?DROP VIEW view_name ?删除视图

创建数据库

?CREATE DATABASE name

显示命令

?show tables;

?show databases; ?show partitions ;

?show functions

?describe extended table_name dot col_name

2. DML 操作:元数据存储 hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。 DML包括:INSERT插入、UPDATE更新、DELETE删除 ?向数据表内加载文件

?将查询结果插入到Hive表中 ?0.8新特性 insert into

向数据表内加载文件

?LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

?Load 操作只是单纯的复制/移动操作,将数据文件移动到 Hive 表对应的位置。 ?filepath

?相对路径,例如:project/data1

?绝对路径,例如: /user/hive/project/data1

?包含模式的完整 URI,例如:hdfs://namenode:9000/user/hive/project/data1 例如:

hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

加载本地数据,同时给定分区信息

?加载的目标可以是一个表或者分区。如果表包含分区,必须指定每一个分区的分区名 ?filepath 可以引用一个文件(这种情况下,Hive 会将文件移动到表所对应的目录中)或者是一个目录(在这种情况下,Hive 会将目录中的所有文件移动至表所对应的目录中) LOCAL关键字

?指定了LOCAL,即本地

?load 命令会去查找本地文件系统中的 filepath。如果发现是相对路径,则路径会被解释为相对于当前用户的当前路径。用户也可以为本地文件指定一个完整的 URI,比如:file:///user/hive/project/data1.

?load 命令会将 filepath 中的文件复制到目标文件系统中。目标文件系统由表的位置属性决定。被复制的数据文件移动到表的数据对应的位置

例如:加载本地数据,同时给定分区信息:

hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');

? 没有指定LOCAL

如果 filepath 指向的是一个完整的 URI,hive 会直接使用这个 URI。 否则 ?如果没有指定 schema 或者 authority,Hive 会使用在 hadoop 配置文件中定义的 schema 和 authority,fs.default.name 指定了 Namenode 的 URI

?如果路径不是绝对的,Hive 相对于 /user/ 进行解释。 Hive 会将 filepath 中指定的文件内容移动到 table (或者 partition)所指定的路径中

加载DFS数据 ,同时给定分区信息:

hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');

The above command will load data from an HDFS file/directory to the table. Note that loading data from HDFS will result in moving the file/directory. As a result, the operation is almost instantaneous.

OVERWRITE

?指定了OVERWRITE

?目标表(或者分区)中的内容(如果有)会被删除,然后再将 filepath 指向的文件/目录中的内容添加到表/分区中。

?如果目标表(分区)已经有一个文件,并且文件名和 filepath 中的文件名冲突,那么现有的文件会被新文件所替代。

将查询结果插入Hive表

?将查询结果插入Hive表

?将查询结果写入HDFS文件系统 ?基本模式

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement ?多插入模式

FROM from_statement

INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1

[INSERT OVERWRITE TABLE tablename2 [PARTITION ...] select_statement2] ...

?自动分区模式

INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement

将查询结果写入HDFS文件系统

?INSERT OVERWRITE [LOCAL] DIRECTORY directory1 SELECT ... FROM ... FROM from_statement

INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1 [INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ?

?数据写入文件系统时进行文本序列化,且每列用^A 来区分,\\n换行

INSERT INTO

?INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement1 FROM from_statement

3. DQL 操作:数据查询SQL

SQL操作

?基本的Select 操作 ?基于Partition的查询 ?Join

3.1 基本的Select 操作

SELECT [ALL | DISTINCT] select_expr, select_expr, ... FROM table_reference

[WHERE where_condition]

[GROUP BY col_list [HAVING condition]] [ CLUSTER BY col_list

| [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list] ]

[LIMIT number]

?使用ALL和DISTINCT选项区分对重复记录的处理。默认是ALL,表示查询所有记录。DISTINCT表示去掉重复的记录

?

?Where 条件

?类似我们传统SQL的where 条件

?目前支持 AND,OR ,0.9版本支持between ?IN, NOT IN

?不支持EXIST ,NOT EXIST

ORDER BY与SORT BY的不同

?ORDER BY 全局排序,只有一个Reduce任务

?SORT BY 只在本机做排序

Limit

?Limit 可以限制查询的记录数

SELECT * FROM t1 LIMIT 5 ?实现Top k 查询

?下面的查询语句查询销售记录最大的 5 个销售代表。

SET mapred.reduce.tasks = 1

SELECT * FROM test SORT BY amount DESC LIMIT 5 ?REGEX Column Specification

SELECT 语句可以使用正则表达式做列选择,下面的语句查询除了 ds 和 hr 之外的所有列:

SELECT `(ds|hr)?+.+` FROM test

例如 按先件查询

hive> SELECT a.foo FROM invites a WHERE a.ds='';

将查询数据输出至目录:

hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='';

将查询结果输出至本地目录:

hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;

选择所有列到本地目录 :

hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a;

hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100;

hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a;

hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM


Hadoop Hive sql语法详解(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:会计信息系统实验报告(1-6章)实验重点问题的分析问题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: