hive中有内部表和外部表,他们有啥区别和关联,选取的原则是什么

2020-06-19 12:28发布

3条回答
天天
2楼 · 2020-06-19 20:39

       Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。

  需要注意的是传统数据库对表数据验证是 schema on write(写时模式),而 Hive 在load时是不检查数据是否符合schema的,hive 遵循的是 schema on read(读时模式),只有在读的时候hive才检查、解析具体的数据字段、schema。

  读时模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。

  写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。

猫的想法不敢猜
3楼 · 2021-03-12 15:22

Hive 中有内部表 与 外部表 两种表。

Hive 主要是用于数据仓库建设的。那么在数据仓库中,那我们该如何在两种表的类型中选择呢  ??

下面是几条原则 :

 1.在大部分场景下,两种表的应用没有太大的区别。

2.数据场景简单, 几乎都是在Hive中的流转, 可以优先选用内部表。

3.需要对数据内容和元数据进行紧凑的管理, 建议内部表。

比如负责计算过程中用到的临时表, 数据内容随用随删, 而不希望关注底层文件。

 4.数据处理场景较多,复杂, 建议采用外部表。

比如需要用Spark, Mapreduce等处理复杂的数据, 然后用Hive 做后续处理的; 需要处理非结构化日志数据的情况。

5.需要对数据和元数据分开管理的场景, 对数据安全性要求更高的场景, 建议采用外部表

来源于网络仅供参考

pipi雪
4楼 · 2021-03-15 17:36

Hive 中有内部表 与 外部表 两种表。

Hive 主要是用于数据仓库建设的。那么在数据仓库中,那我们该如何在两种表的类型中选择呢  ??

下面是几条原则 :

 1.在大部分场景下,两种表的应用没有太大的区别。

2.数据场景简单, 几乎都是在Hive中的流转, 可以优先选用内部表。

3.需要对数据内容和元数据进行紧凑的管理, 建议内部表。

比如负责计算过程中用到的临时表, 数据内容随用随删, 而不希望关注底层文件。

4.数据处理场景较多,复杂, 建议采用外部表。

比如需要用Spark, Mapreduce等处理复杂的数据, 然后用Hive 做后续处理的; 需要处理非结构化日志数据的情况。

5.需要对数据和元数据分开管理的场景, 对数据安全性要求更高的场景, 建议采用外部表


相关问题推荐

  • spark的优点有哪些?2021-07-05 16:55
    回答 20

    首先, Spark 非常好用。由于高级 API 剥离了对集群本身的关注,你可以专注于你所要做的计算本身, 只需在自己的笔记本电脑上就可以开发 Spark 应用。其次, Spark 很快,支持交互式使用和复杂算法。最后, Spark 是一个通用引擎,可用它来完成各种各样的运算...

  • 回答 5

    现在企业中多数用的是相对稳定的Spark2.2.0版本。

  • 回答 4

        Spark,是一种One Stack to rule them all的大数据计算框架,是一种基于内存计算的框架,是一种通用的大数据快速处理引擎。    这一站式的计算框架,包含了Spark RDD(这也是Spark Core用于离线批处理)、Spark SQL(交互式查询)、Spark Streaming(实时...

  • 回答 10

    常用RDD算子(1)Action RDDforeach:遍历每个元素,无返回值,一般用在将结果存储到数据库中使用saveAsTextFile存储到hdfs,RDD每个partition存到hdfs的一个block块saveAsObjectFile:存储到hdfs,将每个partition的数据序列化后,以sequenceFile(序列化)...

  • 回答 6

    主要功能:管理当前节点内存,CPU的使用状况,接收master分配过来的资源指令,通过ExecutorRunner启动程序分配任务,worker就类似于包工头,管理分配新进程,做计算的服务,相当于process服务。需要注意的是:1)worker会不会汇报当前信息给master,worker心...

  • RDD五大属性2020-07-15 13:45
    回答 3

    1、RDD是一个分片的数据集合;2、RDD的函数针对每个分片进行计算;3、RDD之间是个依赖的集合;4、可选:key-value型RDD是根据哈希来分区的;5、可选:数据本地性优先计算。

  • 回答 3

    在hadoop/bin目录下有yarn命令yarn application -kill 

  • 回答 3
    已采纳

    1.Spark SQLSpark SQL是Spark用来操作结构化数据的组件。通过Spark SQL,用户可以使用SQL或者Apache Hive版本的SQL方言(HQL)来查询数据。Spark SQL支持多种数据源类型,例如Hive表、Parquet以及JSON等。Spark SQL不仅为Spark提供了一个SQL接口,还支持开发...

  • 回答 4

    Spark SQL 在 Spark1.x 中和传统 SQL 不完全一致。但是在 Spark2.x 版本中遵循的美国的ANSI的SQL2003完全标准sql 。oracle和mysql都有自己的语法规则,平时所使用的 SQL 语句都不是标准 SQL 。平时用的 mysql 和 oracle 以及 hive,都是部分遵循标准SQL 。...

  • 回答 3

    #!/bin/bash #队列名 根据yarn的队列提交 realtime_queue=root #提交的任务名 my_job_name=OrderQZspark-shell --master yarn --deploy-mode client \--queue $realtime_queue \ #总的executors数 根据数据量与自己的集群资源来分配--num-executors...

  • 回答 2

    Spark是一种快速、通用、可扩展的大数据分析引擎,于2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。项目是用Scala进行编写。Spark的结构:Spark生态系统已经发展成为一个包含多个子项目的集...

  • 回答 1

    自己随意编写一份测试数据,所用的测试数据如下,需求是按照第一列的字母分组,然后按照第二列数据取出每一组内前N个数据,后面我分别列出了我使用的三种方案来实现该需求,不同方案在不同的场景下会有各自的优势 a 25b 36c 24d 45e 60a 33b 26c 47d 43e 62a...

  • 回答 1

    把数据从redis读出来放到kafka里呗,然后用spark-streaming去读kafka的数据,或者写个程序从redis把数据读出来用socket或文件的形式传给spark-streaming,spark-streaming支持很多种源的方式

没有解决我的问题,去提问