文档库 最新最全的文档下载
当前位置:文档库 › SQL(Teradata版)

SQL(Teradata版)

SQL(Teradata版)
SQL(Teradata版)

CREATE TABLE语句创建新表,定义新表的列、索引和其他属性。新表创建后,表结构定义存放在Teradata的数据字典中。CREATE TABLE语句的语法如下:

CREATE TABLE

;

Teradata DDL允许在创建表时指定表的物理属性,包括:

是否允许重复记录:

SET 不允许记录重复(默认)

CREATE SET TABLE table1

MULTISET 允许记录重复(建议:Teradata中都用 MultiSet)

CREATE MULTISET TABLE table1

数据保护:

数据保护要结合FALLBACK和JOURNAL (流水或日志)。

FALLBACK是Teradata的一种数据保护机制,数据表的每一条记录都同时存放两份。FALLBACK 使用FALLBACK保护机制

NO FALLBACK 不使用FALLBACK保护机制

日志有BEFORE和AFTER两种,分别保存了一条记录变化前后的状态。当系统出错时,可以利用日志进行恢复。

1.1.2 字段定义

Teradata的表可定义多达256个字段,每个字段的定义包括如下五项:

字段名,在同一数据库中必须唯一。

字段数据类型。例:

CREATE TABLE emp_data

(employee_number INTEGER NOT NULL

,last_name CHAR(20) NOT NULL WITH DEFAULT

,street_address VARCHAR (30) TITLE ‘Address’

,city CHAR (15) DEFAULT‘Boise’

,state CHAR (2) WITH DEFAULT

,birthdate DATE FORMAT’mm/dd/yyyy’

,salary_amount DEC(10,2)

,sex CHAR (1) UPPERCASE

);

CREATE TABLE employee_badge

(emp_id INTEGER NOT NULL

CONSTRAINT primary_1 PRIMARY KEY

,id_badge_number INTEGER

CONSTRAINT unique_1 UNIQUE

,salary INTEGER

CONSTRAINT check_1 CHECK (salary>0)

,job_code INTEGER

CONSTRAINT ref_1 REFERENCES job (job_code)

);

最后一项定义了在EMPLOYEE_BADGE表中的JOB_CODE必须和JOB表中的JOB_CODE对应,即前一个表中该字段的值必须在第二个表中有对应的项。这实际上是一种所谓的参照完整性。另外要注意的是,具有主键(Primary Key)约束的字段一定要定义为非空(NOT NULL)。

而字段级约束只能引用当前字段。我们来看一个表级约束的例子。

CREATE TABLE employee_badge

(emp_id INTEGER NOT NULL

,id_badge_num INTEGER NOT NULL

,salary INTEGER

,job_code INTEGER

,CONSTRAINT primary_1 PRIMARY KEY (emp_id)

,CONSTRAINT unique_1 UNIQUE (id_badge_num)

,CONSTRAINT check_1 CHECK (salary > 0 AND

job_code BETWEEN 100000 AND 499999)

,CONSTRAINT ref_1 FOREIGN KEY (job_code)

REFERENCES job (job_code));

比较字段级约束和表级约束的例子,可以看到:字段级约束必须写在每个字段定义的后面,而表级约束是在字段定义结束后再进行的。在表级约束中,一个约束可以同时定义多个字段。

Teradata就按照下面的规则缺省来建立主索引,因为没有主索引的话,Teradata就无法进行数据的分配。

没有在CREATE TABLE时指定PI:

IF 定义了PK,THEN PK = UPI

ELSE IF 存在定义为UNIQUE的字段,

THEN 第一个NIQUE的字段为UPI

ELSE 表中定义的第一个字段作为NUPI

CREATE TABLE时指定了PI:

IF 定义了PK,THEN PK作为USI AND为每一个定义为UNIQUE的字段建立一个USI

下面是一个比较复杂的创建表的例子,注意学习。创建该表后用SHOW TABLE观察一下内部的表达方式。

CREATE MULTISET TABLE emp_data

,FALLBACK

,NO BEFORE JOURNAL

,NO AFTER JOURNAL

,FREESPACE = 30

,DATABLOCKSIZE=10000 BYTES (

employee_number INTEGER NOT NULL

,department_number SMALLINT

CONSTRAINT dep_check

CHECK (department_number BETWEEN 100 AND 999)

REFERENCES Department (department_number)

,job_code INTEGER COMPRESS

,last_name CHAR(20) NOT NULL

,first_name VARCHAR (20)

,street_address VARCHAR (30) TITLE 'Address'

,city CHAR (15) DEFAULT 'Boise'

COMPRESS 'Boise'

,state CHAR (2) WITH DEFAULT

,birthdate DATE FORMAT 'mm/dd/yyyy'

,salary_amount DECIMAL (10,2)

,sex CHAR (1) UPPERCASE

,CONSTRAINT emp_key

PRIMARY KEY (employee_number)

) INDEX (department_number);

1.2 删除表

可以使用DROP TABLE语句删除表,该语句将删除表中的所有数据和在数据字典中的表结构定义。例:删除前面例子中创建的雇员数据表。DROP TABLE emp_data; 删除了表emp_data 中的所有数据,并删除了emp_data在数据字典中的定义。如果希望再使用这个表,必须重新创建。例:DELETE FROM emp_data;或DELETE emp_data;删除了表emp_data中的所有数据。表定义仍然存在,可以增加数据。

1.3 修改表

当一个表已经创建后,可以使用ALTER TABLE语句来修改其定义。表定义的一些属性是不可修改的(如PI),如果要改变这些属性,常用方法是建立一个满足新属性的新表,然后使用Insert-Select语句把数据从原来的表转移到新表,然后再修改新表的名称。

ALTER TABLE完整的语法可参见Teradata SQL手册,这里通过几个例子来加以说明。

例:增加或删除字段

ALTER TABLE emp_data

ADD educ_level CHAR(1), ADD insure_type SMALLINT;

ALTER TABLE emp_data

DROP educ_level, DROP insure_type;

例:修改已有字段的属性

ALTER TABLE emp_data

ADD birthdate FORMAT 'mmmBdd,Byyyy'';

例:对没有FALLBACK的表建立FALLBACK保护

ALTER TABLE emp_data, FALLBACK;

例:同时修改表的多个属性

ALTER TABLE emp_data

, NO FALLBACK

DROP insure_type

, ADD educ_level CHAR(1);

例:修改约束定义

增加约束

ALTER TABLE emp_data

ADD CONSTRAINT

CHECK (sex = 'F' OR sex = 'M');

修改约束:

ALTER TABLE emp_data

MODIFY CONSTRAINT sal_range

CHECK ( salary_amount > 0 AND s注意:表中已有数据如果不符合新的约束条件,约束的增加或修改不能成功。

删除约束:

ALTER TABLE emp_data

DROP CONSTRAINT sal_range;

alary_amount < 1000000);

1.4 次索引

前面已经讨论过索引,并且说明,创建表时就应定义主索引,同时也可以定义次索引。事实上,次索引也可以使用单独的CREATE INDEX语句来定义。换言之,主索引只能在CREATE TABLE时定义,而次索引既可以在创建表时定义,也可以使用CREATE INDEX来定义。

例:为雇员表创建下面两个次索引。为雇员名字建立命名的唯一次索引USI

CREATE UNIQUE INDEX fullname (last_name, first_name) ON emp_data;

为工作代码建立非唯一性次索引NUSI,不命名NUSI

CREATE INDEX (job_code) ON emp_data;

从这个例子可以看到,次索引可以命名,如第一个USI的名字为FULLNAME;也可以不命名,如第二个NUSI就没有取名。

定义好索引或次索引后,可以利用HELP INDEX <表名>来显示指定表的所有索引定义,如果索引是未命名的,索引名称显示为NULL。

当次索引创建后,也可以利用DROP INDEX来删除它们。注意,只有次索引可以被删除,主索引是不能被删除的。

当删除命名索引时,可以只指定索引名称,也可以指定索引定义。而删除未命名索引时,必须指定索引定义。

例:删除雇员表的所有次索引

删除命名索引

DROP INDEX FullName ON emp_data;

删除未命名索引

DROP INDEX (job_code) ON emp_data;

第二章数据操作语言(Data Manipulation Language)

2.1 INSERT

INSERT语句用于向表中添加一行或多行记录。插入一行记录的命令格式为:

INSERT INTO <表名> (列名1,列名2,...,列名n)

VALUES (列值表达式1,列值表达式2, ...,列值表达式n);

例:在雇员表中添加一新雇员信息:

INSERT INTO employee (last_name, first_name, hire_date, birthdate,

salary_amount, employee_number)

VALUES( arcia', aria',861027,541110,76500.00,1291);

如果添加整条记录,即给每个字段都有相应的值,则表名后的字段名可以省略。如上面的例子可以改写成:

INSERT INTO employee

VALUES (1210,NULL,401,41201, mith', ames',890303,460421,41000);

Teradata对INSERT作了扩充,增加了一个称为INSERT-SELECT的功能。它以子查询的方式将一个表的数据抽取并插入到另一个表中。

