1

这有什么区别:

CREATE TABLE dbo.table1(
 id INT,
 firstname STRING,

) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS /usr/hive/sample_data.csv
;

CREATE TABLE dbo.table1(
 id INT,
 firstname STRING
) ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
;

然后

LOAD DATA INPATH '/usr/hive/sample_data.csv' INTO dbo.table1;
4

1 回答 1

0

第一个创建语句是完全错误的: STORED AS 应该是 TEXTFILE、ORC、Parquet 等,它不是位置,当然当你创建表时你不应该提供文件名。hive 中的表是在位置(文件夹)上创建的,而不是在文件上创建的,并且表位置的属性是 LOCATION,而不是 STORED AS。查看最近的示例:https ://stackoverflow.com/a/68095278/2700344

第二个创建语句创建未指定位置的表(默认位置将用于托管表,例如 /user/hive/warehouse/dbo/table1 ),请参阅此处更多详细信息https://stackoverflow.com/a/67073849/2700344 执行DESC FORMATTED dbo.table1并检查位置。

是的,您需要执行加载数据,因为您的文件不在表位置。如果您将文件放入该表的某个专用位置,则可以创建外部表并指定位置。但是您的文件当前位于不应用作表位置的此类文件夹中:/usr/hive。这个 /usr/hive/table1 看起来好多了。或者,您可以像在第二个 CREATE 语句中一样创建表,然后使用hadoop fs cp命令将文件复制到它的位置。加载数据也是如此

于 2021-06-24T15:14:32.847 回答