草庐IT

hadoop - Hive 在读取期间强制执行架构?

coder 2024-01-05 原文

我在这里讲课时遇到的这两个语句的区别和含义是什么:

1. Traditional databases enforce schema during load time.

2. Hive enforces schema during read time.

最佳答案

您谈到了 Hadoop 和其他 NoSQL 策略如此成功的原因之一,所以我不确定您是否希望获得论文,但它就是这样!数据分析中额外的灵 active 和敏捷性可能促成了“数据科学”的爆炸式增长,只是因为它通常使大规模数据分析变得更容易。

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

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

A:B:C~E:F~G:H~~I::J~K~L

有几种方法可以解释这一点。 ~ 可以是分隔符,或者 : 可以是分隔符。谁知道?使用读取模式,没关系。您在分析数据时而不是在编写数据时决定模式是什么。这个例子有点荒谬,因为您可能永远不会遇到这种情况,但希望它能说明问题。

使用模式读取,您只需将数据加载到数据存储中,然后再考虑如何解析和解释。在这个解释的核心,读模式意味着先写你的数据,然后再弄清楚它是什么。 Schema on write 意味着先弄清楚你的数据是什么,然后再写入。


这里有一个权衡。其中一些是主观的,是我自己的意见。

写入模式的好处:

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

写入模式的缺点:

  • 您必须在存储数据之前提前计划您的模式(即,您必须进行 ETL)
  • 通常您会丢弃原始数据,如果您在摄取过程中出现错误,这可能会很糟糕
  • 很难对同一数据有不同的看法

读取时模式的好处:

  • 在加载时灵活定义数据的解释方式
    • 这使您能够随着时间的推移发展您的“架构”
    • 这允许您拥有不同版本的“架构”
    • 这允许更改原始源数据格式而无需合并为一种数据格式
  • 您可以保留原始数据
  • 您可以在不知道如何处理数据之前加载数据(这样您就不会把它丢在地上)
  • 使您能够灵活地存储非结构化、不干净和/或无组织的数据

读取模式的缺点:

  • 通常效率较低,因为您每次都必须重新解析和重新解释数据(对于 XML 等格式,这可能代价高昂)
  • 数据不是自记录的(即,您无法通过查看架构来弄清楚数据是什么)
  • 更容易出错,您的分析必须考虑脏数据

关于hadoop - Hive 在读取期间强制执行架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11764237/

有关hadoop - Hive 在读取期间强制执行架构?的更多相关文章

  1. ruby-openid:执行发现时未设置@socket - 2

    我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass

  2. ruby - Chef 执行非顺序配方 - 2

    我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul

  3. ruby - 为什么 Ruby 的 each 迭代器先执行? - 2

    我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试

  4. ruby - 检查是否通过 require 执行或导入了 Ruby 程序 - 2

    如何检查Ruby文件是否是通过“require”或“load”导入的,而不是简单地从命令行执行的?例如:foo.rb的内容:puts"Hello"bar.rb的内容require'foo'输出:$./foo.rbHello$./bar.rbHello基本上,我想调用bar.rb以不执行puts调用。 最佳答案 将foo.rb改为:if__FILE__==$0puts"Hello"end检查__FILE__-当前ruby​​文件的名称-与$0-正在运行的脚本的名称。 关于ruby-检查是否

  5. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  6. ruby-on-rails - rbenv:从 RVM 移动到 rbenv 后,在 Jenkins 执行 shell 中找不到命令 - 2

    我从Ubuntu服务器上的RVM转移到rbenv。当我使用RVM时,使用bundle没有问题。转移到rbenv后,我在Jenkins的执行shell中收到“找不到命令”错误。我内爆并删除了RVM,并从~/.bashrc'中删除了所有与RVM相关的行。使用后我仍然收到此错误:rvmimploderm~/.rvm-rfrm~/.rvmrcgeminstallbundlerecho'exportPATH="$HOME/.rbenv/bin:$PATH"'>>~/.bashrcecho'eval"$(rbenvinit-)"'>>~/.bashrc.~/.bashrcrbenvversions

  7. Ruby - 如何在读取文件时跳过/忽略特定行? - 2

    在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?

  8. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

  9. 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以上的用户分析:遇到这类

  10. ruby - 如何使用 Selenium Webdriver 根据 div 的内容执行操作? - 2

    我有一个使用SeleniumWebdriver和Nokogiri的Ruby应用程序。我想选择一个类,然后对于那个类对应的每个div,我想根据div的内容执行一个Action。例如,我正在解析以下页面:https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=puppies这是一个搜索结果页面,我正在寻找描述中包含“Adoption”一词的第一个结果。因此机器人应该寻找带有className:"result"的div,对于每个检查它的.descriptiondiv是否包含单词“adoption

随机推荐