当前位置: 主页 > 数据库

dw连接access数据库-dw连接access

发布时间:2023-03-12 10:06   浏览次数:次   作者:佚名

dw连接access数据库_dw iis access网页_dw连接access

我们在之前的文章中介绍了如何。与Oracle迁移类似,作为在世界范围内有广泛用户的数据仓库产品,在综合评估了多种因素后,Teradata的很多用户选择迁移到Greenplum。我们将从为什么迁移和如何迁移两个层面来讨论如何从Teradata迁移到Greenplum。

01

Teradata产品和用户面临的问题

Teradata公司成立于1979年,主要为客户提供三种服务:基于云和硬件的数据仓库、业务分析和咨询服务。Teradata在1983年推出其首个数据库产品,并为数据仓库市场输送了大量的人才,之后很长一段时间内一直处于数据分析领域市场领导者的地位。

国内很多大型商业银行的数据仓库系统都是基于Teradata进行构建的。到2005年前后,随着Intel x86 64位处理器的发布,基于x86架构的服务器在企业里开始承担越来越多的计算工作,而Teradata一直固守其一体机架构,造成越来越多的企业难以承受其高昂的硬件成本和扩容维护费用。另一方面,用户的数据越来越多,业务对数据仓库的响应时间要求越来越短,而Teradata中存在读写互相阻塞的问题,无法满足业务的需求。面对这一矛盾dw连接access数据库,很多公司都在考虑如何更好地建设数据仓库以满足当前及未来一段时间的业务增长需求,甚至有用户想借此机会搭建新一代数据平台,在提供Teradata原有功能的同时,可以整合不同业务单元的数据,实现更加多元的业务能力。

在选择新的数据平台和Teradata的替代方案时,用户往往非常慎重,通常会从多个维度对市面上众多常见的商业和开源产品进行全方位的评估,包括功能、性能、高可用、可扩展性、开放性、数据加载速度、跨云跨平台能力、与第三方工具的集成能力、监控管理特性和总体成本等。用户期望寻找成本更低、更开放、功能和性能同样强大的替代方案。大量用户最终选择了Greenplum,并认同Greenplum是替代Teradata的最佳产品。

02

从Teradata迁移到Greenplum的可行性

熟悉数据产品的读者大多了解,Teradata和Greenplum都属于MPP数据库,这一架构上的相似性意味着从Teradata迁移到Greenplum是个非常自然的过程。熟悉Teradata的用户可以快速掌握Greenplum。同时,两者的语法非常接近、生态系统高度重合,这也极大地降低了迁移的难度和过程,使得Greenplum成为Teradata理想的替代产品。另外一方面,Greenplum相比Teradata更加开放,产品基于PostgreSQL完全开源,不需要专有硬件,大大降低了数据仓库构建的软硬件成本。

dw连接access_dw连接access数据库_dw iis access网页

Teradata架构

上图给出了Teradata的架构,可以看出,Teradata同样采用无共享(Shared Nothing)大规模并行处理( MPP)架构。主要包括解析引擎(Parsing Engine,PE)、计算引擎 (Access Module Processor,AMP)、消息通信层 (Bynet)三个模块。其中PE模块相当于Greenplum的 master节点,负责处理用户连接、SQL的解析、分发和最终查询结果的输出;AMP模块 相当于Greenplum 的segment节点,负责具体数据的计算工作;Bynet模块相当于Greenplum的interconnect部分,负责整个网络的通信和数据在不同节点的传输。此外,VDisk相当于Greenplum segment节点的本地存储。可见,Teradata在架构上和Greenplum基本一致,主要区别是在其对应的硬件部分,如Bynet是专门的硬件网络设备,VDisk部分对应的底层存储一般是通过共享存储划分逻辑单元号(LUN)的方式实现。

因为Greenplum和Teradata在架构上相似,且都支持ANSI SQL标准,因此两个产品中大量语句的语法都一致或者高度相似,即使有不一样的语法或者概念,也能在另一个产品中找到对应的语法或者概念。例如,对于create table命令,两者的语法基本一样;如果创建表时划分分区,两者都使用partition by。但对于数据分布的控制,Teradata使用primary index, 而Greenplum使用distributed by。对于大多数Teradata特有的概念和语法,迁移到Greenplum时可以忽略,极个别的情形下需要加以改写。

Greenplum和Teradata在工具链和生态系统上也存在着许多相似性。如下表所示,Teradata中常用的库和工具在Greenplum都有对应的使用方式和工具。所有常见的BI工具都同时内置支持Teradata和Greenplum。所以,使用商业智能(BI)工具的用户在迁移后依然可以使用自己熟悉的工具。

类型

Teradata

Greenplum

迁移说明

ODBC/JDBC

支持

支持

BI前端展现

工具

支持所有BI前端工具

