LOAD DATA INPATH 将相同的基于 CSV 的数据加载到两个不同的外部 Hive 表中
Posted
技术标签:
【中文标题】LOAD DATA INPATH 将相同的基于 CSV 的数据加载到两个不同的外部 Hive 表中【英文标题】:LOAD DATA INPATH loads same CSV-base data into two different and external Hive tables 【发布时间】:2016-12-13 20:56:46 【问题描述】:我有两个 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 表中,它还将完全相同的文件数据加载到 第二个 蜂巢表。
显然,我only希望将第一个数据集加载到一个表中,将第二个distinct数据集only加载到另一个表中.
谁能帮忙指出错误或提供可能的解决方案?
提前致谢。
【问题讨论】:
【参考方案1】:看起来您只需要为第二个表指定不同的“位置”。当您执行“加载数据”时,Hive 实际上是将数据复制到该路径中。如果两个表具有相同的“位置”,它们将共享相同的数据。
【讨论】:
你完全正确!这解决了这个问题。我不知道这种行为,因为这是第一次使用 HDInsight、Hadoop、Hive 等。我赞成你的答案 Rick,但由于我的代表低于 15 分,所以它不可见。感谢您抽出时间并努力帮助我。这也适用于你 Farooque 和 Sathiyan。谢谢大家!高度赞赏。【参考方案2】:您的位置是造成问题的原因。您为两张桌子提供了相同的位置。由于表是外部的,文件将直接在您的路径下创建。
LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1;
也将覆盖已经存在的文件。这就是你的桌子发生的事情。正如 Farooque 提到的,对于不同的表,位置应该是唯一的才能获得所需的结果。
【讨论】:
【参考方案3】:我看到您正在创建 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/'
注意:如果您使用多个表,那么它们的位置应该是唯一的。
【讨论】:
以上是关于LOAD DATA INPATH 将相同的基于 CSV 的数据加载到两个不同的外部 Hive 表中的主要内容,如果未能解决你的问题,请参考以下文章
Impala 表的 LOAD DATA LOCAL INPATH 问题
HDP3.x hive load data local inpath 设置
如何使用 spark 的通配符运行 LOAD DATA INPATH hive 命令?
Cannot load keys from store: class path resource [keystore.jks]