【问题标题】:How hive create a table from a file present in HDFS?hive 如何从 HDFS 中存在的文件创建表?
【发布时间】:2017-09-24 18:34:16
【问题描述】:

我是 HDFS 和 HIVE 的新手。在阅读了一些书籍和文档后,我对两者都有了一些介绍。我有一个关于在 HIVE 中为 HDFS 中存在的文件创建表的问题。 我在 HDFS 中有这个包含 300 个字段的文件。我想在 HDFS 中创建一个访问该文件的表。但我想利用这个文件中的 30 个字段。 我的问题是 1、hive是否创建单独的文件目录? 2. 必须先创建hive表,然后从HDFS导入数据吗? 3. 由于我想创建一个包含 300 列中的 30 列的表,hive 是否创建一个只有这 30 列的文件? 4. 我必须创建一个30列的单独文件并导入HDFS,然后创建指向HDFS目录的hive表吗?

【问题讨论】:

  • 请添加一个数据样本(比如说 3 行)。说明您要检索的列(至少是最后一个)

标签: hive hdfs


【解决方案1】:

您有多种选择。一种是让 Hive 简单地指向现有文件,即创建一个 external HIVE table:

 CREATE EXTERNAL TABLE ... LOCATION '<your existing hdfs file>';

显然,Hive 中的此表将与您现有的表完全匹配。您必须声明所有 300 列。不会有数据重复,只有一个文件,Hive只是引用已经存在的文件。

第二个选项是将 IMPORTLOAD 数据放入 Hive 表中。这会将数据复制到 Hive 表中,并让 Hive 控制位置。但重要的是要了解,IMPORT 和 LOAD 都不会转换数据,因此结果表将具有与原始表完全相同的结构布局和存储。

我推荐的另一个选项是创建一个特定的 Hive 表,然后将数据导入其中,使用类似 Sqoop 的工具或通过上述方法之一创建的中间临时表(最好是外部参考以避免额外的副本)。创建所需的表,创建外部引用临时表,使用INSERT ... SELECT 将数据插入目标,然后删除临时表。我推荐这个,因为它不仅可以让您控制表结构/模式(即只有所需的 30 列),而且重要的是,还可以控制存储。 Hive 具有高度列式高性能存储格式,即ORC,您应该喜欢使用这种存储格式,因为它可以极大地提升查询性能。

【讨论】:

  • 我没有临时表行。这个中间临时表在哪里创建 Hive 或一些外部数据库/文件系统?为什么我们需要 sqoop?我对 sqoop 的理解是 - 它用于将数据从 HDFS 摄取和输入到 HDFS。
  • 这个答案充满了错误和误导性信息。将其标记为删除。
  • (1) CREATE EXTERNAL TABLE (2) 只需要声明直到最后一列的列您需要(假设这是一个分隔文件)(3) LOAD 移动 HDFS 中的文件,而不是复制它们(它确实从本地 fs 复制) (4) IMPORT 需要EXPORT 创建的特定格式的数据和元数据,但事实并非如此。 (5) Sqoop 用于将数据从“结构化数据存储,例如关系数据库”移动,而不是从 HDFS 移动到 HDFS
  • @DuduMarkovitz 真的,这是“删除标志”的栏吗?链接到实际 DDL 规范的不完整语法指南?
  • @v83rahul 临时表正是已接受答案中的场景 3。至于 sqoop,它可以读取分隔文件并写入 Hive,这使其成为导入和 transform 的有效选择。
【解决方案2】:

我的问题是

  1. hive 是否创建单独的文件目录? YES,如果您创建一个 hive 表(托管/外部)并使用 load 命令加载数据。

如果您创建外部表并指向现有文件,则否。

  1. 是否必须先创建 hive 表并从 HDFS 导入数据?

不一定你可以创建一个 hive 外部表并指向这个现有文件。

  1. 由于我想创建一个包含 300 列中的 30 列的表,hive 是否会创建一个仅包含这 30 列的文件?

您可以使用 hiveQL 轻松完成。请按照以下步骤操作(注意:这不是唯一的方法):

  • 创建一个包含 300 列的外部表并指向现有的 文件。
  • 创建另一个具有所需 30 列的 hive 表,并使用 "insert into table30col select ... from table300col" 将数据从 300 列的表中插入到这个新表中。注意:hive 将创建 在此插入操作期间包含 30 列的文件。

    1. 是否必须创建一个包含 30 列的单独文件并导入 HDFS,然后创建指向 HDFS 目录的 hive 表?

是的,这可以作为替代方案。 我个人喜欢问题 3 中提到的解决方案,因为我不必重新创建文件,而且我可以在 hadoop 中完成所有这些工作,而无需依赖其他系统。

【讨论】:

    猜你喜欢
    • 2014-04-19
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多