草庐IT

Hive内部表与外部表的区别具体说明

雷神乐乐 2023-11-02 原文

目录

1.在/opt/atguigu/目录下,新建两个txt文件

2.在hadoop的web端递归创建一个目录,存储这两个文件

3.查看web端的文件

一、内部表:

1.创建一个内部表,并指定内部表的存储位置

2.查看内部表,内部表中没有数据

3.加载本地数据到内部表

4.再次查询,此时内部表中有数据

5.清空内部表,上传hdfs上的数据到内部表,内部表有数据

6.但是/file/txt目录下上传到内部表的文件数据被剪切

7.删除内部表,hdfs上传到内部表的数据也被删除

二、外部表

1.创建一个外部表,指定外部表的路径在公共文件目录下

2.直接查询外部表,公共文件中的数据直接上传到外部表

3.删除外部表,公共文件的数据不会被删除

三、总结


1.在/opt/atguigu/目录下,新建两个txt文件

[root@lxm147 atguigu]# cat /opt/atguigu/student.txt
1001    student1
1002    student2
1003    student3
1004    student4
1005    student5
1006    student6
1007    student7
1008    student8
1009    student9
1010    student10
1011    student11
1012    student12
1013    student13
1014    student14
1015    student15
1016    student16


[root@lxm147 atguigu]# cat /opt/atguigu/student2.txt 
1001	student1
1002	student2
1003	student3
1004	student4
1005	student5
1006	student6
1007	student7
1008	student8
1009	student9
1010	student10

2.在hadoop的web端递归创建一个目录,存储这两个文件

dfs -mkdir -p /file/txt;

dfs -put /opt/atguigu/student.txt /file/txt;
dfs -put /opt/atguigu/student2.txt /file/txt;

3.查看web端的文件

dfs -ls /file/txt;

一、内部表:

1.创建一个内部表,并指定内部表的存储位置

create table if not exists student
(
    id   int,
    name string
)
    row format delimited fields terminated by '\t'
    location '/tables'; 

2.查看内部表,内部表中没有数据

select * from student;

3.加载本地数据到内部表

load data local inpath '/opt/atguigu/student.txt' into table student;

4.再次查询,此时内部表中有数据

5.清空内部表,上传hdfs上的数据到内部表,内部表有数据

truncate table student;

load data inpath '/file/txt/student2.txt' into table student;

select * from student;

6.但是/file/txt目录下上传到内部表的文件数据被剪切

7.删除内部表,hdfs上传到内部表的数据也被删除

drop table student;

二、外部表

1.创建一个外部表,指定外部表的路径在公共文件目录下

create external table if not exists student_wb
(
    id   int,
    name string
)
    row format delimited fields terminated by '\t'
    location '/file/txt';

2.直接查询外部表,公共文件中的数据直接上传到外部表

select * from student_wb;

3.删除外部表,公共文件的数据不会被删除

drop table student_wb;

dfs -ls /file/txt;

三、总结

将hdfs上的数据上传到内部表中,数据是被剪切到内部表中,内部表删除,hdfs上的数据也被删除;

将hdfs上的数据上传到外部表中,数据是被拷贝到外部表中,外部表删除,hdfs上的数据不会被删除。

