hive mysql 外部表_Hive中的几种表(内部表、外部表...)

这里是在基于完成mysql数据库的安装后使用Hive:

在windows中使用navicat远程登录到Linux下面的mysql数据之后,在mysql数据库里面有个DBS表,该表存放的就是hive表在hdfs系统中的路径,这里默认应该是hdfs://hadoop0:9000/user/hive/warehouse,现在为了简单将默认存放路径修改为/hive,那么这里会显示为:hdfs://hadoop0:9000/hive;

Hive的数据模型-数据库

1)类似传统数据库的DataBase;

2)默认数据库"default";

使用#hive命令后,不使用hive>use,系统默认的数据库。可以显示使用hive>use

default;

创建一个新的数据库:

hive>create database test_dw;

Hive的数据模型-表

1)Table:内部表;

2)Partition:分区表;

3)External Table:外部表;

4)Bucket Table:桶表;

这里介绍下hive的这几种类型的表:

1. 内部表

1.1 创建一个普通的内部表:

create table t1(id string);

创建之后的t1存放在hdfs://hadoop0:9000/hive里面;

加载数据:

这里的命令有两种形式:

一种是加载Linux系统本地的文件数据到hive表,需要用local指定,inpath指定Linux的绝对路径;

LOAD DATA LOCAL INPATH '/root/id' INTO TABLE t1;

一种是直接加载hdfs系统上面的某个文件,则不需要local,inpath指定hdfs系统根路径下面的某个文件):

LOAD DATA INPATH '/id' INTO TABLE t1;

注1:这里如果是加载hdfs系统上面的文件,每次加载完成后都会hdfs上面的文件的数据都已经加载hive表中,该文件存储在hdfs系统的指定路径,但是在hdfs系统的根路径下面就消失了,这里的根路径也可以是自定义的文件存放路径;

注2:hive表中的数据其实是一个数据文件,它是创建在hive下面的某个文件下的;

注3:hive里面的数据加载除了LOAD的加载方式外,还可以使用hadoop fs -put id /hive/t1/id2

这个命令来加载数据;

1.2 指定hive表字段直接的分隔符:

在hive的实际使用中,创建一个表,肯定不止一个字段,都是多个字段,所以当有多个字段的时候,就需要在创建表的时候指定各个字段直接的分隔符是什么:

创建一个两个字段的表:

CREATE TABLE t2(id int, name string) ROW FORMAT DELIMITED FIELDS

TERMINATED BY '\t';

注:行格式化,使用制表符(也可以指定其他的符号来区分)分隔各个字段,这个分隔其实是分隔的数据文件里面的字段值,好让各个值按顺序对应到hive的指定字段中;

使用命令:load data inpath '/user.txt' into t2;

或者是:hadoop fs -put stu /hive/t2

查询数据:select * from t2;

查看t2表的ID字段:select id from t2;

注:这时会发现,hive后台调用了mapreduce来执行该语句,所以在hive中所有的查询,除了select *

以外,其他的都要走mapreduce;

Load操作:当数据加载到表中时,不会对数据进行任何转换。Load操作知识将数据复制/移动到hive表对应的位置;

在hive中创建的表也会在mysql里面映射出来:

登录navicat后进入hadoop0数据库,查看TBLS,就能看到所有的内部表,同时这两个表的字段存放在COLUMNS_V2中;

2. 分区表

指的是hive里面的数据分区,分区就是按照某个不同的字段,把文件划分为不同的标准,比如在实际项目中,电信行业每天数据量很大,我们可以用时间来作为分区存放数据,方便按天查询;

使用partitioned by来创建分区表(例如:按天分区)

创建表:create table t3(id int) partitioned by (day int);

加载数据:load data inpath '/id' into table t3 partition (day=28);

分区表加载之后和内部表明显的区别是:在t3下面多了个目录,该目录为分区字段:day=28;

这样可以根据分区字段day来过滤查询:

select * from t3 where day=28;

3. 桶表(使用比较少,仅仅在表连接里面使用)

桶表时数据进行哈希取值,然后放到不同的文件中存储,就是把数据按照某个字段分到桶中;

创建表:

create table bucket_table(id string) clustered by(id) into 4

buckets;

加载数据:

先执行(启用桶加载):set hive.enforce.bucketing = true;

再执行:insert into table bucket_table select name from t3;

注1:这里不能用LOAD来加载:因为load加载的不走mapreduce计算,但是桶表要求走mapreduce计算;

可以进入浏览器查看桶表,发现bucket_table下面有四个file,没有文件里面都存放了数据,桶表的这一特点表示:分到同一个桶表里面的数据的哈希值非常有可能相等;

