【问题标题】:hive, get the data location using an one-liner蜂巢,使用单线获取数据位置
【发布时间】:2017-11-16 19:02:27
【问题描述】:

我想知道是否有一种方法可以使用单线从配置单元获取数据位置。像

select d.location from ( describe formatted table_name partition ( .. ) ) as d;

我目前的解决方案是获取完整的输出然后解析它。

【问题讨论】:

  • 你的意思是你桌子的位置?
  • 是的,表/分区位置。
  • 另一方面,您可以使用 MetaStore Java API 来构建您自己的应用程序,并通过 72 个简单的步骤获得相关的StorageDescriptor...开个玩笑。

标签: hadoop hive metastore


【解决方案1】:

与传统的 RDBMS 不同,Hive 元数据存储在单独的数据库中。在大多数情况下,它位于 MySQL 或 Postgres 中。 Metastore 数据库详细信息可以在 hive-site.conf 中找到。如果您有权访问 Metastore 数据库,则可以在表 TBLS 上运行 SELECT 以获取有关表的详细信息,并通过 COLUMNS_V2 获取有关列等的详细信息。

如果您无权访问元存储,唯一的选择是描述每个表以获取详细信息。如果您有很多数据库和表,您可以编写一个 shell 脚本来使用“显示表​​”获取表列表并循环这些表。

【讨论】:

  • 我想知道添加一些方法从 hive 查询元存储是否不是这种情况。
【解决方案2】:

如果您无权访问元数据,则有两种方法。

在 shell 中解析 DESCRIBE TABLE,就像在这个答案中一样:https://stackoverflow.com/a/43804621/2700344

Hive 也有一个虚拟列 INPUT__FILE__NAME。

select INPUT__FILE__NAME from table

将为每个文件输出位置 URL。 你可以用'/'分割URL,获取你需要的元素,聚合等

【讨论】:

  • 您的语句将输出将发送到映射器的文件:坏主意。这是一个巨大而冗长的输出。恐怕唯一的选择是解析描述格式的输出。 “解析”仍然很糟糕,但这是唯一的选择。
猜你喜欢
  • 1970-01-01
  • 2022-12-12
  • 1970-01-01
  • 2021-11-03
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 2021-01-29
  • 1970-01-01
相关资源
最近更新 更多