我有一个非常基本的问题:如何向配置单元添加一个非常简单的表。我的表格保存在一个文本文件(.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中文本文件的路径。
表中的行用回车分隔,列用逗号分隔。
谢谢你的帮助!
4条答案
按热度按时间pgccezyw1#
您只需创建一个外部表,指向hdfs中的文件位置,并具有如下分隔符属性:
你得跑了
select
查询(因为文件已经在hdfs中,并且在中指定位置时外部表直接从中获取数据)create
声明)。所以您可以使用下面的select语句进行测试:SELECT * FROM Data;
jhkqcmku2#
然后将文件加载到表中
然后
bnlyeluc3#
如果hdfs中有数据,则使用:
使用
select * from table_name
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)。但是,数据不会移动到配置单元内部仓库位置。更多详情请参见此处