注2:分区表和桶表都是对数据进行划分,它们的区别是:分区表是使用文件夹划分,桶表是使用文件划分;

注3:以上三种表统称为受控表(MANAGED_TABLE),而下面的外部表则是(EXTERNAL_TABLE);

4. 外部表

外部表只有一个过程,加载数据和创建表同时完成,并不会移动数据到数据库目录下,只是与外部建立一个连接;

外部表的优点:当删除一个外部表时,仅仅只是删除了该链接,而数据本身(hdfs上面的数据文件)依然存在;

在创建之前,先在hdfs上面创建一个文件夹,将数据文件上传到该文件夹下,例如:hdfs://hadoop0:9000/external/id;

创建表:

create external table t5(id int) location '/external';

使用location指定该文件夹即可,不用指定到具体文件;

因为外部的目录就已经指定了数据在哪里,这里指定的外部路径就是:hdfs://hadoop0:9000/external下面,所以就无需加载,直接查询就行:

查询数据:

select * from t5;

删除表之后数据文件依然存在,只是删除了一个链接:

drop table t5;

5. 视图

视图可以屏蔽掉复杂的操作、进行一些权限的控制,创建的语法和前面基本没有区别:

create view v1 AS select * from t1;

6. 表的修改

表的修改:

alter table target_tab add columns(cols, string);

表的删除:

drop table target_tab;

7. 导入数据

当数据被加载至表中时,不会对数据进行任何转换。Load 操作只是将数据复制/移动至 Hive 表对应的位置。

LOAD:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE

tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

把一个Hive表导入到另一个已建Hive表:

INSERT OVERWRITE TABLE tablename [PARTITION (partcol1=val1,

partcol2=val2 ...)] select_statement FROM from_statement

CTAS:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name (col_name

data_type, ...) … AS SELECT …

例:create table new_external_test as select * from

external_table1;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267451.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web Service 基本概念和技术应用

(一) Web Service 技术的名词解释 往往某一知识点的基本概念总是枯燥而乏味的,但若能花费些时间好好的理解,也能获益匪浅. Web Service 也称作 XML Web Service,是一种可以接收从 Internet 或 Intranet 上的其它系统中传递过来的请求,是轻量级的独立的通讯技术.通过 SOAP 在 We…

mysql主从配置 简书_Mysql主从配置,实现读写分离-Go语言中文社区

转载:https://www.cnblogs.com/alvin_xp/p/4162249.html大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够。到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛&am…

TensorFlow 官方文档中文版

TensorFlow 官方文档中文版: http://wiki.jikexueyuan.com/project/tensorflow-zh/ w3cschool https://www.w3cschool.cn/tensorflow_python/转载于:https://www.cnblogs.com/huangsxj/p/8573140.html

continue 的用户及实例

continue 跳出本次循环&#xff0c;继续下一次循环 “break”是跳出整个循环 实例1&#xff1a; for i in range(10): if i <5: continue    #这里条件是小于5&#xff0c;满足条件的就跳出了本次循环&#xff0c;不在执行print&#xff0c;所以最终打印的是5…

VI编辑器的基本使用

VI编辑器 VIM是一个LINUX和UNIX的一个强大编辑器 #vi file 如果有file这个文件直接进入&#xff0c;如果没有则新建后进入。 Vi三种模式 Command mode 命令模式 按esc进入命令模式 Insert mode 编辑模式 按a. i. o都可以进入编辑模式 Ex mode 末行模式 按: 进入末行模式 命令模…

mysql报错注入实战_MySQL手工注入实战

实战记录&#xff0c;日本某站注入点 and 语句测试and11 返回正常&#xff0c;and2跳回首页&#xff0c;可能过滤了用 ’ 测试返回错误页面判断为注入点order by语句查询字段数测试字段数为9and 12 UNION SELECT 1,2,3,4,5,6,7,8,9报错联合查询语句&#xff0c;查询显示位2、3为…

20个简约风格网站设计作品欣赏

这篇文章收集了20个简洁清爽的网站设计作品案例&#xff0c;设计师们能够通过这些优秀的网页设计作品获得灵感&#xff0c;进而设计出更精美&#xff0c;更具有创意的网站作品&#xff0c;一起欣赏。vnsagaPure – Minimal WordPress themeAssemblydeladeeus design studioHocu…

python 股票自动交易从零开始_Python股票自动交易从零开始

