首页 > 解决方案 > 当您使用 insert into 命令时,Hive 是否会创建新数据?

问题描述

我对 Hive 中的“插入”和“插入覆盖”命令有疑问。

我在 HDFS 中有一个 CSV 文件。我想从几列中提取值到一个配置单元表中。我将全部内容加载到一个带有一个 STRING 列的 HIVE 表中。我创建表:

CREATE TABLE temp_drivers (col_value STRING) STORED AS TEXTFILE

我加载数据:

LOAD DATA INPATH '/user/maria_dev/drivers.csv' OVERWRITE INTO TABLE temp_drivers

我的 CSV 文件的每一行都是 col_value 列中的一行。

我创建了第二个表:

CREATE TABLE drivers (driverId INT, name STRING, ssn BIGINT, location 
STRING, certified STRING, wageplan STRING)

然后我通过调用 regexp_extract 将第一个表中的一些数据插入到第二个表中,假设:

insert overwrite table drivers
SELECT
regexp_extract(col_value, '^(?:([^,]*),?){1}', 1) driverId,
regexp_extract(col_value, '^(?:([^,]*),?){2}', 1) name,
regexp_extract(col_value, '^(?:([^,]*),?){3}', 1) ssn,
regexp_extract(col_value, '^(?:([^,]*),?){4}', 1) location,
regexp_extract(col_value, '^(?:([^,]*),?){5}', 1) certified,
regexp_extract(col_value, '^(?:([^,]*),?){6}', 1) wageplan
from temp_drivers

这些命令在 Hortonworks 上的本教程中可用: https ://hortonworks.com/tutorial/how-to-process-data-with-apache-hive/

两个问题:

标签: hive

解决方案


1)第二个命令:

LOAD DATA INPATH '/user/maria_dev/drivers.csv' OVERWRITE INTO TABLE temp_drivers

将覆盖 temp_drivers 表并加载存在于 drivers.csv 中的数据

如果您有多个 csv 文件需要加载到 temp_drivers 表,您可以使用以下命令: LOAD DATA INPATH '/user/maria_dev/data1.csv' INTO TABLE temp_drivers; 加载数据 INPATH '/user/maria_dev/data2.csv' INTO TABLE temp_drivers;

2)是的,您需要执行插入以将新数据附加到现有数据


推荐阅读