支持所有BI前端工具

通过ODBC或JDBC标准访问DW,改动量很小或没有;

LOAD工具

fastload/ multiload/ tpump等

外部表导入、COPY等工具

采用工具对ETL脚本使用到的部分

批量自动修改

UNLOAD工具

fastexport等

外部表导出、COPY等工具

采用工具对ETL脚本使用到的部分

批量自动修改

命令执行

客户端

BTEQ

PSQL

采用工具对ETL脚本使用到的部分

批量自动修改

SQL-

dw连接access数据库_dw连接access_dw iis access网页

DML语法

支持ANSI SQL

支持ANSI SQL

Greenplum和Teradata的语法基本相同。Teradata有少量特殊语法或函数(如事务BT/ET、OLAP的csum,rank、qualify等、函数如char),Greenplum都有相对应的甚至更强大的函数,只是需要修改SQL中的语法。工作量不大

SQL-

语法DDL

使用PRIMARY INDEX、PPI等

使用Distribution分布数据,使用partition做表分区

DDL语法基本相同。需要将Teradata的PRIMARY INDEX改成Distribution key,PPI改成表分区

备份与恢复

采用NETVULT+archive工具

CRONTAB调度器+ gpbackup/

gprestore

实现数据库的自动备份

系统监控等管理工具

Teradata MANAGE

Greenplum Command Center

Teradata与Greenplum的数据库特征比较

虽然异构数据库迁移的工作量不小,但由于有上述大量相同点,从Teradata迁移到Greenplum往往是一个可以接受的工作。许多用户也在实践中发现这项工作比想象中容易。在国外,著名的投资银行摩根斯丹利成功将其部分Teradata集群迁移到Greenplum,并逐步扩大Greenplum的集群数量和使用场景。到2018年,摩根斯坦利在600多台机器上运行着24个生产集群,管理着多达25PB的原始数据。在国内,某大型商业银行在2013年就启动了部分Teradata集群向Greenplum的迁移,迁移完成后批量作业的处理时间减少了6个小时,报表查询响应时间减少为原来的¼。

03

如何从Teradata迁移到Greenplum

由于Grennplum和Teradata基于同样的MPP架构,所以在Teradata上的物理模型设计原则同样适用于Greenplum,迁移工作主要是对应语法的翻译。

01

迁移流程概述

Teradata迁移至Greenplum的总体流程如下图所示,主要分为历史数据迁移、日常加工流程迁移、应用接口迁移及管理工具迁移几个阶段。

dw iis access网页_dw连接access数据库_dw连接access

迁移总体流程图

1. 历史数据迁移

该阶段包括如下步骤:

在Teradata数据库中,按规定分隔符及字符编码将历史数据导成文本文件,存放于Greenplum数据库网络相通的ETL服务器本地磁盘或所连NAS上,确保Greenplum数据库通过gpfidst协议的外部表能读取数据文件。

从Teradata导出DDL脚本,按照Greenplum语法批量修改脚本,确保在Greenplum中能成功创建所有用户表。

2. 日常加工流程迁移

该阶段将ETL查询加工语句按Greenplum的DML语法进行转换dw连接access数据库,并根据Teradata与Greenplum函数对照表替换相关函数,转换ETL连接数据库方式。重新配置加工作业,历史数据迁移成功后,启动日常ETL作业。

3. 应用接口迁移

在该阶段,由于Greenplum数据库支持ODBC/JDBC,商业智能前端展现等工具可通过ODBC或JDBC标准访问数据仓库,改动网络连接IP等即可。

4. 管理工具部署

该阶段包括以下步骤:

部署Greenplum备份及恢复工具,定期备份数据及定期进行恢复演练。

部署相关管理工具,如Greenplum Command Center。

在上述各个阶段中,涉及到的主要迁移任务如下表所示。接下来我们将分别介绍各阶段的主要工作。

迁移任务

任务简述

dw iis access网页_dw连接access_dw连接access数据库

数据卸载

从Teradata卸载抽取历史数据

DDL导出

从Teradata导出表DDL脚本

DDL脚本转换迁移

按Greenplum语法对Teradata版DDL(包括表,索引,视图)脚本进行转换

数据加载

选择Greenplum数据加载方式,如外部表或者copy工具,准备加载脚本,进而进行数据加载

ETL工具脚本转换迁移

建立Greenplum到ETL服务器的网络连接,对数据加工模块脚本按Greenplum语法进行局部修改,查询语句转换及存储过程转换等

查询语句转换迁移

按Greenplum语法规则及特性修改转换及优化查询语句

存储过程转换迁移

按Greenplum语法规则及特性修改转换及优化Teradata及用户自定义函数,存储过程等

资源负载管理迁移

根据Teradata资源负载管理确定Greenplum用户及资源组或者资源队列

安全及权限管理迁移

