load data inpath将相同的csv基本数据加载到两个不同的外部配置单元表中

hc2pp10m  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(317)

我有两个csv文件上传到hdinsight中的azure blob存储。我可以上传这两个文件到集群没有问题。然后我创建了两个Hive表。。。

CREATE EXTERNAL TABLE IF NOT EXISTS hive_table1(id int, age string, date string...) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;' STORED AS TEXTFILE LOCATION '/user/hive/warehouse'

类似的语法适用于另一个表。
现在我想将第一个csv文件加载到第一个表中,将第二个csv文件加载到第二个表中(结果是不对应的列)。
我用。。。

LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1;

…并且我能够将csv文件数据加载到第一个表中。但是…,它不仅将第一个数据集加载到第一个配置单元表中,还将完全相同的文件数据加载到第二个配置单元表中。
显然,我只想将第一个数据集加载到一个表中,而将第二个不同的数据集加载到另一个表中。
有人能帮忙指出错误或提供可能的解决方案吗?
提前谢谢。

jum4pzuy

jum4pzuy1#

我看到你在创造 external 并创建两个表,每个表有一个文件。
您必须遵循以下简单步骤:
创建表

CREATE EXTERNAL TABLE IF NOT EXISTS hive_table1(id int, age string, date string...) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ';' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/table1_dir/'

将文件复制到hdfs位置

hdfs dfs -put '/file/file1.csv' '/user/hive/warehouse/table1_dir/'

第二张table也一样
创建表

CREATE EXTERNAL TABLE IF NOT EXISTS hive_table2(id int, age string, date string...) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ';' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/table2_dir/'

将文件复制到hdfs位置

hdfs dfs -put '/file/file2.csv' '/user/hive/warehouse/table2_dir/'

注意:如果您使用多个表,那么它们的位置应该是唯一的。

2nc8po8w

2nc8po8w2#

你的位置是造成问题的原因。您为两个表指定了相同的位置。由于表是外部的,所以文件将直接在您的路径下创建。
LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1; 将覆盖已存在的文件。你的table就是这样。正如farooque提到的,对于不同的表,位置应该是唯一的,以获得所需的结果。

slhcrj9b

slhcrj9b3#

看起来您只需要为第二个表指定一个不同的“位置”。当您执行“加载数据”时,配置单元实际上是在将数据复制到该路径中。如果两个表具有相同的“位置”,它们将共享相同的数据。

相关问题