举例来说,假设表emp_copy与表emp的结构相同,下面的语句可以把表emp的所有行添加到表emp_copy中,即复制表emp。

INSERT INTO emp_copy

SELECT * FROM emp;

INSERT-SELECT也可以将不同结构表的记录添加到目标表中。例我们创建一张雇员生日表:

CREATE TABLE birthdays

(empno INTEGER NOT NULL

, lname CHAR(20) NOT NULL

, fname VARCHAR(30)

, birth DATE)

UNIQUE PRIMARY INDEX(empno);

然后,我们从雇员表中提取生日信息添加到生日表中。

INSERT INTO birthdays

SELECT employee_number ,last_name, first_name, birthdate

FROM employee;

2.2 UPDATE

UPDATE语句用来更新表内满足条件的数据记录,基本语法为:

UPDATE <表名>

SET <列名1>=<列值表达式1>

,<列名2> = <列值表达式2>

, ...

,<列名n>=<列值表达式n>

WHERE <条件子句>;

如果UPDATE语句中没有WHERE子句,则更新表中的所有记录。下面的例句是将编号为1010的雇员的部门编号修改为403,工作编号修改为432101,经理的雇员编号修改为1005。UPDATE employee

SET department_number = 403

,job_code = 432101

,manager_employee_number = 1005

WHERE employee_number = 1010;

Teradata SQL允许在WHERE子句中使用子查询和联接,因此同样的工作可以通过子查询或联接来实现。考虑如下的情况,我们要给支援部门的人员加薪10%,如果使用子查询的方式,可以写成:

UPDATEemployee

SET salary_amount = salary_amount * 1.10

WHERE department_number IN

(SELECT department_number

FROM department

WHERE department_name LIKE '%Support%');

如果使用联接的方式,可以写成:

UPDATE employee

SET salary_amount = salary_amount * 1.10

WHERE employee.department_number =

department.department_number

AND department_name LIKE '%Support%';

2.3 DELETE

DELETE删除表中满足条件的记录,基本语法为:

DELETE FROM <表名>

WHERE <条件子句>;

如果DELETE语句中没有WHERE语句,则删除表中的所有行。例:删除雇员表中编号为301的员工:

DELETE FROM employee WHERE department_number = 301;

删除雇员表的所有数据,可使用:

DELETE FROM employee;

与UPDATE语句相似,DELETE语句也支持子查询和联接操作。假设在雇员表中,删除所在部

门名称为'None'的所有雇员信息,使用子查询的语句为:

DELETE FROM employee

WHERE department_number IN

(SELECT department_number

FROM department

WHERE department_name = 'None');

使用连接的语句为:

DELETE FROM employee

WHERE employee.department_number = department.dempartment_number

AND department.department_name = 'None';

第三章逻辑与条件表达式

3.1 逻辑表达式运算符

逻辑表达式由运算符和操作数两部分组成,其结果是一个布尔值(True/False)。这种表达式可以用在WHERE子句的条件表达式中。标准的逻辑表达式运算符种类如表5-1所示:

3.2.1 [NOT] BETWEEN...AND

BETWEEN AND 表示某列数值(数字型或字符型)介于a和b之间,且包括a和b。

举例来说,在雇员表中把所有工作代码以43开头的员工的姓名及其经理的员工代码找出来。可以使用下面的SQL语句,其中第二个查询就使用了BETWEEN ...AND操作符。

SELECT first_name

,last_name

,manager_employee_number

FROM employee

WHERE job_code >= 430000 AND

job_code <= 439999;

SELECT first_name

,last_name

,manager_employee_number

FROM employee

WHERE job_code BETWEEN 430000 AND 439999;

需要注意的是,当操作数是字符时,ANSI标准是区分大小写的,而Teradata中缺省不区分大

小写,但可以通过CASESPECIFIC/NOT CASESPECIFIC来明确定义是否区分。如:

SELECT ...

WHERE last_name (CASESPECIFIC);

SELECT ...

WHERE last_name (NOT CASESPECIFIC);

查询姓以字母R开头的员工,可以使用下面的SQL语句:

SELECT last_name FROM employee

WHERE last_name BETWEEN 'r' AND 's';

由于Teradata的缺省方式不区分大小写,因此,Ryan、Roger等都将作为结果返回。如果显示区分大小写,上面的表达式中必须使用大写字母R和S。

3.2.2 集合操作符[NOT] IN

[NOT] IN表示某列数值属于或不属于某个集合。对于显示列举的数据集合,IN和OR可以相互替代使用。例如:在员工表中查找部门代码在401和403之间的员工姓名和相应的部门代码,可以使用下面两个SQL语句,它们的作用是等同的。显然,当要列举的数据值很多时,用OR就不如用IN方便和简洁。

SELECT first_name

,last_name

,department_number

FROM employee

WHERE department_number = 401

OR department_number = 403;

SELECT first_name

,last_name

,department_number

FROM employee

WHERE department_number IN (401, 403);

反过来,如果查找部门代码不属于401和403的员工姓名和部门代码,则可以使用下面的SQL 语句,它们也是等价的。

SELECT first_name

,last_name

,department_number

FROM employee

WHERE NOT (department_number = 401

OR department_number = 403);

SELECT first_name

,last_name

,department_number

FROM employee

WHERE department_number NOT IN (401, 403);

3.2.3 匹配符LIKE

LIKE用来进行字符串数据的模式匹配。用作匹配的字符串中可以包含下面的通配符。%:表示除了NULL外的零个或多个字符组成的字符串。

_:表示任何单个字符位置。

在使用LIKE进行字符串匹配时,要特别注意字符的大小写。ANSI标准中是区分大小写的,如果不要区分大小写,可以使用UPPER函数将其转换成大写字母来进行匹配。Teradata缺省不区分大小写,如果要区分,可以使用其扩展参数CASESPECIFIC。

例如:查询员工姓中有’Ra’字符的员工,可以根据是否区分大小写而分别使用

下面的SQL语句:

不区分大小写

1.在Teradata缺省模式下

SELECT first_name

,last_name

FROM employee

WHERE last_name LIKE '%Ra%';

2.在ANSI缺省模式下

SELECT first_name

,last_name

FROM employee

WHERE UPPER (last_name) LIKE UPPER ('%Ra%');

区分大小写

1.在Teradata缺省模式下

SELECT first_name

,last_name

FROM employee

WHERE last_name (CASESPECIFIC) LIKE '%Ra%';

2.在ANSI缺省模式下

SELECT first_name

,last_name

FROM employee

WHERE last_name LIKE '%Ra%';

LIKE中限定词的使用

SELECT first_name

,last_name

FROM employee

WHERE last_name LIKE ALL ('%E%', '%S%');

如果改变一下上面的问题,要求查找员工姓中任意位置有字母’E’或者’S’的员工,则应使用ANY或SOME。

SELECT first_name

,last_name

FROM employee

WHERE last_name LIKE ANY ('%E%', '%S%');

通配符作为一般字符使用前面谈到,在LIKE结构的字符串中,'%'和'_'可以作为通配符使用,但是如果需要匹配这些字符本身(比如查找95%),即把它们作为一般字符时使用,该如何区分呢?

我们可以通过定义ESCAPE字符来达到这个目的,紧跟在ESCAPE字符后的’%’和’_’作为一般字

LIKE ''%A%%AAA__'' ESCAPE ''A''

在这个表达式中,将字母A定义为ESCAPE字符,其中:

第一个%为通配符;

第一个A和其后的%联合表示字符%;

第三个%为通配符;

第二个A和其后的A联合表示字符A;

第四个A和其后的’_’联合表示字符_;

最后一个’_’为通配符。

例如,下面的SQL语句可用来查找Teradata RDBMS数据字典中对象名称中第二个字符为’_’的所有对象。

SELECT tvmname

FROM https://www.wendangku.net/doc/951119586.html,m

WHERE tvmname LIKE ''_Z_%'' ESCAPE ''Z';

3.3 NULL的使用

NULL是SQL的一个关键字,在数据库的操作中有很重要的作用,下面是一些关于NULL的说明:

NULL显示没有数据的字段

NULL表示不存在或未发现的值

NULL既不是数字类型也不是字符类型

具有NULL值的字段可以被压缩,不占任何空间

NULL也可以参与运算,其运算规则为:

NULL在算术运算中产生的结果为NULL(空)

NULL在比较运算中产生的结果为False

UNKNOWN DATA, MISSING DATA和NULL是同样的含义

当进行升序排列时,NULL在数字列排列在负数前,在字符列排列在空格前。

SELECT employee_number

FROM employee_phone

WHERE extension IS NULL;

反过来,找出有分机号码的员工,则可以使用:

SELECT employee_number

FROM employee_phone

WHERE extension IS NOT NULL;

3.4 条件表达式

3.4.1 AND

AND连接两个或两个以上条件表达式。如果所有条件同时为真,则表达式结果为真;否则表达式结果为假。

例:查找收入小于35000并且部门号为403的员工姓名,可以使用下面的SQL语句:SELECT first_name

,last_name

,employee_number

FROM employee

WHERE salary_amount < 35000.00

AND department_number = 403;

3.4.2 OR

