如何解决将字段加载并映射到Hive Table
我是新来的Apache Hive
。我在HDFS
中有两个文件,一个文件包含业务数据,另一个文件就像映射表。
例如:
文件1类似于:
id;value
1;val1
2;val2
3;val3
文件2如下:
value;mappedValue
val1;newValue1
val2;newValue2
val3;newValue3
我想创建一个包含配置值映射数据的配置单元表。
我想要的结果是这样的。
id;value
1;newValue1
2;newValue2
3;newValue3
做到这一点的最佳方法是什么?
解决方法
有很多方法可以做到这一点。
一种方法如下:
首先:从beeline(HIVE命令行)在HIVE中创建数据库和表。
$ beeline -u jdbc:hive2://localhost:10000
CREATE DATABASE IF NOT EXISTS db_business;
SHOW databases;
USE db_business;
CREATE TABLE IF NOT EXISTS business_data (
id INT,value STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;'
STORED AS TEXTFILE
TBLPROPERTIES("skip.header.line.count"="1");
CREATE TABLE IF NOT EXISTS mapping_table (
value STRING,mapped_value STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;'
STORED AS TEXTFILE
TBLPROPERTIES("skip.header.line.count"="1");
SHOW tables;
第二:我们必须将数据加载到表中。
LOAD DATA INPATH
将从原始文件中删除文件。
LOAD DATA INPATH '/home/user/mydir/business_data.csv' INTO TABLE business_data;
LOAD DATA INPATH '/home/user/mydir/mapping_table.csv' INTO TABLE mapping_table;
您可以使用hdfs dfs
命令将数据加载到配置单元表中,而无需从原始位置删除数据
$ hdfs dfs -cp /home/user/origin/file.csv /user/hive/warehouse/db_business.db/business_data
$ hdfs dfs -cp /home/user/origin/file1.csv /user/hive/warehouse/db_business.db/mapping_table
第三:我们可以使用CTAS(Create table as select)
创建第三个表并将两个表连接起来。
CREATE TABLE master_table
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\;'
STORED AS TEXTFILE AS
SELECT id,mapped_value AS value
FROM business_data AS b
JOIN mapping_table AS m ON(b.value = m.value);
SELECT * FROM master_table;
+------------------+---------------------+--+
| master_table.id | master_table.value |
+------------------+---------------------+--+
| 1 | newValue1 |
| 2 | newValue2 |
| 3 | newValue3 |
+------------------+---------------------+--+
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。