hive - 当您使用 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/
两个问题:
第二个命令是否在 HDFS 中写入新数据以备份第二个表。如果是,那么阻止 HIVE 表单创建新数据的替代方法是什么?
每次收到新的 CSV 文件时,我可以插入而不是插入覆盖以追加新数据吗?
解决方案
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)是的,您需要执行插入以将新数据附加到现有数据
推荐阅读
- ios - Swift:拖放委托 - 拖放到另一个文本视图时无法拖出文本视图
- flutter - Flutter 为 HTML 加载本地资源
- c - 操作系统会向设备请求中断吗?
- angular - 为应用程序中的所有输入设置默认指令
- postman - 检查 Postman 测试用例中的空值 .not.eql() 或 .not.equal() 不起作用
- apache-flink - Flink 如何使用从 Avro 输入数据推断出的模式创建表
- node.js - 从查询返回数据时,我们如何获取唯一 ID
- php - window.location.replace() 和 window.location 在 jquery 代码中不起作用
- c++ - 用于映射一对一关系的 STL 类型?
- r - R - 如何从插值等高线图中获取数据