迁移用户及组等角色的访问权限及数据库对象权限

BI工具接口迁移

建立Greenplum到BI前端应用连接

主要迁移任务

接下来,我们将详细介绍主要的迁移工作。

02

Teradata数据卸载及DDL导出规范

首先,我们需要了解Teradata的数据卸载及DDL导出规范。

(1)数据卸载规范

(2)DDL导出规范

下面详细介绍如何进行 DDL 转换。

1. Create table

将Teradata表定义转换为Greenplum表定义,有以下考虑要点:

➢ 在Teradata数据库中大小写不敏感,而Greenplum数据库则大小写敏感。

例如,如下代码说明了Greenplum数据库对大小写是敏感的。

pivotal=# create table t1(id int,name varchar(32)) distributed by (id);CREATE TABLE
pivotal=# insert into t1 values (1,'ABC');INSERT 0 1
pivotal=# select * from t1 where name='ABC'; id | name----+------ 1 | ABC(1 row)
pivotal=# select * from t1 where name='abc'; id | name----+------(0 rows)

Teradata默认大小写不敏感,若要区分大小写,则应在查询语句中指定CASESPECIFIC关键字,强制不忽略大小写。

BTEQ -- Enter your SQL request or BTEQ command:create table test.t1 (id int,name varchar(32)) primary index ( id );
*** Table has been created. *** Total elapsed time was 1 second.

BTEQ -- Enter your SQL request or BTEQ command:insert into test.t1 values(1,'ABC');
*** Insert completed. One row added. *** Total elapsed time was 1 second.

BTEQ -- Enter your SQL request or BTEQ command:select * from test.t1 where name='ABC';
*** Query completed. One row found. 2 columns returned. *** Total elapsed time was 1 second.
id name----------- -------------------------------- 1 ABC
BTEQ -- Enter your SQL request or BTEQ command:select * from test.t1 where name='abc';
*** Query completed. One row found. 2 columns returned. *** Total elapsed time was 1 second.
id name----------- -------------------------------- 1 ABC
BTEQ -- Enter your SQL request or BTEQ command:select * from test.t1 where name='abc' (CASESPECIFIC) ;
*** Query completed. No rows found. *** Total elapsed time was 1 second.

➢ 数据类型及约束条件。

➢ 在Greenplum数据库,主键(PK)可以考虑作为分布键。

➢ 非标准化的Teradata SQL命令,即Teradata特有的SQL命令。

在DDL转换中,应根据上述考虑要点进行转换。下表根据Teradata与Greenplum建表(CREATE TABLE)语句的语法详细说明如何转换。

Teradata

Greenplum

CREATE TABLE

dw连接access_dw连接access数据库_dw iis access网页

;

CREATE TABLE

;

;

定义

说明

定义

说明

SET/MULTISET

定义记录是否可重复

无,转换时直接删除

Create Table Options

表选项

定义表的物理属性

Fallback

Journaling

Freespace

无,转换时直接删除

Column Definitions字段定义

定义表的各个字段,可以通过format函数定义数据格式

Column Definitions

(字段定义)

根据数据类型对照表替换,Greenplum不支持通过to_char/to_date函数定义数据格式,Greenplum默认日期格式为YYYY-MM-DD,即如果字段默认格式为YYYY-MM-DD,那么转换时直接删除即可

Table-level Constraints

表级约束

定义约束

Primary key

Unique

CHECK条件

Foreign key

Table-level Constraints

(表级约束)

Greenplum支持定义主键,但是不推荐;不支持CHECK条件及创建外键

Index Definitions索引定义

定义表索引

Index Definitions

(索引定义)

Greenplum支持,但是和Teradata类似,需要根据业务要求再次评估是否创建索引

PI Definitions索引定义

主索引

dw iis access网页_dw连接access数据库_dw连接access

DK Definitions

(分布键定义)

根据Teradata主索引直接修改为分布键即可

partition Definitions分区

表分区

partition Definitions

(分区)

Teradata与Greenplum分区表语法不同,根据Greenplum的语法转换

建表语句详细对比

2. 数据类型转换对照

Teradata与Greenplum中数据类型的转换对照如下表所示。

Teradata字符类型

Greenplum字符类型

Char(n)

character (n),char(n)

Varchar(n)

character varying(n),varchar(n)

Long Varchar

text

SmallInt

smallint,int2

Integer

integer,int,int4

Dec(m,n)

real,float4

Float

float8,float

Date

date

Time

time

Timestamp

time with time zone

3. 物理模型转换规则

针对上述转换规则,对于每一个CREATE TABLE 语句,执行如下转换逻辑:

(1)全局替换规则

