将逗号分隔表添加到Hive

时间:2016-06-30 12:11:02

标签: hive hdfs

我有一个非常基本的问题:如何向Hive添加一个非常简单的表。我的表保存在文本文件(.txt)中,该文件保存在HDFS中。我试图在Hive中创建一个外部表,指出这个文件,但是当我运行SQL查询(select * from table_name)时,我没有得到任何输出。 这是一个示例代码:

create external table Data (
    dummy INT,
    account_number INT, 
    balance INT, 
    firstname STRING, 
    lastname STRING, 
    age INT, 
    gender CHAR(1), 
    address STRING, 
    employer STRING, 
    email STRING,
    city STRING, 
    state CHAR(2)
)
LOCATION 'hdfs:///KibTEst/Data.txt';

KibTEst / Data.txt是HDFS中文本文件的路径。

表中的行由回车符分隔,列用逗号分隔。

感谢您的帮助!

4 个答案:

答案 0 :(得分:4)

  1. 您只需要创建一个指向您的文件的外部表 在hdfs中的位置以及如下的分隔符属性:

    create external table Data (
        dummy INT,
        account_number INT, 
        balance INT, 
        firstname STRING, 
        lastname STRING, 
        age INT, 
        gender CHAR(1), 
        address STRING, 
        employer STRING, 
        email STRING,
        city STRING, 
        state CHAR(2)
    )
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY ',' 
    LINES TERMINATED BY '\n'
    LOCATION 'hdfs:///KibTEst/Data.txt';
    
  2. 您需要运行select查询(因为文件已经在HDFS中,而外部表在create语句中指定位置时直接从中获取数据)。所以你使用下面的select语句进行测试:
  3. SELECT * FROM Data;

答案 1 :(得分:0)

    create external table Data (
        dummy INT,
        account_number INT, 
        balance INT, 
        firstname STRING, 
        lastname STRING, 
        age INT, 
        gender CHAR(1), 
        address STRING, 
        employer STRING, 
        email STRING,
        city STRING, 
        state CHAR(2)
    )
    row format delimited    
    FIELDS TERMINATED BY ‘,’
    stored as textfile
    LOCATION 'Your hdfs location for external table';

如果HDFS中的数据使用:

LOAD DATA INPATH 'hdfs_file_or_directory_path' INTO TABLE tablename

使用select * from table_name

答案 2 :(得分:0)

create external table Data (
        dummy INT,
        account_number INT, 
        balance INT, 
        firstname STRING, 
        lastname STRING, 
        age INT, 
        gender CHAR(1), 
        address STRING, 
        employer STRING, 
        email STRING,
        city STRING, 
        state CHAR(2)
    )
    row format delimited    
    FIELDS TERMINATED BY ','
    stored as textfile
    LOCATION '/Data';

然后将文件加载到表中

LOAD DATA INPATH '/KibTEst/Data.txt' INTO TABLE Data;

然后

select * from Data;

答案 3 :(得分:0)

我希望,在输入之下会尝试回答@mshabeen提出的问题。

可以使用不同的方法在作为外部表创建的Hive表中加载数据。 在创建Hive外部表时,您可以使用LOCATION选项并指定HDFS,S3(如果是AWS)或文件位置,您可以从中加载数据 OR 在创建Hive表后,使用LOAD DATA INPATH选项从HDFS,S3或File加载数据。

或者,您也可以使用ALTER TABLE命令在Hive分区中加载数据。

以下是一些细节

  1. 使用LOCATION - 在创建Hive表时使用。在这种情况下,数据已经加载并在Hive表中可用。

  2. **LOAD DATA INPATH**选项 - 此Hive命令可用于从指定位置加载数据。这里要记住的是,数据将从输入路径MOVED到Hive仓库路径。 示例 - LOAD DATA INPATH 'hdfs://cluster-ip/path/to/data/location/'

  3. 使用 ALTER TABLE 命令 - 通常用于将其他位置的数据添加到Hive分区。在这种情况下,需要已定义所有分区,并且已知分区的值。如果是动态分区,则不需要此命令。 示例 - ALTER TABLE table_name ADD PARTITION (date_col='2018-02-21') LOCATION 'hdfs/path/to/location/' 上面的代码将分区映射到指定的数据位置(在本例中为HDFS)。但是,数据不会移动到Hive内部仓库位置。

  4. 其他详细信息可供here

    使用