使用sqoop将选定的数据从oracledb导入s3,并使用选定的数据在aws emr上创建配置单元表脚本

tvz2xvvm  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(369)

我对大数据技术很陌生。我的工作在以下要求,需要帮助,使我的工作更简单。
假设我在oracledb中有两个表,每个表中有500列。我的任务是将两个表中选定的列数据(通过join查询)移动到awss3,并在aws emr上填充hive表中的数据。目前要完全满足我的要求,我遵循以下步骤。
使用所选列在aws emr上创建外部配置单元表。我知道列名,但要标识配置单元的列数据类型,我将转到oracle数据库表并标识oracle中的列类型并创建配置单元脚本。
一旦创建了表,我就用所选的查询数据编写sqoop import命令,并将目录提供给s3。
从s3数据修复表。
为了详细说明,假设t1和t2是两个表,t1有500列从t1\u c1到t1\u c500,具有各种数据类型(number、varchar、date)等。同样,t2也有500列从t2\u c1到t2\u c500。现在假设我想将一些列移动到s3,为所选列创建配置单元表,并知道我需要查看t1和t2表模式的数据类型。有没有更简单的方法来实现这一点?在上面提到的步骤中,第一步需要大量的手动时间,因为我需要查看表架构,获取所选列的数据类型,然后创建配置单元表。
简要介绍工作环境。
数据中心上运行的服务:
oracle数据库
linux机器上的sqoop。
sqoop与oracledb通信,并配置为将数据推送到s3上。
在aws上运行的服务:
s3级
aws emr配置单元
hive与s3通信并使用s3数据修复表。

62lalag4

62lalag41#

为了简化配置单元表的生成,可以使用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类型转换为配置单元类型
2)
我记得,sqoop很容易导出表,所以您可以在oracle中创建视图,将连接查询隐藏在其中,然后通过sqoop导出此视图:

CREATE OR REPLACE VIEW V_T1_T2 AS
SELECT * FROM T1 JOIN T2 ON ...;

相关问题