s/(CREATE[\s]+MULTISET[\s]+TABLE[\s]+[\w]+\.[\w]+).*$/$1/imgs/ MULTISET / /g;s/,NO FALLBACK ,//g;s/NO BEFORE JOURNAL,//g;s/NO AFTER JOURNAL,//g;s/FREESPACE = 30, //g;s/DATABLOCKSIZE = 10000 BYTES,//g;s/CHECKSUM = DEFAULT//g;s/CHARACTER SET LATIN NOT CASESPECIFIC/ /g;s/FORMAT 'YYYY-MM-DD'/ /g;s/PRIMARY INDEX /DISTRIBUTED BY /g;s/( COMPRESS \([\d\D]+?\))/ /g;s/( COMPRESS '[\d\D]+?')/ /g;s/( COMPRESS [\d\.]+ )//g;s/TITLE _UNICODE '[\d\w]+'XC//g;s/NO RANGE OR UNKNOWN//g;s/ CASESPECIFIC/ /g;

(2)获取TITLE 语句信息,转换生成COMMENTON 语句

COMMENT语法如下:

COMMENT ON TABLE schemaname.tablename.columnname IScolumn specification’;

其中:

(3)转换PARTITION BY 语句语法

dw iis access网页_dw连接access数据库_dw连接access

Greenplum PARTITION BY语法如下:

PARTITION BY partition_type (column)  ( partition_spec ) 

(4)转换CREATE INDEX索引语句

下图给出了一个例子。

dw连接access数据库_dw iis access网页_dw连接access

4.根据已存在表的结构创建空表

在Teradata中,使用CREATE TABLE AS语法,可以基于已经存在的表创建新表。如果只创建表定义,不复制数据,则使用WITH NO DATA选项。而在Greenplum中,该功能是通过LIKE关键字实现的,转换模式如下

CREATE TABLE schemaname.new_tablename AS schemaname.old_tablename WITH [NO] DATA

转换为:

CREATE TABLE schemaname.new_tablename (LIKE schemaname.old_tablename)

注意:该转换需要手动搜索脚本进行手工转换。

5. Drop table

Teradata与Greenplum删除表的语法一致,但是如果声明在删除表前先判断表是否存在时,那么Teradata与Greenplum语法有区别,转换过程如下图所示。

dw连接access数据库_dw连接access_dw iis access网页

注意:该转换需要手动搜索脚本进行转换。

6.临时表转换

临时表作为一种辅助工具,能够提高SQL操作的性能。特别是针对下列情况的 SQL操作,临时表能发挥非常重要的作用:

➢ 不能使用规范化的表。

➢ 要求多条 SQL 语句完成。

➢ 临时表对于频繁产生的中间结果或作为后续工作基础的中间结果也非常有用。

因此,在各类数据库中,都支持创建临时表功能,Teradata支持全局临时表(Global Temporay Table)、可变临时表(Volatile Temporay Table)两种类型,而Greenplum只支持可变临时表(temp/TEMPORARY)。语法转换规则如下:

➢ 直接将VOLATILE替换为temp/TEMPORARY,或者将GLOBAL TEMPORARY替换为temp/TEMPORARY。

➢ 在Greenplum中不支持维护交易日志LOG或者不维护交易日志NO LOG关键字,直接删除即可。在Greenplum 6.0中支持unlogged table,用户可以根据业务场景灵活进行选择。

➢ 控制事务提交后是否保留记录,可使用ON COMMIT PRESERVE ROWS/ON COMMIT DELETE ROWS,这在Greenplum中同样适用。

➢ 其他的DDL定义修改可参考永久物理表转换规则。

➢ 如果临时表无delete及update操作,那么建议进行压缩,压缩语句在分布键前进行声明,语法如下:

CREATE TEMP TABLE schemaname.temp_tablename(like schemaname.tablename|select …… from schemaname.tablename)WITH (APPENDONLY=TRUE,ORIENTATION=ROW,COMPRESSTYPE=ZLIB,COMPRESSLEVEL=5)DISTRIBUTED BY RANDOMLY;

注意:临时表在ETL脚本自动转换工具中可进行80%的自动转换,再针对无法自动转换的语句进行手动转换。

下图给出了一个临时表转换的示例。

dw连接access数据库_dw iis access网页_dw连接access

临时表转换示例

下篇我们将接着向大家介绍如何从Teradata迁移到Greenplum。

(未完待续)

Greenplum近期社区活动

6月13日 14:00-15:00

听个推资深大数据研发专家 栗子 为你讲述《个推如何采用Greenplum提高PB级别数据处理能力》

dw连接access数据库_dw iis access网页_dw连接access

6月19日 16:00-17:00

听Greenplum原厂研发郭峰讲解《Greenplum内核揭秘之查询优化》

dw连接access数据库_dw连接access_dw iis access网页

dw连接access_dw连接access数据库_dw iis access网页

我知道你

在看

dw连接access_dw iis access网页_dw连接access数据库