如何使用 Hive 使用单个 hdfs 路径创建 n 个外部表

2023-12-07

是否可以使用 Hive 创建 n 个指向单个 hdfs 路径的外部表。如果是的话,其优点和局限性是什么?


可以在 HDFS 中的同一位置上创建许多表(同时管理和外部表)。

在相同数据之上创建具有完全相同架构的表根本没有用,但是您可以创建具有不同列数的不同表,或者使用 RegexSerDe 创建具有不同解析列的表,因此您可以在这些表中拥有不同的架构表。并且您可以对 Hive 中的这些表拥有不同的权限。还可以在其他一些表文件夹的子文件夹之上创建表,在这种情况下,它将包含数据的子集。最好在单个表中使用分区来实现相同的目的。

缺点是它很令人困惑,因为您可以使用多个表重写相同的数据,而且您可能会意外删除它,认为该数据属于唯一的表,并且您可以删除数据,因为您不再需要该表。

这是一些测试:

创建具有 INT 列的表:

create table T(id int);
OK
Time taken: 1.033 seconds

检查位置和其他属性:

hive> describe formatted T;
OK
# col_name              data_type               comment

id                      int

# Detailed Table Information
Database:               my
Owner:                  myuser
CreateTime:             Fri Jan 04 04:45:03 PST 2019
LastAccessTime:         UNKNOWN
Protect Mode:           None
Retention:              0
Location:               hdfs://myhdp/user/hive/warehouse/my.db/t
Table Type:             MANAGED_TABLE
Table Parameters:
        transient_lastDdlTime   1546605903

# Storage Information
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat:            org.apache.hadoop.mapred.TextInputFormat
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Compressed:             No
Num Buckets:            -1
Bucket Columns:         []
Sort Columns:           []
Storage Desc Params:
        serialization.format    1
Time taken: 0.134 seconds, Fetched: 26 row(s)
                                                                                                  sts)

在同一位置顶部创建第二个表,但包含 STRING 列:

hive> create table T2(id string) location 'hdfs://myhdp/user/hive/warehouse/my.db/t';
OK
Time taken: 0.029 seconds

插入数据:

hive> insert into table T values(1);
OK
Time taken: 33.266 seconds

检查数据:

hive> select * from T;
OK
1
Time taken: 3.314 seconds, Fetched: 1 row(s)

插入第二个表:

hive> insert into table T2 values( 'A');
OK
Time taken: 23.959 seconds

检查数据:

hive> select * from T2;
OK
1
A
Time taken: 0.073 seconds, Fetched: 2 row(s)

从第一个表中选择:

hive> select * from T;
OK
1
NULL
Time taken: 0.079 seconds, Fetched: 2 row(s)

字符串被选择为 NULL,因为该表被定义为具有 INT 列。

现在将 STRING 插入第一个表(INT 列):

insert into table T values( 'A');
OK
Time taken: 84.336 seconds

令人惊讶的是,它没有失败!

插入了什么?

hive> select * from T2;
OK
1
A
NULL
Time taken: 0.067 seconds, Fetched: 3 row(s)

插入了 NULL,因为在之前的插入过程中字符串被转换为 int,这导致了 NULL

现在让我们尝试删除一个表并从另一个表中进行选择:

hive> drop table T;
OK
Time taken: 4.996 seconds
hive> select * from T2;
OK
Time taken: 6.978 seconds

返回 0 行,因为第一个表已被管理并且删除表也删除了公共位置。

THE END,

数据被删除,我们是否需要没有数据的T2表?

drop table T2;
OK

第二个表被删除,你看,它只是元数据。桌子也被管理和drop table也应该删除带有数据的位置,但在 HDFS 中已经没有什么可删除的了,只有元数据被删除了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Hive 使用单个 hdfs 路径创建 n 个外部表 的相关文章

