如何在不删除源文件的情况下从HDFS加载数据到hive?

发布于 2024-12-06 20:36:26 字数 205 浏览 0 评论 0原文

当使用命令将数据从 HDFS 加载到 Hive 时

LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;

,看起来像是将 hdfs_file 移动到 hive/warehouse 目录。 是否可以(如何?)复制它而不是移动它,以便该文件被另一个进程使用。

When load data from HDFS to Hive, using

LOAD DATA INPATH 'hdfs_file' INTO TABLE tablename;

command, it looks like it is moving the hdfs_file to hive/warehouse dir.
Is it possible (How?) to copy it instead of moving it, in order, for the file, to be used by another process.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜光 2024-12-13 20:36:26

从你的问题来看,我假设你的数据已经存在于 hdfs 中。
因此,您不需要LOAD DATA,这会将文件移动到默认配置单元位置/user/hive/warehouse。您可以使用 external 关键字简单地定义表,这会将文件保留在原位,但会在 hive 元存储中创建表定义。参见这里:
创建表 DDL
例如:

create external table table_name (
  id int,
  myfields string
)
location '/my/location/in/hdfs';

请注意,您使用的格式可能与默认格式不同(如 JigneshRawal 在评论中提到的)。您可以使用自己的分隔符,例如使用 Sqoop 时:

row format delimited fields terminated by ','

from your question I assume that you already have your data in hdfs.
So you don't need to LOAD DATA, which moves the files to the default hive location /user/hive/warehouse. You can simply define the table using the externalkeyword, which leaves the files in place, but creates the table definition in the hive metastore. See here:
Create Table DDL
eg.:

create external table table_name (
  id int,
  myfields string
)
location '/my/location/in/hdfs';

Please note that the format you use might differ from the default (as mentioned by JigneshRawal in the comments). You can use your own delimiter, for example when using Sqoop:

row format delimited fields terminated by ','
以往的大感动 2024-12-13 20:36:26

我发现,当您同时使用 EXTERNAL TABLE 和 LOCATION 时,Hive 会创建表,并且最初不会出现任何数据(假设您的数据位置与 Hive 'LOCATION' 不同)。

当您使用 'LOAD DATA INPATH' 命令时,数据从数据位置移动(而不是复制)到您在创建 Hive 表时指定的位置。

如果创建 Hive 表时未指定位置,它将使用内部 Hive 仓库位置,并且数据将从源数据位置移动到内部 Hive 数据仓库位置(即 /user/hive/warehouse/)。

I found that, when you use EXTERNAL TABLE and LOCATION together, Hive creates table and initially no data will present (assuming your data location is different from the Hive 'LOCATION').

When you use 'LOAD DATA INPATH' command, the data get MOVED (instead of copy) from data location to location that you specified while creating Hive table.

If location is not given when you create Hive table, it uses internal Hive warehouse location and data will get moved from your source data location to internal Hive data warehouse location (i.e. /user/hive/warehouse/).

岁月如刀 2024-12-13 20:36:26

可以使用“加载数据”的替代方案,其中数据不会从现有源位置移动到 Hive 数据仓库位置。

您可以使用带有“LOCATION”选项的 ALTER TABLE 命令。下面是所需的命令

ALTER TABLE table_name ADD PARTITION (date_col='2017-02-07') LOCATION 'hdfs/path/to/location/'

,这里唯一的条件是,位置应该是目录而不是文件。

希望这能解决问题。

An alternative to 'LOAD DATA' is available in which the data will not be moved from your existing source location to hive data warehouse location.

You can use ALTER TABLE command with 'LOCATION' option. Here is below required command

ALTER TABLE table_name ADD PARTITION (date_col='2017-02-07') LOCATION 'hdfs/path/to/location/'

The only condition here is, the location should be a directory instead of file.

Hope this will solve the problem.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文