OR连接两个或两个以上条件表达式。如果任何一个条件为真,则表达式结果为真;如果所有条件均为假,则表达式结果为假。

例:查找收入小于35000或部门号为403的员工姓名。

SELECT first_name

,last_name

,employee_number

FROM employee

WHERE salary_amount < 35000.00

OR department_number = 403;

3.4.3 多个AND . . . OR

例:查找部门号是403或401,并且工作号为412101或432101的员工姓、部门号和工作号。SELECT last_name

,department_number

,job_code

FROM employee

WHERE (department_number = 401

OR department_number = 403)

AND ( job_code = 412101

OR job_code = 432101);

3.4.5 NOT

NOT既可以否定操作符,也可以否定条件表达式。

例;查找部门号不是301的员工姓名及其代码。

否定操作符:

SELECT first_name

,last_name

,employee_number

FROM employee

WHERE department_number NOT = 301;

否定条件:

SELECT first_name

,last_name

,employee_number

FROM employee

WHERE NOT (department_number = 301);

第四章数据转换和计算

4.1 数据类型

4.1.1 字符型数据

在ANSI标准中关于字符型数据定义了两类:CHAR和VARCHAR。其中CHAR表示固定长度的字符串,VARCHAR表示可变长度的字符串。

Teradata除了上述两类基本字符型数据外,还扩展了LONG VARCHAR类型,它等同于VARCHAR(64000),是最长的字符串。

二进制数据类型是Teradata的扩展,ANSI标准没有此类型。Teradata支持两类二进制数据BYTE和VARBYTE。其中BYTE表示固定长度的二进制串,VARCHAR表示可变长度的二进制串。

在ANSI标准中关于数字型数据定义了四类:SMALLINT、INTEGER、FLOAT、DECIMAL。Teradata除以上四类外,还有两类扩展的数字型数据,即BYTEINT和DATE。

1. BYTEINT表示不包括零的有符号整数,占一个字节存储空间。

2. DATE用来表示日期,但内部以整数形式存储,其公式为:

(year - 1900) * 10000 + (month * 100) + day

Teradata定义的DATE和ANSI定义的DATE在内部表示上是不兼容的。ANSI的日期格式是YYYY-MM-DD,在Teradata中也推荐使用这种格式来进行表达,这样可以避免由于使用两位数字表示年而带来的2000年问题。

4.2 算术运算符

Teradata提供以下ANSI标准规定的算术运算符:

* 乘 / 除 + 加 - 减 + 正号 - 负号

除此以外,Teradata还扩展了下面两个算术运算符:

** (求幂) MOD(取模)

**表示方法:**,

例: 4**3 = 4 * 4 * 4 = 64.

MOD是取模运算符,表示除运算的余数。

例: 60 MOD 7 = 4 即:60除以7等于8,余数是4。

下面将Teradata的算术运算符总结如表6-6所示:

在ANSI标准中没有算术函数,Teradata作了扩充,它支持的算术函数如表6-7所示。

例: SQRT(16) = 4

4.4 运用算术运算符计算

例:查询部门代码为401的员工的姓名和月平均工资,并按姓名的字母顺序排序。SELECT last_name

,first_name

,salary_amount/ 12

FROM employee

WHERE department_number = 401

ORDER BY last_name;

4.5 系统变量

在Teradata中,有几个系统变量DATE、TIME、USER和DATABASE,分别表示当前的系统日期、系统时间、当前登录的用户和当前缺省的数据库,它们的使用可参考下面的例子。SELECT DATE;

Date

--------

99/04/15

SELECT TIME;

Time

--------

09:15:37

SELECT USER;

User

-----

SQL01

SELECT DATABASE;

Database

----------------

CUSTOMER_SERVICE

4.6 字符常量、数字常量和计算模式

字符文字常用于更加清晰的标识查询结果的意义。同样,在ANSI方式下区分大小写,而在Teradat缺省模式下不区分大小写。

例:查找员工表中的员工姓名,并在查询结果前加注'Employee'标识,可使用下面的SQL语句。

SELECT 'Employee'

,last_name

,first_name

FROM employee;

结果

Employee last_name first_name

Employee Stein John

Employee Kanieski Carol

Employee Ryan Loretta

数字型常量最多可以包含15个数字,数字前面的零是无意义的。

例:在查询的员工姓名前加注12345数字型常量标识。

SELECT 12345

,last_name

,first_name

FROM employee;

结果

12345 last_name first_name

12345 Stein John

12345 Kanieski Carol

12345 Ryan Loretta

计算模式是指在SQL的SELECT语句中直接进行数学计算,如下面各例所示:

SELECT 2*2593;

结果

(2 * 2593)

5186

例:识别location表中末尾是四个零的邮政编码。

SELECT customer_number

,zip_code

FROM location

WHERE zip_code MOD 10000 = 0;

4.7 对日期的处理

4.7.1 日期计算

在Teradata数据库中将DATE型数据作为整数看待,但不容许无效的日期。计算公式如下:((YEAR - 1900) * 10000) + (MONTH * 100) + DAY

例:1997年3月31日的表达方式

YEAR = (1997 - 1900) * 10000 = 97 * 10000 = 970000

MONTH = (3 * 100) = 300

DAY = 31

DATE = 970331

2002年3月31日的表达方式:

YEAR = (2002 - 1900) * 10000 = 102 * 10000 = 1020000

MONTH = (3 * 100) = 300

DAY = 31

DATE = 1020331

Teradata中与日期有关的数据函数分别介绍如下:

1. EXTRACT

ANSI标准中EXTRACT函数允许选取日期和时间中任意字段或任意间隔的值,Teradata中EXTRACT函数支持日期数据中选取年、月、日,从时间数据中选取小时、分钟和秒。

ADD_MONTHS表示从某日期增加或减少指定月份的日期。它考虑了大小月问题,所以计算日期

下面的例子可以说明这个问题。

SELECT DATE, ADD_MONTHS (DATE,2)

,DATE + 60;

Date ADD_MONTHS(Date, 2) (Date+60)

96/11/15 1997-01-15 97/01/14

我们看到,在当前日期后使用ADD_MONTHS来推算2个月后是哪一天,结果很准确。而(DATE + 60)只能表示60天后的日期,用这种方式来推算几个月后的日期很容易产生不正确的结果。

3. DATE在SELECT语句中的使用

例:查询在公司工作至少十年以上的员工姓名。

SELECT last_name

FROM employee

WHERE (DATE-hire_date) / 365>= 10

ORDER BY last_name;

4.7.3 利用CAST作数据转换

ANSI标准中利用CAST函数将一种数据类型转换成另一种数据类型。例:

SELECT CAST (salary_amount AS INTEGER)

FROM employee;

Value Result

50500.75 50500

SELECT CAST (salary_amount AS DEC (6,0))

FROM employee;

Value Result

50500.75 50501.

SELECT CAST (last_name AS CHAR (5))

FROM employee

WHERE department_number = 401;

last_name

Johns

Trade

Teradata也可以使用CAST函数来完成上面的操作,另外,它也作了扩充。举例来说,为了完成上面相同的操作,也可以使用下面的表达方式:

SELECT salary_amount (INTEGER);

SELECT salary_amount (DEC(6,0));

SELECT last_name (CHAR(5));

Teradata对CAST函数本身也作了扩展,比如为了将显示结果以大写表示,可以使用下面的SQL 语句

SELECT CAST (last_name AS CHAR (5) UPPERCASE)

FROM employee

WHERE department_number = 401;

last_name

JOHNS

TRADE

第五章子查询

5.1 基本子查询

假设需要查询所有部门经理的姓,一种方法是先手工查询部门表中所有经理的员工代码,记住这些数据,再通过下述查询获得经理的姓。

SELECT last_name

FROM employee

WHERE employee_number IN (1017,1005,1003);

这里假设各部门经理的代码分别是1017、1005、1003。如果有几千条记录,这种方式肯定不行。所以引出了子查询的概念。子查询是利用另一条SQL语句中的

SELECT语句来获得中间结果,如下所示:

SELECT last_name

FROM employee

WHERE employee_number IN

(SELECT manager_employee_number

FROM department );

再看一个例子,查出预算超过$900,000的部门经理。

SELECT last_name

FROM employee

WHERE employee_number IN

(SELECT manager_employee_number

FROM department

WHERE budget_amount>900000 );

如果进一步问:查找收入低于$35000并且预算超过$900,000的部门经理。

SELECT last_name

,first_name

FROM employee

WHERE salary_amount<35000

AND employee_number IN

(SELECT manager_employee_number

FROM department

WHERE budget_amount > 900000 ) ;

5.2 复杂子查询

SELECT last_name

,first_name

,department_number

FROM employee

WHERE department_number = ANY

(SELECT department_number

FROM department

WHERE department_name LIKE '%Support%');

例:查询被分配管理同一部门的部门级经理。

SELECT employee_number

,last_name

,first_name

FROM employee

WHERE (department_number, employee_number) IN

(SELECT department_number

,manager_employee_number

FROM department);

5.3 EXISTS在子查询中的使用

EXISTS可以使用在子查询中,用来表示查询至少返回一行。如果前面加上否定词NOT,则表示查询时无记录存在。EXISTS可以代替IN,而NOT EXISTS可以代替NOT IN。