课程目录1.Python股票自动交易从零开始~第一集~简介(Av24528809,P1).mp42.Python股票自动交易从零开始~第二集~安装工具包(Av24528809,P2).mp43.Python股票自动交易从零开始~第二集番外~配置Mac工作环境(Av24528809,P3).mp44.Python股票自动交易从零开始~第三集~获得股票列表-A…

[Js-开发常识]为什么定义实体类属性建议用 Ineger 而不是 int

因为 Integer 包装类型允许 null 值&#xff0c;避免在框架底层调用时产生空指针异常所以一般建议使用 Integer转载于:https://www.cnblogs.com/jiasq/p/8588767.html

python 银行工作_Python:银行系统实战(一)

最近突然抽筋想做一下大学时候做过的银行系统实战~代码就发在这里啦~学弟学妹们请查收~不过是python版本的&#xff0c;你们也用不上。。。两个py文件&#xff0c;一个是后台系统处理的&#xff0c;一个是总控py文件如下&#xff1a;view.py 内容如下&#xff1a;import timecl…

出现 java.util.ConcurrentModificationException 时的解决办法

for (int i0; i<list.size(); i) {  // 只有在这种方式遍历集合时&#xff0c;同时对集合增加、删除才不会影响。 // list.remove(list.get(i)); } 在对一个map进行迭代遍历并删除一些符合条件的键值对的时候&#xff0c;容易出现 java.util.ConcurrentModificati…

深入剖析LinkedList:揭秘底层原理

文章目录 一、 概述LinkedList1.1 LinkedList简介1.2 LinkedList的优点和缺点 二、 LinkedList数据结构分析2.1 Node节点结构体解析2.2 LinkedList实现了双向链表的原因2.3 LinkedList如何实现了链表的基本操作&#xff08;增删改查&#xff09;2.4 LinkedList的遍历方式 三、 …

【Mysql优化】索引覆盖

索引覆盖 是指 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为”索引覆盖”,比平时的查询少一次到磁盘读数据的操作。(索引正好覆盖到查询的数据) 例如下面: mysql> use exam9; Database changed mysql&…

mysql strtok_c函数: strtok 和 strtok_r 详解

函数名: strtok功 能: 查找由在第二个串中指定的分界符分隔开的单词用 法: char *strtok(char *str1, char *str2);程序例:#include #include int main(void){char input[16] "abc,d";char *p;/* strtok places a NULL…

Ubuntu 屏幕亮度调整

首先系统要安装好受限显卡驱动&#xff1b;安装gedit&#xff0c;修改xorg.conf&#xff1a; sudo apt-get install geditsudo gedit /etc/X11/xorg.conf加入红色的一行如下&#xff1a;Section "Screen"Identifier "Default Screen"DefaultDepth 24…

【面试】前端面试题

石墨文档 1.git命令用过哪些 2.css3用过哪些 3.box- sizing 默认值content-box border - box 内容的宽高要从已设定的宽高减去边框和内边距 inherit 从父元素继承 4.跨域 jsonp为什么可以跨域 浏览器为了安全有一种同源策略&#xff0c;协议.域名.端口有一个不同都是跨域&#…

mysql+server+80_Windows Server 2019 IIS10.0+PHP(FastCGI)+MySQL环境搭建教程

准备篇一、环境说明&#xff1a;操作系统&#xff1a;Windows Server 2019PHP版本&#xff1a;php 7.3.11MySQL版本&#xff1a;MySQL 8.0.18.0二、相关软件下载&#xff1a;1、PHP下载地址&#xff1a;https://windows.php.net/downloads/releases/php-7.3.11-nts-Win32-VC15-…

win7下开启和使用telnet的方法

win7下开启和使用telnet的方法首先&#xff0c;出于安全考虑&#xff0c;win7已经禁用了telnet这一功能&#xff0c;因为telnet是明文传输的&#xff0c;安全性相当差。转载于:https://blog.51cto.com/xinchq2011/727638

SharePoint Server和Office 365之间的混合模式集成概述

正如您可能已经知道的那样&#xff0c;云中的Microsoft Office 365和SharePoint Server 2013/2016内部部署可以通过多种方式协同工作。这些通常被称为混合模式&#xff0c;因为它们将功能集成到SharePoint Online和SharePoint内部部署中。 以下Microsoft提供了下对照表&#xf…

perl中的map和grep

map 语法&#xff1a; map EXPR, LIST map BLOCK, LIST 语义&#xff1a; 对于LIST中的每个元素执行EXPR或者BLOCK&#xff0c;如果返回值存储在list中&#xff0c;则表示处理后的list&#xff0c;若返回值存储在scalar中&#xff0c;则表示处理后的list中元素个数。下面是几个…