海量数据迁移之外部表加载

简介: 在并行生成了大量的dump文件后,可以在目标环境上对数据进行加载,这个加载的过程时间极短,都基本可以在毫秒级完成。 由于在外部表的加载过程中需要知道表结构的定义,所以可以通过如下的脚本得到表定义的基本语句,输出和desc类似。
在并行生成了大量的dump文件后,可以在目标环境上对数据进行加载,这个加载的过程时间极短,都基本可以在毫秒级完成。
由于在外部表的加载过程中需要知道表结构的定义,所以可以通过如下的脚本得到表定义的基本语句,输出和desc类似。
因为目标环境中的表结构可能会和源dump文件中的表结构有一定的出入。所以可以在目标环境中生成表结构的定义语句。
批量加载生成的dump文件。

大体的效果如下
根据目标环境的表结构定义,生成黄色部分的表结构定义语句。然后在加载dump的时候,可以动态批量的加载dump文件,值得一提的是,甚至可以基于业务需要来选择性的加载。
CREATE TABLE T_EXT2
   (    id number,object_id number,object_name varchar2(30),object_type varchar2(30),clob_test clob
   ) 
   ORGANIZATION EXTERNAL 
    ( TYPE ORACLE_DATAPUMP
      DEFAULT DIRECTORY "EXPDP_LOCATION"
      LOCATION
       ( 'cust1.dmp'
       )
    )
   PARALLEL 2;


实现的shell脚本如下:
owner=`echo "$1"|tr '[a-z]' '[A-Z]'`
tab_name=`echo "$2"|tr '[a-z]' '[A-Z]'`


dump_list=`cat  ../DUMP_LIST/${tab_name}_par_dmp.lst`
print "conn  n1/n1 
set feedback off
set linesize 100
col data_type format a30
set pages 0
set termout off
SELECT 
        t1.COLUMN_NAME,  
        t1.DATA_TYPE  
        || DECODE (  
             t1.DATA_TYPE,  
              'NUMBER', DECODE (  
                              '('  
                           || NVL (TO_CHAR (t1.DATA_PRECISION), '*')  
                           || ','  
                           || NVL (TO_CHAR (t1.DATA_SCALE), '*')  
                           || ')',  
                           '(*,*)', NULL,  
                           '(*,0)', '(38)',  
                              '('  
                           || NVL (TO_CHAR (t1.DATA_PRECISION), '*')  
                           || ','  
                           || NVL (TO_CHAR (t1.DATA_SCALE), '*')  
                           || ')'),  
              'FLOAT', '(' || t1.DATA_PRECISION || ')',  
              'DATE', NULL,  
              'TIMESTAMP(6)', NULL,  
              '(' || t1.DATA_LENGTH || ')')  ||','
           AS DATA_TYPE
           from all_tab_columns t1 where owner=upper('$1') AND table_name=upper('$2' )
order by t1.column_id;
"|sqlplus -s /nolog > ${tab_name}.temp
#ksh getddl.sh $owner $tab_name > ${tab_name}.temp
sed -e '/^$/d' -e '$s/.$//' -e  's/CLOB(4000)/CLOB/g' -e  's/BLOB(4000)/BLOB/g' ${tab_name}.temp > ../DESC_LIST/${tab_name}.desc  --过滤clob,blob显示的问题
rm ${tab_name}.temp
##body_desc=`cat ${tab_name}.desc`
##body_desc=${body_desc%?}
echo loading table ${tab_name} as ${tab_name}_EXT2
sqlplus -s n1/n1 set timing on
set echo on
CREATE TABLE  ${tab_name}_EXT2
   ( 
  `cat ../DESC_LIST/${tab_name}.desc `    --动态加载表定义语句
   ) 
   ORGANIZATION EXTERNAL 
    ( TYPE ORACLE_DATAPUMP
      DEFAULT DIRECTORY $3 
      LOCATION(
  `cat ../DUMP_LIST/${tab_name}_par_dmp.lst`   --动态加载dump文件列表
    ));
EOF
exit
目录
相关文章
|
5月前
|
存储 SQL 分布式计算
数据计算MaxCompute读取外部表(数据在oss gz压缩)速度非常慢,有什么方法可以提升效率么?
数据计算MaxCompute读取外部表(数据在oss gz压缩)速度非常慢,有什么方法可以提升效率么?
52 1
|
5月前
|
机器学习/深度学习 分布式计算 Hadoop
一种HBase表数据迁移方法的优化
一种HBase表数据迁移方法的优化
52 0
|
3月前
|
DataWorks NoSQL 关系型数据库
dataworks数据集问题之归档存储报错如何解决
DataWorks数据集是指在阿里云DataWorks平台内创建、管理的数据集合;本合集将介绍DataWorks数据集的创建和使用方法,以及常见的配置问题和解决方法。
30 3
|
5月前
|
分布式计算 数据可视化 数据挖掘
对maxcompute的数据进行临时分析 比如数据分布什么的 用什么工具比较好?
对maxcompute的数据进行临时分析 比如数据分布什么的 用什么工具比较好?
56 3
|
7月前
|
SQL 分布式计算 大数据
大数据问题排查系列 - 因HIVE 中元数据与HDFS中实际的数据不一致引起的问题的修复
大数据问题排查系列 - 因HIVE 中元数据与HDFS中实际的数据不一致引起的问题的修复
|
11月前
|
数据采集 SQL 分布式计算
大数据数据采集的数据迁移(同步/传输)的Sqoop之基本命令和使用的查询库/表
在大数据领域中,Sqoop是一款非常流行的数据迁移工具。它可以将关系型数据库中的数据快速地移动到Hadoop生态系统中,方便我们进行更深入的分析和处理。本文将介绍Sqoop的基本命令及如何使用Sqoop来查询库表,希望能够为大家提供一些参考和帮助。
130 0
|
SQL 分布式计算 Java
Apache Hudi表自动同步至阿里云数据湖分析DLA
Hudi 0.6.0版本之前只支持将Hudi表同步到Hive或者兼容Hive的MetaStore中,对于云上其他使用与Hive不同SQL语法MetaStore则无法支持,为解决这个问题,近期社区对原先的同步模块hudi-hive-sync进行了抽象改造,以支持将Hudi表同步到其他类型MetaStore中,如阿里云的数据湖分析DLA(https://www.aliyun.com/product/datalakeanalytics中。
314 0
Apache Hudi表自动同步至阿里云数据湖分析DLA
|
NoSQL 数据库 Redis
深入了解数据导入的一些解决方案
项目中除了有数据导出之外,也存在批量数据导入的场景。比如通过Execl电子表格进行批量开卡,批量导入用户或者部门信息等。今天探讨一下常见的数据导入方案。
222 0
深入了解数据导入的一些解决方案
|
运维
Clickhouse-表引擎的一些应用心得-重命名能力
Clickhouse-表引擎的一些应用心得-重命名能力
878 0
|
存储 SQL NoSQL
海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解
海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解
357 0
海量结构化数据存储技术揭秘:Tablestore存储和索引引擎详解