例:查询哪个部门没有员工?

SELECT department_number

FROM department

WHERE department_number NOT IN

(SELECT department_number FROM employee);

SELECT 'YES'

WHERE EXISTS

(SELECT department_number FROM department

WHERE department_number NOT IN

(SELECT department_number

FROM employee));

第二个SQL返回的结果如下:

'YES'

YES

例:查询在600部门是否有员工?

SELECT TRUE

WHERE EXISTS

(SELECT * FROM employee

WHERE department_number = 600);

*** Query completed. No rows found.

5.4 关于子查询的一些基本规则

下面总结一下使用子查询时的一些基本规则。

子查询必须用括号括起来

子查询可以是IN或NOT IN子句的操作目标

也可以是EXISTS或NOT EXISTS子句的操作目标

支持限定词ALL, ANY, SOME

支持LIKE或NOT LIKE

子查询中可以指定匹配多个字段

子查询结果均为唯一值,即自动去除重复记录,相当于自动加上

DISTINCT关键词

ORDER BY不能用于子查询内

子查询中最多可以指定64个表或视图

第六章属性和函数

6.1 表达式属性

列和表达式的属性可以定义标题和格式,表达式属性主要包括AS (NAMED)、TITLE和FORMAT,表6-1总结了它们的主要功能。

面的例子很容易地掌握。

例:

SELECT last_name

,first_name

,salary_amount / 12 AS monthly_salary

FROM employee

WHERE department_number = 401

ORDER BY monthly_salary;

返回结果如下:

last_name first_name monthly_salary

Johnson Darlene 3025.00

Trader James 3154.17

使用TITLE关键字时注意下面的几点基本规则:

格式化列标题最多可以堆成三行

使用符号//表示标题的分行

标题中可以包含空格

例:

SELECT last_name

,first_name

,salary_amount / 12 (TITLE 'MONTHLY // SALARY')

FROM employee

WHERE department_number = 401

ORDER BY 3;

返回结果如下:

MONTHLY

last_name first_name SALARY

Johnson Darlene 3025.00

Trader James 3154.17

该例子中格式化部分的另一种写法是:

SELECT ...

,CAST (salary_amount/12 AS TITLE ''MONTHLY//SALARY'')

FROM ...

6.2 CHARACTERS函数

CHARACTERS函数也是Teradata的扩展,用于计算VARCHAR型数据字段的实际字符串长度。CHARACTERS函数可以简写成CHARACTER、CHARS或者CHAR。

例:查询所有名字中包含5个以上字符的员工。

SELECT first_name

FROM employee

WHERE CHARACTERS (first_name) > 5;

6.3 TRIM函数

ANSI标准的TRIM函数用于去除字符数据中前头或后端的空格或者二进制数据

(BYTE与VARBYTE)中前头或后端的零。它的基本语法如表6-2所示。

模式下,TRIM ()只能去除后端的空格或二进制零。

例:查询姓是由四个字符组成的员工有哪些?

SELECT first_name

,last_name (TITLE 'last')

FROM employee

WHERE CHAR (TRIM (TRAILING FROM last_name)) = 4 ;

first_name last

Loretta Ryan

James Daly

6.4 FORMAT短语

FORMAT用于数据在输出时的格式化处理,但它并不影响数据的内部存储格

式。它主要有如下面例子所示的两种表示方式。

例:

SELECT salary_amount (FORMAT ''$$$,$$9.99'');

例:

SELECT CAST (salary_amount AS FORMAT ''$$$,$$9.99'');

注意,在第二个例子中CAST的使用方法是Teradata的扩展,因为这里CAST处

理的是一个数据的属性,而在ANSI标准中,CAST只能用于处理一种数据类型。

我们再看几个例子来进一步了解FORMAT短语的使用方法。

例:

SELECT salary_amount

(FORMAT '$$$,$$9.99')

FROM employee

WHERE employee_number = 1004;

salary_amount

$36,300.00

对该例子的另一种写法是:

SELECT CAST (salary_amount AS FORMAT ''$$$,$$9.99'') FROM ...

例:管理人员打算将1004号员工的工资增加$1000元,他想了解工资提高的百分率。SELECT (1000/salary_amount) * 100

(FORMAT 'ZZ9%')

(TITLE 'Increase Percentage')

FROM employee

WHERE employee_number = 1004;

Increase Percentage

3%

对该例子的另一种写法是:

SELECT CAST (1000/salary_amount) * 100 AS FORMAT 'ZZ9%'

TITLE 'Increase Percentage'') FROM ...

FORMAT短语中可以使用的格式化字符主要为:

$ 美元标识符

9 数字位

Z 将数字中的前缀零去除

, 在指定位置插入逗号

. 指定小数点位置

- 在指定位置插入连字号

/ 在指定位置插入斜线

% 在指定位置插入百分号

X 字符数据,每个X代表一个字符

G 图形数据.一个G代表一个逻辑字符(双字节)

B 在指定位置插入空格

根据上面的定义,看看下面各格式化输出的结果是什么。

FORMAT '999999' Data: 08777 Result ?

FORMAT 'ZZZZZ9' Data: 08777 Result ?

FORMAT '999-9999' Data: 6495252 Result ?

FORMAT 'X(3)' Data: 'Smith' Result ?

FORMAT '$$9.99' Data: 85.65 Result ?

FORMAT '999.99' Data: 85.65 Result ?

FORMAT (3)' Data: 85.65 Result ?

6.5 对日期的格式化处理

在Teradata中,日期数据的缺省输出格式是:YY/MM/DD,这和ANSI标准是一样的。而ANSI 标准建议的日期显示格式是:YYYY-MM-DD。

其它一些常用的日期显示格式列举如下,其中的B表示空格。

YYYY/MM/DD'

YYYY-MM-DD'

七天搞定SAS系列

七天搞定SAS系列 七天搞定SAS系列学习笔记。参考书籍:The Little SAS Book 七天搞定SAS(一):数据的导入、数据结构 标题有些噱头,不过这里的重点是: speak SAS in 7 days。也就是说,知识是现成的,我这里只是要学会如何讲这门语言,而不是如何边学SAS边学模型。顺便发现我最近喜欢写连载了,自从西藏回来后..... 之所以下定决定学SAS,是因为周围的人都在用SAS。为了和同事的沟通更有效率,还是多学一门语言吧。R再灵活,毕竟还是只有少数人能直接读懂。理论上语言是不应该成为障碍的~就像外语一样,多学一点总是好的,至少出门不发怵是不是? 最后一根稻草则是施老师传给我的一个link: https://www.wendangku.net/doc/951119586.html,/articles/bi/3-career-secrets-for-data-scientist s-1101712/,据说有数据分析师的职业秘笈...我就忍不住去看了看。其中一句话还是蛮有启发的: 如果有人问你要学什么工具,是SAS,R,EXCEL,SQL,SPSS还是?直接回答:所有。 这个答案一方面霸气,一方面也是,何必被工具束缚呢? 这东西宜突击不宜拖延,所以还是集中搞定吧。七天应该是个不错的时间段。 大致分配如下: 1. 熟悉SAS的数据结构,如基本的向量,数据集,数组;熟悉基本的数据类型,如文本,数字。 2. 熟悉基本的数据输入与输出。 3. 熟悉基本的逻辑语句:循环,判断 4. 熟悉基本的数据操作:筛选行列,筛选或计算变量,合并数据集,计算基本统计量,转置 5. 熟悉基本的文本操作函数 6. 熟悉基本的计量模型函数 7. 熟悉基本的macro编写,局部变量与全局变量 其实这大概也是按照我常用的R里面完成的任务来罗列的。基本计划是完成就可以大致了解SAS的语法了,其他的高级功能现用现学吧。 书籍方面,中文的抢了同事的一本《SAS编程与数据挖掘商业案例》,英文的找了一本「Applied Econometrics Using The SAS System」和「The Little SAS Book」,先这么看着吧。 后知后觉的补充:其实这一系列笔记都是先写再发布的,主要是方便我调整顺序什么的。事实证明绝大多数时间我在看(或者更直接的,抄)「The Little SAS Book」这本书,姚老

OGG(oracle+GoldenGate)学习笔记

Oracle GoldenGate测试文档 1.Oracle GoldenGate介绍 (1) 2.Oracle GoldenGate For Oracle(windows 平台) 安装 (5) 3.数据库复制实施文档(DML) (7) 3.1准备工作 (7) 3.2配置GoldenGate (8) 3.2.1配置SourceDB的GoldenGate (8) 3.2.2 配置TargetDB的GoldenGate (9) 3.3 测试DML操作 (11) 4.GoldenGate Support DDL安装 (15) 5.玩玩GoldenGate (23) 1.Oracle GoldenGate介绍 GoldenGate TDM(交易数据管理)软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。GoldenGate TDM 软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下: 如上图所示,GoldenGate TDM的数据复制过程如下: 利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate TDM自定

义的中间格式存放在队列文件中。再利用传送进程将队列文件通过TCP/IP传送到目标系统。捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点,记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制; 目标系统接受数据变化并缓存到GoldenGate TDM队列当中,队列为一系列临时存储数据变化的文件,等待投递进程读取数据; GoldenGate TDM投递进程从队列中读取数据变化并创建对应的SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。 由此可见,GoldenGate TDM是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。GoldenGate TDM将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达9:1的压缩率对数据进行压缩,可以大大降低带宽需求。在目标端,GoldenGate TDM可以通过交易重组,分批加载等技术手段大大加快数据投递的速度和效率,降低目标系统的资源占用,可以在亚秒级实现大量数据的复制,并且目标端数据库是活动的 GoldenGate TDM提供了灵活的应用方案,基于其先进、灵活的技术架构可以根据用户需求组成各种拓扑结构,如图所示:

传统的数据库的优劣势v1.0

1.传统数据库的优劣势 数据库技术产生于20世纪60年代末期,是计算机领域中最重要的技术之一,是一种比较理想的管理技术。数据库(Data Base)可以看作是与现实世界有一定相似的模型,是认识世界的基础,是集中、统一存储和管理某个领域信息的系统,它根据数据间的自然联系而构成,数据较少冗余,且具有较高的数据独立性,能为多种应用服务。而传统的数据库是指关系型数据库,如MySQL、Oracle、SqlServer等。 1.传统数据库的优势 ●灵活性和建库的简单性:从软件开发的前景来看,用户与关系数据库编 程之间的接口是灵活与友好的。目前在多数RDDMS产品中使用标准查询 语言SQL,允许用户几乎毫无差别地从一个产品到另一个产品存取信息。 与关系数据库接口的应用软件具有相似的程序访问机制,提供大量标准 的数据存取方法。 ●结构简单:从数据建模的前景看,关系数据库具有相当简单的结构(元 组),可为用户或程序提供多个复杂的视图。数据库设计和规范化过程也 简单易行和易于理解。由于关系数据库的强有力的、多方面的功能,已 经有效地支持许多数据库纳应用。 ●易于维护:丰富的完整性(实体完整性、参照完整性和用户定义的完整性) 大大减低了数据冗余和数据不一致的概率。 2.传统数据库的劣势 ●数据类型表达能力差:从下一代应用软件的发展角度来看,关系数据 库的根本缺陷在于缺乏直接构造与这些应用有关的信息的类型表达能 力,缺乏这种能力将产生以下有害的影响,例如:大多数RDBMS产品 所采用的简单类型在重构复杂数据的过程中将会出现性能问题;数据 库设计过程中的额外复杂性;RDBMS产品和编程语言在数据类型方面 的不协调。 大多数现代的RDBMS产品已成熟地用于商务和财政方面,而这些领域不要求很高和很复杂的数据模型。虽然这些产品多多少少克服了 一些以上所述的缺点,但从理论上看关系数据模型不直接支持复杂的

Teradata数据库配置说明

1.Teradata Client安装说明 1、安装程序地址:ftp://10.3.7.141/ 2、点击Setup.exe,开始运行安装程序 3、出现如下安装启动画面: 4、选择Custom安装方式(请不要选择Typical)

5、选择安装组件 请依次选择以下程序: 6、点击Next直至完成

2.Teradata数据库配置说明 1)测试数据库说明 2)配置ODBC 1、打开odbc数据源管理器、选择系统dsn页点击【添加】按钮

