使用 sqoop 将选定数据从 oracle db 导入 S3,并在 AWS EMR 上使用选定数据创建配置单元表脚本
Posted
技术标签:
【中文标题】使用 sqoop 将选定数据从 oracle db 导入 S3,并在 AWS EMR 上使用选定数据创建配置单元表脚本【英文标题】:Import selected data from oracle db to S3 using sqoop and create hive table script on AWS EMR with selected data 【发布时间】:2015-09-24 11:32:49 【问题描述】:我是大数据技术的新手。我正在处理以下要求,需要帮助以简化我的工作。
假设我在 oracle db 中有 2 个表,每个表有 500 列。我的任务是将两个表中的选定列数据(通过连接查询)移动到 AWS S3,并在 AWS-EMR 上的 hive 表中填充数据。 目前,为了满足我的要求,我按照以下步骤操作。
-
在 AWS-EMR 上使用选定的列创建外部配置单元表。我知道列名,但要识别 hive 的列数据类型,我将访问 oracle 数据库表并识别 oracle 中的列类型并创建 hive 脚本。
创建表后,我正在编写带有选定查询数据的 sqoop 导入命令,并将目录目录提供给 S3。
根据 S3 数据修复表。
详细解释, 假设 T1 和 T2 是两个表,T1 从 T1_C1 到 T1_C500 有 500 列,具有各种数据类型(数字、Varchar、Date)等。同样,T2 也有从 T2_C1 到 T2_C500 的 500 列。 现在假设我想将一些列例如:T1_C23、T1_C230、T1_C239、T2_C236、T1_C234、T2_C223 移动到 S3 并为选定的列创建配置单元表并了解我需要查看 T1 和 T2 表架构的数据类型。 有没有更简单的方法来实现这一点? 在上述步骤中,第一步需要大量手动时间,因为我需要查看表架构并获取所选列的数据类型,然后创建配置单元表。
简单介绍一下工作环境。
在数据中心上运行的服务:
Oracle 数据库
Linux 机器上的 Sqoop。
sqoop 与 oracle db 对话并配置为在 S3 上推送数据。
在 AWS 上运行的服务:
S3
AWS EMR 配置单元
hive 与 S3 对话并使用 S3 数据修复表。
【问题讨论】:
【参考方案1】:1) 为了简化 Hive 表的生成,您可以使用 Oracle 字典
SELECT t.column_name || ' ' ||
decode(t.data_type, 'VARCHAR2', 'VARCHAR', 'NUMBER', 'DOUPLE') ||
' COMMENT '||cc.comments||',',
t.*
FROM user_tab_columns t
LEFT JOIN user_col_comments cc
ON cc.table_name = t.table_name
AND cc.column_name = t.column_name
WHERE t.table_name in ('T1','T2')
ORDER BY t.table_name, t.COLUMN_id;
此数据集的第一列将是您的CREATE TABLE
命令的列列表。
您需要修改 DECODE 以正确地将 Oracle 类型转换为 Hive 类型
2)
我记得sqoop很容易导出表,所以你可以在Oracle中创建视图来隐藏连接查询并通过sqoop导出这个视图:
CREATE OR REPLACE VIEW V_T1_T2 AS
SELECT * FROM T1 JOIN T2 ON ...;
【讨论】:
但是如何将其存储在 S3 中?以上是关于使用 sqoop 将选定数据从 oracle db 导入 S3,并在 AWS EMR 上使用选定数据创建配置单元表脚本的主要内容,如果未能解决你的问题,请参考以下文章
使用 Sqoop 将视图(数据库表重)从 Oracle 迁移到 Hive
使用 MapReduce 或 Sqoop 将数据加载到 Greenplum DB