我在hdfs中有一个名为test.csv
的csv文件。该文件通过filezilla放在那里。当我使用与用于将文件放入hdfs的相同帐户凭据通过putty登录到Edge节点时,我能够查看文件的路径和内容。然后我连接到Hive并尝试使用以下语句创建一个外部表,指定我的csv文件在hdfs中的位置:
CREATE EXTERNAL TABLE(col1 string, col2 string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' STORED AS ORC LOCATION '/file path'
当我执行此命令时,它正在hive上创建一个外部表,但是正在创建的表是空的,只显示了我在create语句中已经提到过的列。我的问题是,我是否在上面的create语句中的location参数中指定了正确的路径?当我将csv文件放入hdfs时,我尝试使用我在filezilla上看到的路径,其格式为home/servername/username/directory/subdirectory/file
但是这会返回一个错误,指出在上面的路径中指定了用户名的用户在文件路径上没有所有权限。
注意:我检查了文件的权限及其所在的目录,并且用户具有所有权限(读取,写入和执行)。
然后我尝试将路径更改为格式user/username/directory/subdirectory/file
,当我这样做时,我能够创建外部表,但表是空的,并且不会加载csv文件中的所有数据创建。
我还尝试了另一种创建内部表的方法,如下所示,然后使用LOAD DATA INPATH
命令。但是这也失败了,因为我收到一条错误,说“指定路径上没有文件存在”。
CREATE TABLE foobar(key string, stats map<string, bigint>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '|'
MAP KEYS TERMINATED BY ':' ;
LOAD DATA INPATH '/tmp/foobar.csv' INTO TABLE foobar;
答案 0 :(得分:-1)
首先,您无法将csv文件直接加载到创建时使用orc文件格式指定的Hive表中。 Orc是一种以优化方式存储数据的压缩技术。因此,您可以按照以下步骤将数据加载到orc格式表中。
您应该以文本文件格式创建临时表。
使用该命令将数据加载到其中。 蜂房&GT;在路径中加载数据..... 或者你可以在创建表本身时使用location参数。
现在创建一个hive表作为您所需的文件格式(RC,ORC,镶木地板等)。
- 现在使用以下命令将数据加载到其中。
蜂房&GT;将覆盖插入表foobar作为select * from temptbl;
您将获得orc文件格式的表格。
第二个问题是如果使用LOAD DATA命令将数据加载到表中,则文件中的数据将变为空,并且将在默认位置(/ user / hive / warehouse /)中创建新目录。表名和数据将移入该文件。因此,请检查该位置,您将看到数据。