2、选择T eradata驱动程序,点击【Finish】按钮 3、填DB Source、T eradata Info、Uername、Password等选项点击【ok】按钮完成。

说明: ●Data Source:odbc的名称 ●Teradata Server Info Name(s):Teradata数据库的IP地址 ●Username:用户名 ●Password:密码 ●Default Database:默认数据库 3)配置HOST文件 1、打开系统目录-system32-Drivers-etc(如XP系统: C:\Windows\system32\drivers\etc)下的hosts文件 2、填写T eradata数据库的CLI接口地址:如 127.0.0.1 localhost 10.3.7.9 cpcimtcop1 说明: 第一部分为Teradata的ip地址,后面为任意名字和cop1、cop2的组合

3.Teradata客户端配置 1) Teradata Administrator配置 选择菜单T ools/Options 修改General选项,选中用SQL Assistant代替查询窗口选项。

1019大数据笔记记录

一、大数据,云计算,AI概述 1、背景及来源 大数据的背景:20世纪开始,政府和各行业(如医疗、通信、交通、金融等)信息化的发展,积累了海量数据。而且目前数据增长速度越来越快。 如何实现对海量数据的存储、查询、分析,使之产生商业价值,是目前面临的主要挑战。 2、大数据的定义 目前没有统一的大数据的定义。 Gartner:“大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 麦肯锡:大数据指的是大小超出常规的数据库工具获取、存储、管理和分析能力的数据集。但它同时强调,并不是说一定要超过特定TB 值的数据集才能算是大数据。 维基百科:大数据是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合. 总结成一句话、大数据实际上不是一项单一的技术,而是一个概念,一套技术,一个生态圈。 3、大数据的4大特征 第一个特征:数据量大(Volume). 第二个特征:数据类型繁多(Variety) 第三个特征:价值密度低(Value) 第四个特征是速度快、时效高(Velocity) 。 4、大数据生态圈 框架:Hadoop、Spark 集群管理:MapReduce、Yarn、Mesos 开发语言:Java、Python、Scala、Pig、Hive、SparkSQL。 数据库:NoSQL、HBase、Cassandra、Impala。 文件系统:HDFS、Ceph。 搜索系统:Elastic Search 采集系统:Flume、Sqoop、Kafka 流式处理:Spark Streaming、Storm 发行版:HortonWorks、Cloudera、MapR 集群管理:Ambari、大数据管理平台 机器学习:Spark MLLib、Mahout

Teradata分析

1、 T eradata 优势 ,能否打数据并发 1)优势 以下是部分Teradata 客户数据仓库管理的内容,可说明Teradata 系统的强大处理能力: ? 多达千亿行数据的数据库表格 ? 每天数据加载超过30亿条记录 ? 每天捕获3000万笔客户交易 ? 每天为消费者在线提供150万种个性化产品和服务 ? 每小时处理100万次数据库查询 ? 每天响应1万个并发数据仓库用户 ? 业务查询响应时间仅为40-50毫秒 2)并发问题: 机制 :Teradata 巨表数据存放机制好像是每个节点均匀分布表中一部分数据,当查询的时候每个节点并行查询,结果汇总到某个节点反馈给查询者。这个复杂查询的实例形象地说明了Teradata 的多维并行处理机制。 M ulti-S tep 并 行 并 行 作1. 搜 索 LineItem 2. 搜 索 O rders 3. 联 接 Lineitem & O rders 并 行P R O C 同 时 与 各 自 相 关 据 图8-16 T eradata 内部并行处理机制说明 这里假设系统配置有4个虚拟处理器(VPROC),某个复杂查询被优化器分解成了7个步骤,

图中SUPPLIERS、PARTS、PARTSUPP等为数据库中表的名字。在每个步骤执行时,4个VPROC 同时处理与各自相关的数据块,例如搜索SUPPLIERS表,该表的记录是通过HASH算法均匀分布在四个VPROC各自负责的磁盘中的,搜索时4个VPROC将同时进行,把相关的记录搜索出来,这就是所谓的查询并行。 例子: 例如:使用NCR 5300服务器,2个节点,存储为2TB,RAID1,在业务高峰期,系统并发查询用户在300个以上,最高到1000个,此时系统响应速度有些缓慢大概业务查询响应时间30秒,峰值过后速度就加快了。主要进行的操作就是表之间的关联查询,4张表,每张6-7千万条记录,ETL加载的数据量不算太大。 2、T eradata内外部集建立原则 针对实际的应用,采用内外部集市可以有效的发挥起各自的优势: 1)松耦合原则 介于要将整个系统划分为数据和应用层,相互存在很多密切关联,在设计库表时要充分考虑数据和应用的相互影响,做到应用不影响到数据的处理,数据处理不直接针对应用的松耦合技术架构 2)任务明确原则 数据处理层和应用层在处理具体业务时,必然存在既可以在数据层处理有可以在应用层处理的问题,需要在设计时充分讨论业务需求,做到责任明确,任务单一,各负其责。 3、teradata比较oracle的优缺点 Teradata是专为数据仓库OLAP设计的,主要用来进行数据的综合分析和处理, Oracle更多的适合联机事务处理的OLTP应用,针对DW 数据仓库从以下几个角度对teradata进行分析: 1、数据管理能力(Data Management) 数据自动分配 Teradata中只有一种基于HASH算法的数据分配机制,当要插入一条记录时,根据主索引计算出相应的AMP,该条记录即通过此AMP存到其对应的磁盘上。由于主索引值的不同,一个表的各条记录将通过各AMP均匀地分布到各个磁盘上。分配过程完全自动进行,不需要DBA干预,这一点和其它OLTP DBMS有很大的区别。Teradata的HASHING算法经过长期的发展,已经十分完善。它采用了一个类似矩阵的HASH MAP,将计算出来的HASH值通过此矩阵

大数据时代读书笔记

