LOAD DATA INPATH 将相同的基于 CSV 的数据加载到两个不同的外部 Hive 表中
LOAD DATA INPATH loads same CSV-base data into two different and external Hive tables
我有两个 CSV 文件上传到 HDInsight 中的 Azure Blob 存储。我可以毫无问题地将这两个文件上传到集群。然后我用...
创建了两个 Hive-tables
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'
另一个语法类似 table。
现在我想将第一个 CSV 文件加载到第一个 table 中,将第二个 CSV 文件加载到第二个 table 中(导致不对应的列)。
我用...
LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1;
...并且能够将 CSV 文件数据加载到第一个 table。 但是...,不仅第一个数据集被加载到第一个 Hive table,它 也 加载了完全相同的文件数据进入 second Hive table.
显然,我只想要将第一个数据集加载到一个table和第二个distinct数据集中只成其他table.
任何人都可以帮助指出错误或提供可能的解决方案吗?
提前致谢。
看来您只需要为第二个 table 指定一个不同的 'LOCATION'。当您执行 'LOAD DATA' 时,Hive 实际上是将数据复制到该路径中。如果两个 table 具有相同的 'LOCATION',它们将共享相同的数据。
我看到您正在创建 external
table 并创建 2 个 table,每个文件只有一个文件。
您必须按照以下简单步骤操作:
创建table
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
创建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/'
注意:如果您使用多个table,那么它们的位置应该是唯一的。
您所在的位置是造成问题的原因。您为两个表指定了相同的位置。由于表是外部的,文件将直接在您的路径下创建。
另外LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1;
将覆盖已经存在的文件。这就是您的表发生的情况。正如 Farooque 针对不同表格提到的那样,位置应该是唯一的才能获得所需的结果。
我有两个 CSV 文件上传到 HDInsight 中的 Azure Blob 存储。我可以毫无问题地将这两个文件上传到集群。然后我用...
创建了两个 Hive-tablesCREATE 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'
另一个语法类似 table。
现在我想将第一个 CSV 文件加载到第一个 table 中,将第二个 CSV 文件加载到第二个 table 中(导致不对应的列)。
我用...
LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1;
...并且能够将 CSV 文件数据加载到第一个 table。 但是...,不仅第一个数据集被加载到第一个 Hive table,它 也 加载了完全相同的文件数据进入 second Hive table.
显然,我只想要将第一个数据集加载到一个table和第二个distinct数据集中只成其他table.
任何人都可以帮助指出错误或提供可能的解决方案吗?
提前致谢。
看来您只需要为第二个 table 指定一个不同的 'LOCATION'。当您执行 'LOAD DATA' 时,Hive 实际上是将数据复制到该路径中。如果两个 table 具有相同的 'LOCATION',它们将共享相同的数据。
我看到您正在创建 external
table 并创建 2 个 table,每个文件只有一个文件。
您必须按照以下简单步骤操作:
创建table
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
创建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/'
注意:如果您使用多个table,那么它们的位置应该是唯一的。
您所在的位置是造成问题的原因。您为两个表指定了相同的位置。由于表是外部的,文件将直接在您的路径下创建。
另外LOAD DATA INPATH '/file/file1.csv' OVERWRITE INTO TABLE hive_table1;
将覆盖已经存在的文件。这就是您的表发生的情况。正如 Farooque 针对不同表格提到的那样,位置应该是唯一的才能获得所需的结果。