我对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文件时都可以插入而不是插入覆盖来追加新数据吗?
答案 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)是,您需要执行插入操作以将新数据追加到现有数据中