大数据时代——读书笔记 一、引论 1.大数据时代的三个转变: 1.可以分析更多的数据,处理和某个现象相关的所有数据,而不是随机采样 2.不热衷于精确度 3.不热衷与寻找因果关系 2.习惯:用来决策的信息必须是少量而精确的。实际:数据量变大,数据处理速度变快, 数据不在精确 3.危险:不是隐私的泄露而是未来行动的预判 二、大数据时代的思维变革 1.原因:没有意识到处理大规模数据的能力,假设信息匮乏,发展一些使用少量信息的技 术(随机采样) 1.1086年末日审判书英国对人的记载 2.约翰·格朗特:统计学,采样分析精确性随着采样随机性上升而大幅上升,与样本数 量关系不大 3.1890年,穿孔卡片制表机,人口普查 4.随机采样有固有的缺陷 1.采样过程中存在偏差 2.采样不适合考察子类别 3.只能得出实现设计好的问题的结果 4.忽视了细节考察 2.全数据模式:样本=总体 1.通过异常量判断信用卡诈骗 2.大数据分析:不用随机抽样,而是采用所有数据。不是绝对意义而是相对意义。 (Xroom信用卡诈骗,日本相扑比赛) 3.多样性的价值(社区外联系很多》社区内联系很多) 3. 混杂性而非精确性 1. 葡萄树温度测量:数据变多,虽然可能有错误数据,但总体而言会更加精确。 2. 包容错误有更大好处 3. word语法检查:语料库》算法发展 4. google翻译:让计算机自己估算对应关系,寻找成千上万对译 结论:大数据的简单算法好过小数据的复杂算法 5. 大数据让我们不执著于也无法执着于精确 6. MIT的通货紧缩软件:即时的大数据 7. 标签:不精确 8. 想要获得大规模数据的好处,混乱是一种标准途经 9. 新的数据库:大部分数据是非结构化的,无法被利用 10. Hadoop:与mapreduce系统相对的开源式分布系统,输出结果不精确,但是非常快 结论:相比于依赖小数据和精确性的时代,大数据因为更强调数据的完整性和混杂性,帮助我们进一步接近事情的真相。“部分”和”确切“的吸引力是可以理解的。但是当我们的视野局限在我们可以分析和确定的数据上时,我们对世界的整体影响就会产生偏差和错误。不仅失去了尽力收集一切数据和活力,也失去了从不同角度观察时间的权利。三、不是因果是相关

oracle GoldenGate学习笔记

Oracle GoldenGate测试文档1.Oracle GoldenGate介绍 GoldenGate TDM(交易数据管理)软件是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增删改变化,再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。GoldenGate TDM 软件可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,其复制过程简图如下: 如上图所示,GoldenGate TDM的数据复制过程如下: 利用捕捉进程(Capture Process)在源系统端读取Online Redo Log或Archive Log,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为GoldenGate TDM自定义的中间格式存放在队列文件中。再利用传送进程将队列文件通过TCP/IP传送到目标系统。捕捉进程在每次读完log中的数据变化并在数据传送到目标系统后,会写检查点,记录当前完成捕捉的log位置,检查点的存在可以使捕捉进程在中止并恢复后可从检查点位置继续复制; 目标系统接受数据变化并缓存到GoldenGate TDM队列当中,队列为一系列临时存储数据变化的文件,等待投递进程读取数据; GoldenGate TDM投递进程从队列中读取数据变化并创建对应的SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。 由此可见,GoldenGate TDM是一种基于软件的数据复制方式,它从数据库的日志解析数据的变化(数据量只有日志的四分之一左右)。GoldenGate TDM将数据变化转化为自己的格式,直接通过TCP/IP网络传输,无需依赖于数据库自身的传递方式,而且可以通过高达9:1的压缩率对数据进行压缩,可以大大降低带宽需求。在目标端,GoldenGate TDM可以通

TeraData数据库学习笔记

处理节点(node)、用于节点间通信的内部高速互联(InterConnection)和数据存储介质(一般是磁盘阵列)。每个节点都是SMP结构的单机,节点的物理和逻辑结构如图1所示单个节点就是一个就是一个smp 处理单元,一台多CPU或多核的计算机。硬件包括CPU、内存、用于安装操作系统和应用软件的本地磁盘,与外界交互的网卡及bynet端口;节点网卡一种是与IBM MainFrame链接的Channel Adapter,另一种是局域网网卡,通常一个节点只有一种网卡,但有很多块网卡,分别用于不同的连接(比如:备份等)和冗余。 多个节点一起构成MPP系统,多个节点之间的内部高速互联时通过BYNET的硬件实现 Shared Nothing Architecture The Teradata Database virtual processors, or vprocs (which are the PEs and AMPs), share the components of the nodes (memory and cpu). The main component of the "shared-nothing" architecture is that each AMP manages its own dedicated portion of the system's disk space (called the vdisk) and this space is not shared with other AMPs. Each AMP uses system resources independently of the other AMPs so they can all work in parallel for high system performance overall. Modul-2 一个关系数据库是存储在关系数据库管理系统里的相关联的表的集合。“管理系统”这个词,指的是一个关系数据库需要软件来提供象事物处理完整性、安全性和日志的功能。Teradata是一个关系数据库管理系统。 关系数据库不用访问路径去查找数据,数据通过数据值来连接。数据连接由一个列与另外一个表中的

数据仓库厂商比较

一、数据仓库厂商简介 1、IBM IBM,即国际商业机器公司,1911 年创立于美国,是全球最大的信息技术和业务解决方案公司,目前拥有全球雇员31 万多人,业务遍及160 多个国家和地区。2004 年,IBM 公司的全球营业收入达到九百六十五亿美元. 在过去的九十多年里,世界经济不断发展,现代科学日新月异,IBM 始终以超前的技术、出色的管理和独树一帜的产品领导着全球信息工业的发展,保证了世界范围内几乎所有行业用户对信息处理的全方位需求。众所周知,早在1969 年,阿波罗宇宙飞船载着三名宇航员,肩负着人类的使命,首次登上了月球;1981 年哥伦比亚号航天飞机又成功地飞上了太空。这两次历史性的太空飞行都凝聚着IBM 无与伦比的智慧。 IBM 与中国的业务关系源远流长。早在1934 年,IBM 公司就为北京协和医院安装了第一台商用处理机。1979 年,在中断联系近30 年之后,IBM 伴随着中国的改革开放再次来到中国。同年在沈阳鼓风机厂安装了中华人民共和国成立后的第一台IBM 中型计算机。 随着中国改革开放的不断深入,IBM 在华业务日益扩大。80 年代中后期,IBM 先后在北京、上海设立了办事处。1992 年IBM 在北京正式宣布成立国际商业机器中国有限公司,这是IBM 在中国的独资企业。此举使IBM 在实施其在华战略中迈出了实质性的一步,掀开了在华业务的新篇章。随后的1993 年,IBM 中国有限公司又在广州和上海建立了分公司。到目前为止,IBM 在中国的办事机构进一步扩展至哈尔滨、沈阳、深圳、南京、杭州、成都、西安、武汉、福州、重庆、长沙、昆明和乌鲁木齐等16 个城市,从而进一步扩大了在华业务覆盖面。伴随着IBM 在中国的发展,IBM 中国员工队伍不断壮大,目前已超过5000 人。除此之外,IBM 还成立了8 家合资和独资公司,分别负责制造、软件开发、服务和租赁的业务。 IBM 非常注重对技术研发的投入。1995 年,IBM 在中国成立了中国研究中心,是IBM 全球八大研究中心之一,现有150 多位中国的计算机专家。随后在1999 年又率先在中国成立了软件开发中心,现有近2000 位中国软件工程师专攻整合中间件,数据库,Linux 等领域的产品开发。 二十多年来,IBM 的各类信息系统已成为中国金融、电信、冶金、石化、交通、商品流通、政府和教育等许多重要业务领域中最可靠的信息技术手段。IBM 的客户遍及中国经济的各条战线。 与此同时,IBM 在多个重要领域占据着领先的市场份额,包括:服务器、存储、服务、软件和笔记本电脑等。 取诸社会,回馈社会,造福人类,是IBM 一贯奉行的原则。IBM 积极支持中国的教育事业并在社区活动中有出色的表现。 IBM 与中国高校合作关系的开始可追溯到1984 年,当年IBM 为中国高校作了一系列计算机设备硬件和软件的捐赠。1995 年 3 月,以IBM 与中国国家教委(现教育部)签署合作谅解备忘录为标志,“IBM 中国高校合作项目”正式启动,这一长期全面合作关系的基本宗旨是致力于加强中国高校在信息科学技术领域的学科建设和人才培养。10 年来,IBM 中国高校合作项目不断向着更高的水平、更深的层次和更广的领域发展,对中国高校信息技术相关专业的学科建设和人才培养起到了积极的推动作用。 自1995 年以来,IBM 已向中国高校捐赠了价值人民币10.1 亿元的计算机设备、软件及服务。此外,通过与教育部在基础教育领域的合作,IBM 向中国教育机构捐赠的设备总价值达人民币3177 万元。迄今为止,IBM 对中国教育机构的捐赠已高达人民币10.4 亿元。 在高校合作项目方面,目前IBM 已与50 多所中国知名高校建立了合作关系。30 万人次学生参加了IBM 技术相关课程的学习和培训,3.7 万人次学生获得IBM 全球专业技术认证证书,3000 人次教师参加了IBM 组织的不同形式的师资培训。 除了在高等教育领域与中国教育界进行合作之外,IBM 还将合作范围积极拓展到基础教育领域。继2001 年IBM KidSmart“小小探索者”儿童早期智力开发工程引入中国以来,IBM 已经连续4 年在中国开展了这一项目。目前IBM 已与遍及全国各省、市、自治区共38 个城市的近400 所幼教机构进行合作,

