【问题标题】:HDFS Folder in to a key-value hive table键值配置单元表中的 HDFS 文件夹
【发布时间】:2014-10-14 17:03:06
【问题描述】:

我在 HDFS 中有以下文件夹结构:

  • 多边形
    • file1.kml
    • file2.kml
    • file3.kml

我想将它加载到具有以下架构的配置单元表中:

表格“多边形”:

name|kml
file1|content of file1
file2|content of file2
file3|content of file3

如何在 Hive 中做到这一点?

【问题讨论】:

    标签: hadoop hive hdfs hiveql


    【解决方案1】:

    据我所知,仅使用Hive 是不可能的。但是你当然可以使用bash(我想它是一台Linux机器)。首先创建输入文件,例如:

     #!/bin/bash
     # the dir path to be passed as parameter 
     for file in $1/*
        do echo "$(basename $file)|$(cat $file)" >> polygons.dat
     done
    

    赋予脚本执行权限后,运行为:

     ./script Polygons
    

    现在您将在polygons.dat 文件中获得所需的数据。如果它是一台 Windows 机器,你必须找到一种方法来使用batch 脚本来做同样的事情(恐怕我无法提供帮助)。

    然后使用基本的Hive 命令进行加载,例如:

     hive> CREATE TABLE Polygons ( name STRING, kml STRING)
         >   ROW FORMAT DELIMITED
         >   FIELDS TERMINATED BY '|'
         >   STORED AS TEXTFILE;
    
     hive> LOAD DATA LOCAL INPATH 'path/polygons.dat' OVERWRITE INTO TABLE Polygons;
    

    【讨论】:

      【解决方案2】:

      您可以使用 INPUT__FILE__NAME,它是 hive 中存储文件名的虚拟列

      查看此link 了解有关此虚拟列的更多信息。

      您可以将数据加载到表中,然后在选择查询中您可以使用 INPUT__FILE__NAME 来获取文件名。

      例如,

      select INPUT__FILE__NAME,your_column from your_table;
      

      【讨论】:

        猜你喜欢
        • 2022-01-23
        • 2021-04-26
        • 1970-01-01
        • 1970-01-01
        • 2016-08-26
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        相关资源
        最近更新 更多