Hive在读取时间内强制执行架构?

Lon*_*guy 13 hadoop hive mapreduce hdfs

我在这里的讲座中遇到的这两个陈述的区别和含义是什么:

1. Traditional databases enforce schema during load time.
Run Code Online (Sandbox Code Playgroud)

2. Hive enforces schema during read time.
Run Code Online (Sandbox Code Playgroud)

Don*_*ner 31

你谈到Hadoop和其他NoSQL策略如此成功的原因之一,所以我不确定你是否期望得到一篇论文,但在这里它是!数据分析的额外灵活性和灵活性可能促成了"数据科学"的爆炸式增长,这只是因为它使大规模数据分析变得更加容易.

传统的关系数据库在考虑模式时存储数据.它知道第二列是一个整数,它知道它有40列等等.因此,你需要提前指定你的模式并做好计划.这是"写入模式" - 也就是说,在将数据写入数据存储时应用模式.

Hive(在某些情况下),Hadoop和许多其他NoSQL系统通常都是关于"读取模式" - 在从数据存储中读取数据时应用模式.考虑以下原始文本行:

A:B:C~E:F~G:H~~I::J~K~L
Run Code Online (Sandbox Code Playgroud)

有几种方法可以解释这一点.~可能是分隔符,也:可能是分隔符.谁知道?在读取模式时,无关紧要.您可以在分析数据时决定架构是什么,而不是在编写数据时.这个例子有点荒谬,因为你可能永远不会遇到这种情况,但它有希望得到重点.

通过读取架构,您只需将数据加载到数据存储中,并考虑以后如何解析和解释.在这个解释的核心,读取模式意味着首先写入您的数据,找出它后来的数据.写入时的模式意味着先找出你的数据,然后再写下来.


这里有一个权衡.其中一些是主观的和我自己的看法.

架构写入的好处:

  • 为静态数据完成更好的类型安全和数据清理
  • 通常更高效(存储大小和计算),因为数据已经被解析

写入模式的缺点:

  • 在存储数据之前,您必须提前计划您的架构(即,您必须执行ETL)
  • 通常,您会丢弃原始数据,如果您的摄取过程中存在错误,这可能会很糟糕
  • 拥有相同数据的不同视图更难

架构对读取的好处:

  • 灵活定义在加载时解释数据的方式
    • 这使您能够随着时间的推移发展您的"架构"
    • 这允许您拥有"架构"的不同版本
    • 这允许更改原始源数据格式,而不必合并为一种数据格式
  • 您可以保留原始数据
  • 您可以在知道如何处理数据之前加载数据(因此不要将其丢弃在地面上)
  • 使您能够灵活地存储非结构化,不清洁和/或无组织的数据

读取架构的缺点:

  • 通常效率较低,因为每次都必须重新解析和重新解释数据(对于像XML这样的格式,这可能很昂贵)
  • 数据不是自我记录的(即,您无法查看模式以确定数据是什么)
  • 更容易出错,您的分析必须考虑脏数据

  • 很好地解释了架构对读取的好处.我们在我们的环境中使用hive和相当大的数据仓库设备(MPP RDBMS).虽然不可否认设备的原始速度,但蜂巢的灵活性已经成为生产力的真正福音. (2认同)