hive
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据导入
• INSERT
INSERT [OVERWRITE|INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)[IF NOT EXISTS]]select_statement1 FROM from_statement
Client端应用程序 元数据 编程接口
通常我们使用如下命令进入到hive中: Hive -t -h 192.168.61.235 –database dmp_test
数据类型
TINYINT 1byte,-128 ~ 127 SMALLINT BIGINT FLOAT STRING 2byte,-32,768 ~ 32,767 INT 4byte,-2,147,483,648 ~ 2,147,483,647 8byte,-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 4byte单精度
数据导入
• LOAD LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION(partcol1=val1, partcol2=val2 ...)] • 将本地数据导入表: transwarp> LOAD DATA LOCAL INPATH '/tmp/user_info_table.txt' INTO TABLE user_info; • 将本地数据导入分区表下的一个分区: transwap> LOAD DATA LOCAL INPATH '/tmp/user_info_table_A.txt' INTO TABLE partition_user_info PARTITION (acc_level = 'A'); • 将HDFS数据导入表: transwarp> LOAD DATA INPATH '/user/root/test' INTO TABLE user_info2;
为超大数据集设计的计算/扩展能力 based on Hadoop 支持SQL like查询语言 统一的元数据管理
简单
select word, count(*) from ( select explode(split(sentence. ' ')) word from article ) t group by word
基于Partition的查询
*பைடு நூலகம்***
一般 SELECT 查询会扫描整个表(除非是为了抽样查询)。但是如果一个表使用 PARTITIONED BY 子句建表,查询就可以利用分区剪枝(input pruning)的特性,只 扫描一个表中它关心的那一部分。Hive 当前的实现是,只有分区断言出现在离 FROM 子句最近的那个WHERE 子句中,才会启用分区剪枝。例如,如果 page_views 表使用 date 列分区,以下语句只会读取分区为‘2008-03-01’的数据。 SELECT page_views.* FROM page_views WHERE page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31'
ALTER
• 重命名: ALTER TABLE...RENAME TO ALTER TABLE table_name RENAME TO new_table_name; • 改变表的分桶 ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)] INTO num_buckets BUCKETS;
CREATE TABLE IF NOT EXISTS test_table( id int, test string COMMENT "THIS IS TEST STRING", name string COMMENT "THIS IS PERSON NAME", age int ) COMMENT "TABLE TEST" PARTITIONED BY (YEAR STRING) CLUSTERED BY (id) SORTED BY (id DESC) INTO 4 BUCKETS ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' [LOACATION '/amardmp/mysql/test'];
BOOLEAN
DOUBLE 8byte双精度
BINARY
TIMESTAMP DECIMAL CHAR VARCHAR DATE
从Hive0.8.0开始支持
从Hive0.8.0开始支持 从Hive0.11.0开始支持 从Hive0.13.0开始支持 从Hive0.12.0开始支持 从Hive0.12.0开始支持
Hive分享
Hive到底是什么?
其实HIVE就是一个SQL解析引擎,它将SQL语句转译 成M/R JOB然后在Hadoop执行,来达到快速开发的目 的。拨开HIVE的神秘面纱之后来看它的表其实就是一 个Hadoop的目录/文件(HIVE默认表存放路径一般都是 在你工作目录的hive目录里面),按表名做文件夹分开, 如果你有分区表的话,分区值是子文件夹,可以直接在 其它的M/R job里直接应用这部分数据。
用户可以用 ALTER TABLE ADD PARTITION 来向一个表中增加分区。 当分区名是字符串时加引号。
ALTER TABLE page_view ADD PARTITION (dt='2008-08-08', country='us') location '/path/to/us/part080808' PARTITION (dt='2008-08-09', country='us') location '/path/to/us/part080809';
拷贝一个已存在的表的描述(schema), 但不拷贝表中的数据 CREATE TABLE table_name LIKE existing_table_or_view_name
创建内存表 Inceptor支持建立内存表,内存表中的数据会在机器运行时一直存储在 内存中,所以将一些常用查询结果存储在内存表内可以大大提高计算速 度。Inceptor提供checkpoint机制,将计算数据同步写入HDFS中,可以保证在 存储了内存表的机器当机时,内存表中的数据可以从HDFS中直接读取恢复 而不需要重新进行查询计算。内存表可以用两种方式创建: • 通过CTAS在建表,建表时数据即填入。这种情况下,内存表不能分区或 者分桶。 • 建空内存表,此时内存表可以分区分桶。之后可以通过INSERT INTO SELECT来插入数据。
数据定义语言(DDL) DDL一般由CREATE, DROP和 ALTER开头,作用于 DATABASE,TABLE,VIEW等图表对象,对它们进行添加,删除和修改。 Inceptor SQL中的DDL在下面列出: • 创建/删除/修改数据库:CREATE/DROP/ALTER DATABASE • 创建/清空/删除表:CREATE/TRUNCATE/DROP TABLE • 表的分区:PARTITIONED BY子句 • 表的分桶:CLUSTERED BY子句 • 修改表/分区/列:ALTER TABLE/PARTITION/COLUMN • 创建/修改/删除视图:CREATE/DROP/ALTER VIEW • 创建/删除函数:CREATE/DROP FUNCTION • 查看已有数据库/表/函数:SHOW • 描述表和数据库:DESCRIBE和DESCRIBE EXTENDED
Query
SELECT [ALL | DISTINCT] select_expression, select_expression, ...
FROM table_reference
[WHERE where_condition] [GROUP BY col_list] [CLUSTER BY col_list | [SORT BY col_list] [LIMIT number];
DML/DDL
Add Partitions
ALTER TABLE table_name ADD partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ... partition_spec: : PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)
DDL
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment] [PARTITIONED BY (col_name data_type 这个字段先前没有 [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) 这个字段先前必须有 [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] --hdfs路径 --通过字段对表进行分桶, --通过字段对表进行排序 --分桶个数 --对表注释 --通过字段对表进行分区,
内存表
CREATE TABLE table_name (column_name data_type, column_name data_type...) PARTITIONED BY (partition_key data_type, partition_key data_type) CLUSTERED BY (cluster_key, cluster_key, ...) INTO n BUCKETS TBLPROPERTIES ("cache" = "cache_medium", "cache.checkpoint"="true|false" "cache" = "cache_medium"指定计算缓存的介质。cache_medium可以选择 ram,SSD和memeory。只有当服务器上配置有SSD时,才可以选择SSD作 为缓存,Inceptor会自动利用SSD为计算加速。 • "cache.checkpoint" = "true|false"指定是否设置checkpoint。如果设置 checkpoint,查询结果会被同步放入HDFS中,在存储了内存表的机器当 机时,内存表中的数据可以从HDFS中直接读取恢复而不需要重新进行查 询计算。
INSERT INTO TABLE partition_user_info (acc_level='A') SELECT name, acc_num, password, citizen_id, bank_acc, reg_date FROM user_info WHERE acc_level='A';
一些相关命令 SHOW TABLES; # 查看所有的表 SHOW PARTITIONS TABLE; #查看表有哪些分区 DESCRIBE TABLE; #查看表结构
DDL
拷贝一个已存在的表的描述(schema),并且拷贝表中的数据
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type, ...)] AS SELECT …