随机推荐

  • 将自定义图像显示为 geom_point [重复]

    这个问题在这里已经有答案了 是否可以在 R ggplot 中将自定义图像 例如 png 格式 显示为 geom point library png pic1 lt readPNG pic1 png png Heatmap png units
  • 使用 JSR-223 从 Jython 脚本获取数据

    我正在使用 Jython 2 5 1 和 JSR 223 即 javax script 包 并且我希望返回 Python 脚本的最后一行 例如 在评估此脚本后 class Multiplier def multiply self x y r
  • 如何将值从 Red/System 传递到 Red?

    我需要将在 Red System 中生成的值传递给 Red 我发现了文档 但没有找到如何使用它的示例 这是我的代码 Red system data alias struct a integer b c string data declare
  • 在 CSS 中强制孩子服从父母的弯曲边框

    我有一个 div 位于另一个 div 中 outer and inner outer有弯曲的边框和白色的背景 inner没有弯曲的边框和绿色背景 inner延伸到弯曲边界之外 outer 有办法阻止这一切吗 outer display bl
  • 在 Linux shell 脚本中并行运行 python 命令

    我有一个脚本 它通过命令行参数从用户那里获取输入 它处理参数并开始运行 python 命令 例如 run sh p1 p2 p3 p4 python abc py p1 p4 python xyz py p2 p3 where p1 p2
  • CSS/JS 解决方案:在子元素悬停时,更改父 div

    我知道CSS是 级联 的 但在这种情况下我希望效果上升 我对 JS 或 CSS 解决方案持开放态度 但老实说 我更喜欢代码量或开销最少的解决方案 当我将鼠标悬停在 子 字母上时 我希望整个窗口的整个背景颜色发生变化 而不仅仅是子元素 每个字
  • 直接改变状态和forceUpdate()与setState的缺点

    React 文档说Never mutate this state directly as calling setState afterwards may replace the mutation you made Treat this st
  • 在XML Schema中,混合内容可以限制文本的类型吗?

    在 XML 模式中 可以在一个对象上使用 mixed 属性
  • 将鼠标悬停在子项上应关闭对父项的悬停效果[重复]

    这个问题在这里已经有答案了 我有两个嵌套的div s div class parent div class child div div 我想改变background from parent当我将鼠标悬停在 parent 我想要backgro
  • JAXB 和类实例化

    阻止使用像 JAXB 这样的绑定技术而不是经典的基于 dom sax 的 xml 技术的一件事是 在读取 xml 时 它似乎强烈面向实例化它管理的类 很多时候 我想从 xml 读取值并将它们设置为已创建实例的属性 有没有一种简单的方法告诉
  • 使用 Count 获取 HTML 列中最常见的前 10 个项目

    我有一个有点混乱的查询要尝试弄清楚 我有一个名为 meta value 的列 其中有一些 HTML 数据 例如 tr class child row123 td class monsters Monster td td class mons
  • 控制器如何与 AngularJS 中的指令对话?

    我有一个显示 4 个闪存卡的应用程序 其中 3 个由一个指令填充 对于最后一张卡 我希望该值取决于控制器 根据视图 和相应的控制器 控制器可以填写第四张卡的值 出于演示目的 请参阅here Question 如何从某个控制器更新第四张卡中的
  • 无法将“[(String)]”类型的值分配给“String!”类型的值?

    woodText text String textForWood values 这是我的代码 woodText is a UITextView and textForWood是一本字典 请帮忙 woodText text textForWo
  • 对每个实例后有冷却期的事件进行计数

    在 Postgres DB 中 我有 事件 条目 与 ID 相关联 以及事件发生的时间 我需要用特殊的规则来计算它们 当事件发生时 计数器会递增 并且在接下来的 14 天内 所有此类事件都不会被计数 Example event create
  • Datagridview:如何将单元格设置为编辑模式?

    我需要以编程方式将单元格设置为编辑模式 我知道将该单元格设置为 CurrentCell 然后调用方法 BeginEdit bool 应该会发生 但就我而言 它不会发生 我真的希望 当我的 DGV 有几列时 用户只能选择并编辑前两列 其他列已
  • Android 中的共享偏好设置

    我是安卓开发新手 我有一项活动 其中需要用户名和密码 我将这些值传递给一个 Web 服务 该服务返回一个密钥作为响应 我的活动中有一个切换按钮 现在 如果用户检查切换按钮 则意味着他想保持登录状态 并且当用户下次登录时应将其重定向到下一个活
  • 在 SSO 身份验证后设置 FormsAuthentication

    我的 ASP NET MVC 4 应用程序通过在 IIS 上运行的 ISAPI 筛选器受 SSO OAM 保护 当收到对我的应用程序的请求时 ISAPI 过滤器会拦截该请求并将其重定向到 SSO 用户必须登录 SSO 然后返回到我的应用程序
  • 实时视频流 iPhone

    我是 iphone 和 Objective c 的新手 我想向使用我的应用程序的用户展示一场现场比赛 假设是足球比赛 在 iPhone 应用程序中进行实时视频流需要什么 任何有关这方面的信息表示赞赏 Thanks 请大家帮忙 有人以前一定做
  • 如何在REST中实现资源的复制粘贴?

    您将如何以 RESTful 方式实现复制粘贴支持 假设我有书店资源 还有每家商店里的书 http mydomain com rest book stores 1 http mydomain com rest book stores 1 bo
  • 如何使用 Hive 使用单个 hdfs 路径创建 n 个外部表

    是否可以使用 Hive 创建 n 个指向单个 hdfs 路径的外部表 如果是的话 其优点和局限性是什么 可以在 HDFS 中的同一位置上创建许多表 同时管理和外部表 在相同数据之上创建具有完全相同架构的表根本没有用 但是您可以创建具有不同列