向配置单元添加逗号分隔的表

r7xajy2e  于 2021-06-29  发布在  Hive
关注(0)|答案(4)|浏览(369)

我有一个非常基本的问题:如何向配置单元添加一个非常简单的表。我的表格保存在一个文本文件(.txt)中,该文件保存在hdfs中。我曾尝试在配置单元中创建一个指向此文件的外部表,但当我运行sql查询(select*from table\ u 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中文本文件的路径。
表中的行用回车分隔,列用逗号分隔。
谢谢你的帮助!

pgccezyw

pgccezyw1#

您只需创建一个外部表,指向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';

你得跑了 select 查询(因为文件已经在hdfs中,并且在中指定位置时外部表直接从中获取数据) create 声明)。所以您可以使用下面的select语句进行测试: SELECT * FROM Data;

jhkqcmku

jhkqcmku2#

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;
bnlyeluc

bnlyeluc3#

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

ruarlubt

ruarlubt4#

我希望下面的输入能回答@mshabeen提出的问题。
在作为外部表创建的配置单元表中,可以使用不同的方法加载数据。创建配置单元外部表时,可以使用 LOCATION 选项并指定hdfs、s3(对于aws)或文件位置,从中加载数据或使用 LOAD DATA INPATH 选项在创建配置单元表后从hdfs、s3或文件加载数据。
或者,您也可以使用 ALTER TABLE 命令在配置单元分区中加载数据。
下面是一些细节
使用 LOCATION -创建配置单元表时使用。在这种情况下,数据已经加载并在配置单元表中可用。 **LOAD DATA INPATH** 选项-此配置单元命令可用于从指定位置加载数据。这里要记住的一点是,数据将从输入路径移动到配置单元仓库路径。示例- LOAD DATA INPATH 'hdfs://cluster-ip/path/to/data/location/' 使用 ALTER TABLE 命令-主要用于将其他位置的数据添加到配置单元分区中。在这种情况下,要求已经定义了所有分区,并且已经知道分区的值。如果是动态分区,则不需要此命令。示例- ALTER TABLE table_name ADD PARTITION (date_col='2018-02-21') LOCATION 'hdfs/path/to/location/' 上面的代码将分区Map到指定的数据位置(在本例中是hdfs)。但是,数据不会移动到配置单元内部仓库位置。
更多详情请参见此处

相关问题