我有一个非常基本的问题:如何向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中文本文件的路径。
表中的行由回车符分隔,列用逗号分隔。
感谢您的帮助!
答案 0 :(得分:4)
您只需要创建一个指向您的文件的外部表 在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;
答案 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分区中加载数据。
以下是一些细节
使用LOCATION
- 在创建Hive表时使用。在这种情况下,数据已经加载并在Hive表中可用。
**LOAD DATA INPATH**
选项 - 此Hive命令可用于从指定位置加载数据。这里要记住的是,数据将从输入路径MOVED到Hive仓库路径。
示例 -
LOAD DATA INPATH 'hdfs://cluster-ip/path/to/data/location/'
使用 ALTER TABLE
命令 - 通常用于将其他位置的数据添加到Hive分区。在这种情况下,需要已定义所有分区,并且已知分区的值。如果是动态分区,则不需要此命令。
示例 -
ALTER TABLE table_name ADD PARTITION (date_col='2018-02-21') LOCATION 'hdfs/path/to/location/'
上面的代码将分区映射到指定的数据位置(在本例中为HDFS)。但是,数据不会移动到Hive内部仓库位置。
其他详细信息可供here
使用