Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用sqoop将选定数据从oracle db导入S3,并使用选定数据在AWS EMR上创建配置单元表脚本_Oracle_Hadoop_Amazon S3_Hive_Sqoop - Fatal编程技术网

使用sqoop将选定数据从oracle db导入S3,并使用选定数据在AWS EMR上创建配置单元表脚本

使用sqoop将选定数据从oracle db导入S3,并使用选定数据在AWS EMR上创建配置单元表脚本,oracle,hadoop,amazon-s3,hive,sqoop,Oracle,Hadoop,Amazon S3,Hive,Sqoop,我不熟悉大数据技术。我的工作低于要求,需要帮助,使我的工作更简单 假设我在OracleDB中有两个表,每个表中有500列。我的任务是将所选列数据从两个表(通过联接查询)移动到AWS S3,并在AWS-EMR上的配置单元表中填充数据。 目前,为了完全满足我的要求,我遵循以下步骤 使用选定列在AWS-EMR上创建外部配置单元表。我知道列名,但要确定配置单元的列数据类型,我将访问oracle数据库表,确定oracle中的列类型,并创建配置单元脚本 创建表之后,我将使用所选的查询数据编写sqoop导入命

我不熟悉大数据技术。我的工作低于要求,需要帮助,使我的工作更简单

假设我在OracleDB中有两个表,每个表中有500列。我的任务是将所选列数据从两个表(通过联接查询)移动到AWS S3,并在AWS-EMR上的配置单元表中填充数据。 目前,为了完全满足我的要求,我遵循以下步骤

  • 使用选定列在AWS-EMR上创建外部配置单元表。我知道列名,但要确定配置单元的列数据类型,我将访问oracle数据库表,确定oracle中的列类型,并创建配置单元脚本
  • 创建表之后,我将使用所选的查询数据编写sqoop导入命令,并将目录提供给S3
  • 根据S3数据修复表
  • 详细说明,, 假设T1和T2是两个表,T1有500列从T1_C1到T1_C500,具有各种数据类型(Number、Varchar、Date)等。类似地,T2也有500列从T2_C1到T2_C500。 现在,假设我想将ex:T1_C23、T1_C230、T1_C239、T2_C236、T1_C234、T2_C223的一些列移动到S3,并为所选列创建配置单元表,并了解我需要查看T1和T2表模式的数据类型。 有没有更简单的方法来实现这一点? 在上面提到的步骤中,第一步需要花费大量的手动时间,因为我需要查看表架构,获取所选列的数据类型,然后创建配置单元表

    简要介绍工作环境

    数据中心上运行的服务:

  • 甲骨文数据库

  • linux机器上的Sqoop

  • sqoop与oracle db对话,并配置为将数据推送到S3上

    在AWS上运行的服务:

  • S3

  • AWS EMR蜂箱

  • hive与S3对话并使用S3数据修复表。

    1)
    为了简化配置单元表的生成,可以使用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 ...;
    

    但是如何将其存储在S3中呢?