冰与火之歌 读书之《权利的游戏》读后感1000字

冰与火之歌读书之《权利的游戏》读后感 1000字 导读:读书笔记冰与火之歌读书之《权利的游戏》读后感1000字,仅供参考,如果觉得很不错,欢迎点评和分享。 冰与火之歌——读书心得之《权利的游戏》读后感1000字: 把今天的随想说完了,那我就来写读书笔记。 这一篇文章是讲《权利的游戏》为什么会在全球这么火,而且为什么会被誉为神作? 文章是从社交网络模型为出发点和切入点,即是以探索书中和电视剧中所展示的社会关系来写的。作者认为,权利的游戏之所以好看,即使在第七季夜王突变投枪手,最强谋略家小指头沦为北境第一大混子,囧雪和姑姑突然被爱情撞了腰还擦了火花等等,但是却还是会让人觉要看下去。原因在于什么? 作者认为是,他讲了一个好故事。这个好故事的原则的有三:让”主角“意想不到的死亡;让“配角”连珠成线的加让“阵营”有理有据的反转。 先说第一个,我记得我看第一季的时候我以为北狼家族的艾德·史塔克会是主角但是随着剧情的发展,怎么感觉“主角”要被抹脖子了?在最后一集之前我还以为放心吧,肯定会活下去的,在刑场上肯定会有人来救的,但是没有想到,到最后一集还是哎呦我去,把

艾德给抹脖子了。我怀着震惊和不甘开始了第二季,发现大儿子罗伯领兵起义开起“五王之战”,哦!原来他才是主角,但是到第三季,他、他媳妇、他老娘都!没!了!然后就是各种主角被杀,我发现主角死的几率比配角的还大,以后拍电视剧的都不敢当主角了。 但是,这只是一种直观的感受,作者提出几个问题,第一,这个主角是真的主角吗?第二,在大部分故事中主角都是有主角光环的,因为主角是所有线索的一条线,一旦主角死了,故事就没有连载的继续了。那为什么冰火可以让主角不断地去死呢?我再想如果当年的工藤新一在娱乐场被一棒子敲死的话,柯南也就不会连载十几年了吧。 作者为此做了一个统计,把存在已经出版了的五本英文原版里面的人物利用社会关系模型做了一个统计,最后得到的结果是琼恩和提利昂的关系的密度最大,读后感.所以在看电视的时候有这样的一种感觉,作者做完统计之后更加深了判断。虽然狼爸,狼少主,鹿国王等人的排名都很靠前,但是和他们相似的还有很多,所以他们就可以安心的领盒饭了。但是为什么,他们虽然不是真正的主角他们死的时候我们还是感到惊讶? 这和作者马丁的写作方式有关,冰火采用的是每个章节都以一个角色的视角来叙述,而狼爸在第一部中出场时间战了大多数,因此确实容易被认为是真主角。 虽然,不是真的主角,他占得戏份也多,为什么说砍就砍呢?这就涉及到第二个原则,让“配角”连珠成线的加戏。简单来说,作者建立一个庞大复杂的人物线,少一个人根本不影响叙事虽然去掉这些

九大数据仓库方案特点比较

九大数据仓库方案特点比较 九大数据仓库方案特点 IBM、Oracle、Sybase、CA、NCR、Informix、Microsoft、和SAS等有实力的公司相继(通过收购或研发的途径)推出了自己的数据仓库解决方案,BO和Brio等专业软件公司也在前端在线分析处理工具市场上占有一席之地。 下面针对这些数据仓库解决方案的性能和特点做分析和比较。IBM IBM公司提供了一套基于可视数据仓库的商业智能(BI)解决方案,包括:Visual Warehouse(VW)、Essbase/DB2 OLAP Server 5.0、IBM DB2 UDB,以及来自第三方的前端数据展现工具(如BO)和数据挖掘工具(如SAS)。其中,VW是一个功能很强的集成环境,既可用于数据仓库建模和元数据管理,又可用于数据抽取、转换、装载和调度。Essbase/DB2 OLAP Server支持“维”的定义和数据装载。 Essbase/DB2 OLAP Server不是ROLAP(Relational OLAP)服务器,而是一个(ROLAP和MOLAP)混合的HOLAP服务器,在Essbase完成数据装载后,数据存放在系统指定的DB2 UDB数据库中。严格说来,IBM自己并没有提供完整的数据仓库解决方案,该公司采取的是合作伙伴战略。例如,它的前端数据展现工具可以是Business Objects的BO、Lotus的Approach、Cognos的Impromptu或IBM的Query Management Facility;多维分析工具支持Arbor Software的Essbase和IBM(与Arbor 联合开发)的DB2 OLAP服务器;统计分析工具采用SAS系统。Oracle Oracle数据仓库解决方案主要包括Oracle Express和Oracle Discoverer两个部分。 Oracle Express由四个工具组成:Oracle Express Server是一个MOLAP (多维OLAP)服务器,它利用多维模型,存储和管理多维数据库或多维高速缓存,同时也能够访问多种关系数据库;Oracle Express Web Agent通过CGI或Web插件支持基于Web的动态多维数据展现;Oracle Express Objects前端数据分析工具(目前仅支持Windows平台)提供了图形化建模和假设分析功能,支持可视化开发和事件驱动编程技术,提供了兼容Visual Basic语法的语言,支持OCX和OLE;Oracle Express Analyzer是通用的、面向最终用户的报告和分析工具(目前仅支持Windows平台)。Oracle Discoverer即席查询工具是专门为最终用户设计的,分为最终用户版和管理员版。在Oracle数据仓库解决方案实施过程中,通常把汇总数据存储在Express多维数据库中,而将详细数据存储在Oracle 关系数据库中,当需要详细数据时,Express Server通过构造SQL语句访问关系数据库。但目前的Express还不够灵活,数据仓库设计的一个变化往往导致数据库的重构。另外,目前的Oracle 8i和Express 之间集成度还不够高,Oracle 8i和Express之间需要复制元数据,如果Oracle Discoverer (或BO)需要访问汇总数据,则需要将汇总数据同时存放在Oracle和Express中,系统维护比较困难。值得注意的是,刚刚问世的Oracle 9i把OLAP和数据挖掘作为重要特点。 Sybase Sybase提供的数据仓库解决方案称为Warehouse Studio,包括数据仓库的建模、数据抽取与转换、数据存储与管理、元数据管理以及可视化数据分析等工具。其中,Warehouse Architect 是PowerDesigner中的一个设计模块,它支持星形模型、雪花模型和ER模型;数据抽取与转换工具包括PowerStage、Replication Server、Carleton PASSPORT,PowerStage是Sybase提供的可视化数据迁移工具。Adaptive Server Enterprise是Sybase企业级关系数据库,Adaptive Server IQ是Sybase公司专为数据仓库设计的关系数据库,它为高性能决策支持系统和数据仓库的建立作了优化处理,Sybase IQ支持各种流行的前端展现工具(如Cognos Impromptu、Business Objects、Brio Query 等);数据分析与展现工具包括PowerDimensions、EnglishWizard、InfoMaker、PowerDynamo等,PowerDimensions是图形化的OLAP分析工具,它支持SMP和多维缓存技术,能够集成异构的关系型数据仓库和分布式数据集市,从而形成单一的、新型的多维模式;数据仓库的维护与管理工具包括Warehouse Control Center、Sybase Central、Distribution Director,其中Warehouse Control Center 是为数据仓库开发人员提供的元数据管理工具。Sybase提供了完整的数据仓库解决方案

人工神经网络学习总结笔记