有关Hive内部表与外部表的区别具体说明的更多相关文章

  1. ruby - 触发器 ruby​​ 中 3 点范围运算符和 2 点范围运算符的区别 - 2

    请帮助我理解范围运算符...和..之间的区别,作为Ruby中使用的“触发器”。这是PragmaticProgrammersguidetoRuby中的一个示例:a=(11..20).collect{|i|(i%4==0)..(i%3==0)?i:nil}返回:[nil,12,nil,nil,nil,16,17,18,nil,20]还有:a=(11..20).collect{|i|(i%4==0)...(i%3==0)?i:nil}返回:[nil,12,13,14,15,16,17,18,nil,20] 最佳答案 触发器(又名f/f)是

  2. ruby-on-rails - `a ||= b` 和 `a = b if a.nil 之间的区别? - 2

    我正在检查一个Rails项目。在ERubyHTML模板页面上,我看到了这样几行:我不明白为什么不这样写:在这种情况下,||=和ifnil?有什么区别? 最佳答案 在这种特殊情况下没有区别,但可能是出于习惯。每当我看到nil?被使用时,它几乎总是使用不当。在Ruby中,很少有东西在逻辑上是假的,只有文字false和nil是。这意味着像if(!x.nil?)这样的代码几乎总是更好地表示为if(x)除非期望x可能是文字false。我会将其切换为||=false,因为它具有相同的结果,但这在很大程度上取决于偏好。唯一的缺点是赋值会在每次运行

  3. ruby - 这两个 Ruby 类初始化定义有什么区别? - 2

    我正在阅读一本关于Ruby的书,作者在编写类初始化定义时使用的形式与他在本书前几节中使用的形式略有不同。它看起来像这样:classTicketattr_accessor:venue,:datedefinitialize(venue,date)self.venue=venueself.date=dateendend在本书的前几节中,它的定义如下:classTicketattr_accessor:venue,:datedefinitialize(venue,date)@venue=venue@date=dateendend在第一个示例中使用setter方法与在第二个示例中使用实例变量之间是

  4. Hive SQL 五大经典面试题 - 2

    目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类

  5. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  6. ruby - 这两段代码有什么区别? - 2

    打印1:defsum(i)i=i+[2]end$x=[1]sum($x)print$x打印12:defsum(i)i.push(2)end$x=[1]sum($x)print$x后者是修改全局变量$x。为什么它在第二个例子中被修改而不是在第一个例子中?类Array的任何方法(不仅是push)都会发生这种情况吗? 最佳答案 变量范围在这里无关紧要。在第一段代码中,您仅使用赋值运算符=为变量i赋值,而在第二段代码中,您正在修改$x(也称为i)使用破坏性方法push。赋值从不修改任何对象。它只是提供一个名称来引用一个对象。方法要么是破坏性

  7. ruby - Ruby 中 .next 和 .succ 的区别 - 2

    Ruby中的Fixnum方法.next和.succ有什么区别?看起来它的工作原理是一样的:1.next=>21.succ=>2如果有什么不同,为什么有两种方法做同样的事情? 最佳答案 它们是等价的。Fixnum#succ只是Fixnum#next的同义词。他们甚至在thereferencemanual中共享同一block. 关于ruby-Ruby中.next和.succ的区别,我们在StackOverflow上找到一个类似的问题: https://stacko

  8. ruby - 在参数为 `yield self` 的方法中使用 `&block` 和在没有参数 `yield self` 的方法中使用 `&block` 有什么区别吗? - 2

    我明白了defa(&block)block.call(self)end和defa()yieldselfend导致相同的结果,如果我假设有这样一个blocka{}。我的问题是-因为我偶然发现了一些这样的代码,它是否有任何区别或者是否有任何优势(如果我不使用变量/引用block):defa(&block)yieldselfend这是一个我不理解&block用法的具体案例:defrule(code,name,&block)@rules=[]if@rules.nil?@rules 最佳答案 我能想到的唯一优点就是自省(introspecti

  9. ruby - 从外部访问类的实例变量 - 2

    我理解(我认为)Ruby中类变量和类的实例变量之间的区别。我想知道如何从该类外部访问该类的实例变量。从内部(即在类方法中而不是实例方法中),它可以直接访问,但是从外部,有没有办法做MyClass.class.[@$#]variablename?我没有任何具体原因要这样做,只是学习Ruby并想知道是否可行。 最佳答案 classMyClass@my_class_instance_var="foo"class上述yield:>>foo我相信Arkku演示了如何从类外部访问类变量(@@),而不是类实例变量(@)。我从这篇文章中提取了上述内

  10. ruby - 无法理解 `puts{}.class` 和 `puts({}.class)` 之间的区别 - 2

    由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A

随机推荐