Hive 是否需要显式命令将数据从 HDFS 加载到 table

Does Hive need an explicit command to load data into the table from HDFS

这有什么区别:

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;

第一个创建语句是完全错误的:STORED AS 应该是TEXTFILE、ORC、Parquet 等,它不是位置,当然创建时table 不应该提供文件名。配置单元中的表是在位置(文件夹)而不是文件上创建的,属性 for tables location 是 LOCATION,而不是 STORED AS。请参阅最近的示例:

第二个创建语句在没有指定位置的情况下创建 table(默认位置将用于托管 tables,像这样 /user/hive/warehouse/dbo/table1),请参阅此处了解更多详细信息 执行 DESC FORMATTED dbo.table1 并检查 LOCATION。

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