【发布时间】:2021-12-10 02:43:28
【问题描述】:
我在我的 Hadoop 集群中创建了一些表,并且我有一些 parquet 表,其中包含要放入的数据。如何执行此操作?我想强调一下,我已经有空表,是用一些 DDL 命令创建的,而且它们也存储为 parquet,所以我不必创建表,只需要导入数据。
【问题讨论】:
我在我的 Hadoop 集群中创建了一些表,并且我有一些 parquet 表,其中包含要放入的数据。如何执行此操作?我想强调一下,我已经有空表,是用一些 DDL 命令创建的,而且它们也存储为 parquet,所以我不必创建表,只需要导入数据。
【问题讨论】:
您应该利用 hive 功能,使您能够使用 parquet 导入数据。即使您不想创建新表。我认为这意味着 parquet 表模式与现有的空表相同。如果不是这种情况,那么下面将无法正常工作。您必须选择所需的列。那里
在这里,您已经拥有的空表称为emptyTable,位于myDatabase。您要添加的新数据位于/path/to/parquet/hdfs_path_of_parquet_file
CREATE TABLE myDatabase.my_temp_table
LIKE PARQUET '/path/to/parquet/hdfs_path_of_parquet_file'
STORED AS PARQUET
LOCATION '/path/to/parquet/';
INSERT INTO myDatabase.emptyTable as
SELECT * from myDatabase.my_temp_table;
DELETE TABLE myDatabase.my_temp_table;
您说您不想创建表格,但我认为上面的内容有点欺骗您的问题。
另一个选项再次假设 parquet 的架构已经与您已经拥有的空表定义相同:
ALTER TABLE myDatabase.emptyTable SET LOCATION '/path/to/parquet/';
这在技术上不是创建一个新表,但确实需要更改您已经创建的表,所以我不确定这是否可以接受。
您说这是一个蜂巢的东西,所以我已经给了您蜂巢的答案,但如果emptyTable 表定义以您拥有/path/to/parquet/hdfs_path_of_parquet_file 的确切格式理解镶木地板,您可以将此文件放入定义的文件夹中通过表定义:
show create table myDatabase.emptyTable;
这会自动将数据添加到现有表中。提供匹配的表定义。 Hive 是读取模式,因此您实际上不需要“导入”,只需启用 Hive 即可“解释”。
【讨论】: