当您使用insert into命令时,Hive是否会创建新数据?

时间:2019-01-04 11:38:27

标签: 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/

两个问题:

  • 第二条命令是否在HDFS中写入新数据以备份第二张表。如果是,那么防止HIVE表单创建新数据的替代方法是什么?

  • 我每次接收到新的CSV文件时都可以插入而不是插入覆盖来追加新数据吗?

1 个答案:

答案 0 :(得分:0)

1)第二个命令:

LOAD DATA INPATH'/user/maria_dev/drivers.csv'覆盖表temp_drivers

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

如果有多个csv文件需要加载到temp_drivers表中,则可以使用以下命令: LOAD DATA INPATH'/user/maria_dev/data1.csv'插入表temp_drivers; LOAD DATA INPATH'/user/maria_dev/data2.csv'插入表temp_drivers;

2)是,您需要执行插入操作以将新数据追加到现有数据中