LOAD DATA INPATH将相同的CSV基础数据加载到两个不同的外部Hive表中

时间:2016-12-13 20:56:46

标签: csv azure hadoop hive hdinsight

我有两个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文件数据加载到第一个表中。 但是 ...,不仅第一个数据集加载到第一个Hive表中,它将完全相同的文件数据加载到中第二个 Hive表。

显然,我希望将第一个数据集加载到一个表中,将第二个不同数据集加载到另一个表中

任何人都可以帮助指出错误或提供可能的解决方案吗?

提前致谢。

3 个答案:

答案 0 :(得分:2)

看起来您只需要为第二个表指定不同的“LOCATION”。当你执行'LOAD DATA'时,Hive实际上是将数据复制到该路径中。如果两个表具有相同的“位置”,则它们将共享相同的数据。

答案 1 :(得分:1)

您的位置是创造问题的原因。您为两个表都指定了相同的位置。由于表是外部的,因此文件将直接在您的路径下创建。

此外LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1;将覆盖现有文件。这就是您的表格所发生的事情。正如Farooque针对不同的表所提到的,位置应该是唯一的,以获得期望的结果。

答案 2 :(得分:0)

我看到你正在创建external表并创建2个表,每个表都包含单个文件。

您必须按照以下简单步骤操作:

创建表格

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/'

类似于第二张表

创建表格

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/'

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