我有两个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表。
显然,我只希望将第一个数据集加载到一个表中,将第二个不同数据集仅加载到另一个表中
任何人都可以帮助指出错误或提供可能的解决方案吗?
提前致谢。
答案 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/'
注意:如果您使用多个表格,那么它们的位置应该是唯一的。