人工神经网络学习总结笔记 主要侧重点: 1.概念清晰 2.进行必要的查询时能从书本上找到答案 第一章:绪论 1.1人工神经网络的概述 “认识脑”和“仿脑”:人工智能科学家在了解人脑的工作机理和思维的本质的基础上,探索具有人类智慧的人工智能系统,以模拟延伸和扩展脑功能。我认为这是人工神经网络研究的前身。 形象思维:不易被模拟 人脑思维抽象推理 逻辑思维:过程:信息概念最终结果 特点:按串行模式 人脑与计算机信息处理能力的不同点: 方面类型人脑计算机 记忆与联想能力可存储大量信息,对信息有 筛选、回忆、巩固的联想记 忆能力无回忆与联想能力,只可存取信息 学习与认知能力具备该能力无该能力 信息加工能力具有信息加工能力可认识 事物的本质与规律仅限于二值逻辑,有形式逻辑能力,缺乏辩证逻辑能力 信息综合能力可以对知识进行归纳类比 和概括,是一种对信息进行 逻辑加工和非逻辑加工相 结合的过程 缺乏该能力 信息处理速度数值处理等只需串行算法就能解决的应用问题方便,计算 机比人脑快,但计算机在处理文字图像、声音等类信息的 能力远不如人脑 1.1.2人脑与计算机信息处理机制的比较 人脑与计算机处理能力的差异最根本的原因就是信息处理机制的不同,主要有四个方面 方面类型人脑计算机 系统结构有数百亿神经元组成的神经 网络由二值逻辑门电路构成的按串行方式工作的逻辑机器 信号形式模拟量(特点:具有模糊性。离散的二进制数和二值逻辑容易被机器模拟的思维方式

难以被机器模拟)和脉冲两种 形式 形式 信息储存人脑中的信息分布存储于整个系统,所存储的信息是联想式 的 有限集中的串行处理机制信息处理机制高度并行的非线性信息处理系统 (体现在结构上、信息存储上、信 息处理的运行过程中) 1.1.3 人工神经网络的概念:在对人脑神经网络的基本认识的基础上,用数理方法从信息处理的角度对人脑神经网络进行抽象,并建立某种简化模型,称之为人工神经网络,是对人脑的简化、抽象以及模拟,是一种旨在模仿人脑结构及其功能的信息处理系统。 其他定义:由非常多个非常简单的处理单元彼此按某种方式相互连接而形成的计算系统,外部输入信息之后,系统产生动态响应从而处理信息。 它是由许多简单的并行工作的处理单元组成的系统,其功能会因网络结构、连接强度以及各单元的处理方式的不同而不同 1.3神经网络的基本特点与功能 基本特点:1、结构特点:信息处理的并行性、信息存储的分布性、信息处理单元的互联性、结构的可塑性。神经网络内在的并行性与分布性表现在其信息的存储于处理都是空间上分布、时间上并行的。 2、性能特点:高度的非线性、良好的容错性和计算的非精确性。 3、能力特征:自学习、自组织(重构)与自适应性。 神经网络的基本功能:1、联想记忆:自联想记忆与异联想记忆 2、非线性映射 3、分类与识别 4、优化计算 5、知识处理 第二章人工神经网络建模基础 2.1~2.2 讲述了生物神经系统以及生物神经网络的建模基础 神经元所产生的信息是具有电脉冲形式的神经冲动,脉冲的宽度和幅度相同,但是间隔是随机变化的。 人脑中,外界的刺激不同可以改变神经元之间的突触关系,即突触厚膜电位的方向以及大小,从突触信息传递的角度来看,表现为放大倍数和极性的变化。 空间整合的概念(BP29)信息整合这一段中 阀值特性:我认为阀值特性即静息电位必须上升到一定数值范围即超过阀值电位之后,神经元才会产生兴奋,信息才能以脉冲的形式得到传递。 所谓的时间整合,如果由一个脉冲所引起的突触膜后电位很小,只有在持续时间内当另一脉冲到达的时候,总的突触膜后电位增大。 2.3 人工神经元模型 人工神经网络是在现代神经生物学研究基础上提出的模拟生物的过程,反映人脑某些特性的一种计算结构,是人脑神经系统的一种抽象、简化和模拟而不是对它的真实描写。神经网络的基本器件是神经元和突触。人工神经网络当中的神经元是处理单元,也称之为节点。人工神经元是对生物神经元的信息处理过程的抽象模拟,通过数学语言对其进行描述,对其结构和功能进行模拟,用模型图予以表达。 2.3.1 神经元的建模

大数据营销-丽莎(读书笔记简约版)

营销职能正在经历重大转型,数据驱动型营销。 创造力价值评估的要点在于转变。 数据毛球的不断变大,洞察力的价值被混乱所掩埋。企业高层需要转型。 第一部我们是怎么到这的 第一章走出传统营销的阴影 数据分析的投资?CEO是否会认可会意识到重要性,应对“数字”冲击(将公司与客户用新的方式联系) 趋势:客户对个人信息控制权的索取,基于相互信任和体验共享的基础上进行价值传递。数据驱动型营销工作:驱动客户参与为目标,在洞悉结构性和多元结构性公司数据(大数据)的基础上进行的搜集、分析和执行。 《teradata全球数据驱动型营销调查报告》 第二章为什么市场营销已经过时 1、企业内部障碍阻止了大数据。 2、营销人员面对的6大障碍: 战术营销(而不是战略营销) 需要转向战略,借助数据洞察力指导决策,这样更加能更加以客户为中心,会引发创新。传统的营销很多时候是战术的,往往也会被认为是摆设。即,需要将客户与公司的收益联系起来,证明营销部门的价值。 人工营销管理 琐碎的营销事宜占据了大部分时间(例如各种文字和图片)几乎没有时间去规划。总是和一些无关紧要的事情纠缠。公司没有对营销部门确定量化的指标。现在营销业务应该是管理监控组合资产包含财务人力跨业务和跨区域项目,营销内容和测量的知识产权。需要有效标准化管理这些高价值资产,增加营收,提高竞争优势。 孤立的数据与实时互动需求 零售渠道被消费者当作试用渠道而不是购买渠道,“销售展厅”,如何避免?个性化营销,每位顾客如何会选择店面,优惠措施等,愿意为优越体验付费,现在客户更有意愿分享消费体验,改善体验,整合数据,互动客户。 市场营销价值不清晰 用数据证明团队的价值。价值营收。数据、流程和文案均可以证明自身价值。 缺乏人才和培训 缺乏技能数据分析,计算分析,预测模型,统计学课程。 散乱与经常缺失的数据 分散孤立的数据形成杂乱的数据环境——数据毛球

JDBC学习笔记

JDBC基础 1.JDBC类结构 DriverManager:它是一个工厂类,用来生产Driver对象的这个类的结构设计模式为工厂方法。 Driver:这是驱动程序对象的接口,它指向一个实实在在的数据库驱动程序对象。 Connection:这个接口可以制向一个数据库连接对象。 Statement:用于执行静态的SQL语句的接口,通过Connection中的createStatement方法得到的。 PreparedStatement:表示预编译的 SQL 语句的对象。 Resultset:用于指向结果集对象的接口,结果集对象是通过Statement中的execute等方法得到的。 2.使用JDBC访问数据库的步骤 (1)得到数据库驱动程序 通常使用Class类的forName()静态方法来加载驱动。例如: Class.forName("org.gjt.mm.mysql.Driver");//加载MySQL的JDBC驱动程序 (2)创建数据库连接 使用:DriverManager.getConnection(String url, String user, String password)创建数据库连接对象,例如: String DBURL="jdbc:mysql://127.0.0.1:3306/java";//数据库连接地址 Connection con = DriverManager.getConnection(DBURL,"root","lizhiwei");//得到连接(3)执行SQL语句 ?通过Connection对象创建Statement对象。Connection创建Statement的方法有如下3个:createSatement():创建基本的Statement对象。 prepareStatement(String sql):根据传入的sql语句创建预编译的Statement对象。 prepareCall(String sql):根据传入的sql语句创建CallableStatement对象。 ?createSatement()的使用: Statement st = con.createStatement();// 得到用于执行静态SQL语句的对象 ResultSet rs = st.executeQuery("select * from Person");// 执行查询,得到结果集对象 while (rs.next()) { System.out.print(rs.getInt("pid")+"\t"); System.out.print(rs.getInt("id")+"\t"); System.out.println(rs.getString("name")); } ?prepareStatement(String sql)的使用: PreparedStatement ps=con.prepareStatement("select * from Person where pid>?"); ps.setInt(1, 3);//向第一个“?”设置值 ResultSet rs=ps.executeQuery();//执行查询,得到结果集对象 while (rs.next()) { System.out.print(rs.getInt("pid")+"\t"); System.out.print(rs.getInt("id")+"\t"); System.out.println(rs.getString("name")); } (4)得到结果集 使用Statement执行Sql语句。所有的Statement都有如下3个方法来执行sql语句:execute():可以执行任何sql语句,但比较麻烦。 executeUpdate():主要用于执行DML和DDL语句。执行DML语句返回受sql语句影响的行数。 executeQuery():只能执行查询语句,执行后返回代表查询结果的ResultSet对象 (5)对结果集做相应的处理(增,删,改,查) 操作结果集。如果执行的sql语句是查询语句,则执行结果将返回一个ResultSet对象,该对象里保存了sql语句查询的结果。程序可以通过操作该ResultSet对象来取出查询结果。ResultSet 对象主要提供了如下两类方法: next()、previous()、first()、last()、beforeFirst()、afterLast()、absolute()等移动记录指针的方法。 getXxx()方法获取记录指针指向行、特定列的值。该方法既可以使用列索引作为参数,也可以使用列名作为参数。 (6)关闭资源 释放资源的顺序是ResultSet, Statement,Connection;Connection在使用完成后,必须关闭,ResultSet, Statement无所谓,只要Connection关闭了,它们也会被自动关闭(但资源不是立即被释放)。Connection的使用原则是尽量晚创建,尽量早的释放。在关闭资源异常的情况下,应该将资