如何解决Hive 是否需要显式命令将数据从 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 等,它不是位置,当然创建表时不应该提供文件名。 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
并检查 LOCATION。
是的,您需要执行加载数据,因为您的文件不在表位置。如果将文件放置到该表的某个专用位置,则可以创建外部表并指定位置。但是您的文件当前位于不应用作表位置的文件夹中:/usr/hive。这个 /usr/hive/table1 看起来好多了。或者,您可以像在第二个 CREATE 语句中一样创建表,然后使用 hadoop fs cp
命令将文件复制到它的位置。 LOAD DATA does the same。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。