Teradata - Hướng dẫn nhanh
Teradata là gì?
Teradata là một trong những Hệ thống quản lý cơ sở dữ liệu quan hệ phổ biến. Nó chủ yếu phù hợp để xây dựng các ứng dụng kho dữ liệu quy mô lớn. Teradata đạt được điều này bằng khái niệm song song. Nó được phát triển bởi công ty có tên là Teradata.
Lịch sử của Teradata
Sau đây là tóm tắt nhanh về lịch sử của Teradata, liệt kê các mốc quan trọng.
1979 - Teradata đã được hợp nhất.
1984 - Phát hành máy tính cơ sở dữ liệu đầu tiên DBC / 1012.
1986- Tạp chí Fortune gọi Teradata là 'Sản phẩm của năm'.
1999 - Cơ sở dữ liệu lớn nhất trên thế giới sử dụng Teradata với 130 Terabyte.
2002 - Teradata V2R5 được phát hành với Chỉ mục chính phân vùng và nén.
2006 - Ra mắt giải pháp Quản lý dữ liệu tổng thể của Teradata.
2008 - Teradata 13.0 được phát hành với Kho dữ liệu đang hoạt động.
2011 - Có được Teradata Aster và tham gia Không gian phân tích nâng cao.
2012 - Teradata 14.0 được giới thiệu.
2014 - Teradata 15.0 được giới thiệu.
Đặc điểm của Teradata
Sau đây là một số tính năng của Teradata:
Unlimited Parallelism- Hệ thống cơ sở dữ liệu Teradata dựa trên Kiến trúc Xử lý Song song Khối lượng lớn (MPP). Kiến trúc MPP chia đều khối lượng công việc trên toàn bộ hệ thống. Hệ thống Teradata phân chia nhiệm vụ giữa các quy trình của nó và chạy chúng song song để đảm bảo rằng nhiệm vụ được hoàn thành nhanh chóng.
Shared Nothing Architecture- Kiến trúc của Teradata được gọi là Kiến trúc Không chia sẻ. Các nút Teradata, Bộ xử lý mô-đun truy cập (AMP) và các đĩa liên kết với AMP hoạt động độc lập. Chúng không được chia sẻ với những người khác.
Linear Scalability- Hệ thống Teradata có khả năng mở rộng cao. Chúng có thể mở rộng quy mô lên đến 2048 Nút. Ví dụ: bạn có thể tăng gấp đôi dung lượng của hệ thống bằng cách tăng gấp đôi số lượng AMP.
Connectivity - Teradata có thể kết nối với các hệ thống gắn với Kênh như Máy tính lớn hoặc Hệ thống gắn mạng.
Mature Optimizer- Trình tối ưu hóa Teradata là một trong những trình tối ưu hóa trưởng thành trên thị trường. Nó đã được thiết kế để song song ngay từ đầu. Nó đã được tinh chỉnh cho mỗi bản phát hành.
SQL- Teradata hỗ trợ SQL tiêu chuẩn công nghiệp để tương tác với dữ liệu được lưu trữ trong các bảng. Ngoài ra, nó còn cung cấp phần mở rộng của riêng mình.
Robust Utilities - Teradata cung cấp các tiện ích mạnh mẽ để nhập / xuất dữ liệu từ / đến hệ thống Teradata như FastLoad, MultiLoad, FastExport và TPT.
Automatic Distribution - Teradata tự động phân phối dữ liệu đồng đều vào các đĩa mà không cần can thiệp thủ công.
Teradata cung cấp Teradata express cho VMWARE, một máy ảo Teradata hoạt động đầy đủ. Nó cung cấp tới 1 terabyte dung lượng lưu trữ. Teradata cung cấp cả phiên bản VMware 40GB và 1TB.
Điều kiện tiên quyết
Vì máy ảo là 64 bit nên CPU của bạn phải hỗ trợ 64 bit.
Các bước cài đặt cho Windows
Step 1 - Tải xuống phiên bản VM cần thiết từ liên kết, https://downloads.teradata.com/download/database/teradata-express-for-vmware-player
Step 2 - Giải nén tệp và chỉ định thư mục đích.
Step 3 - Tải xuống trình phát VMWare Workstation từ liên kết, https://my.vmware.com/web/vmware/downloads. Nó có sẵn cho cả Windows và Linux. Tải xuống trình phát máy trạm VMWARE dành cho Windows.
Step 4 - Sau khi tải xuống hoàn tất, hãy cài đặt phần mềm.
Step 5 - Sau khi cài đặt xong, chạy VMWARE client.
Step 6- Chọn 'Mở máy ảo'. Điều hướng qua thư mục Teradata VMWare được giải nén và chọn tệp có phần mở rộng .vmdk.
Step 7- Teradata VMWare được thêm vào máy khách VMWare. Chọn Teradata VMware đã thêm và nhấp vào 'Chơi Máy ảo'.
Step 8 - Nếu bạn nhận được một cửa sổ bật lên về các bản cập nhật phần mềm, bạn có thể chọn 'Nhắc tôi sau'.
Step 9 - Nhập tên người dùng là root, nhấn tab và nhập mật khẩu làm root và một lần nữa nhấn Enter.
Step 10- Khi màn hình sau xuất hiện trên màn hình nền, hãy nhấp đúp vào 'trang chủ của root'. Sau đó nhấp đúp vào 'Thiết bị đầu cuối của bộ gen'. Thao tác này sẽ mở Shell.
Step 11- Từ shell sau, nhập lệnh /etc/init.d/tpa start. Thao tác này sẽ khởi động máy chủ Teradata.
Bắt đầu BTEQ
Tiện ích BTEQ được sử dụng để gửi các truy vấn SQL một cách tương tác. Sau đây là các bước để khởi động tiện ích BTEQ.
Step 1 - Nhập lệnh / sbin / ifconfig và ghi lại địa chỉ IP của VMWare.
Step 2- Chạy lệnh bteq. Tại dấu nhắc đăng nhập, hãy nhập lệnh.
Đăng nhập <ipaddress> / dbc, dbc; và nhập Tại lời nhắc mật khẩu, hãy nhập mật khẩu là dbc;
Bạn có thể đăng nhập vào hệ thống Teradata bằng BTEQ và chạy bất kỳ truy vấn SQL nào.
Kiến trúc Teradata dựa trên kiến trúc Xử lý song song khối lượng lớn (MPP). Các thành phần chính của Teradata là Parsing Engine, BYNET và Bộ xử lý mô-đun truy cập (AMP). Sơ đồ sau đây cho thấy kiến trúc cấp cao của một nút Teradata.
Các thành phần của Teradata
Các thành phần chính của Teradata như sau:
Node- Nó là đơn vị cơ bản trong Hệ thống Teradata. Mỗi máy chủ riêng lẻ trong hệ thống Teradata được gọi là một Node. Một nút bao gồm hệ điều hành riêng, CPU, bộ nhớ, bản sao của phần mềm Teradata RDBMS và không gian đĩa. Một tủ bao gồm một hoặc nhiều nút.
Parsing Engine- Parsing Engine chịu trách nhiệm nhận các truy vấn từ máy khách và chuẩn bị một kế hoạch thực thi hiệu quả. Trách nhiệm của công cụ phân tích cú pháp là -
Nhận truy vấn SQL từ máy khách
Phân tích cú pháp kiểm tra truy vấn SQL để tìm lỗi cú pháp
Kiểm tra xem người dùng có yêu cầu đặc quyền đối với các đối tượng được sử dụng trong truy vấn SQL hay không
Kiểm tra xem các đối tượng được sử dụng trong SQL có thực sự tồn tại hay không
Chuẩn bị kế hoạch thực thi để thực hiện truy vấn SQL và chuyển nó đến BYNET
Nhận kết quả từ AMP và gửi cho khách hàng
Message Passing Layer- Lớp truyền thông báo được gọi là BYNET, là lớp mạng trong hệ thống Teradata. Nó cho phép giao tiếp giữa PE và AMP và cũng như giữa các nút. Nó nhận kế hoạch thực thi từ Parsing Engine và gửi tới AMP. Tương tự, nó nhận kết quả từ AMP và gửi đến Parsing Engine.
Access Module Processor (AMP)- AMP, được gọi là Bộ xử lý ảo (vprocs) là bộ xử lý thực sự lưu trữ và truy xuất dữ liệu. Các AMP nhận dữ liệu và kế hoạch thực thi từ Parsing Engine, thực hiện bất kỳ chuyển đổi loại dữ liệu nào, tổng hợp, lọc, sắp xếp và lưu trữ dữ liệu trong các đĩa được liên kết với chúng. Bản ghi từ các bảng được phân phối đồng đều giữa các AMP trong hệ thống. Mỗi AMP được liên kết với một bộ đĩa lưu trữ dữ liệu. Chỉ AMP đó mới có thể đọc / ghi dữ liệu từ các đĩa.
Kiến trúc lưu trữ
Khi máy khách chạy các truy vấn để chèn các bản ghi, công cụ phân tích cú pháp sẽ gửi các bản ghi đến BYNET. BYNET truy xuất các bản ghi và gửi hàng tới AMP mục tiêu. AMP lưu trữ các bản ghi này trên đĩa của nó. Sơ đồ sau đây cho thấy kiến trúc lưu trữ của Teradata.
Kiến trúc truy xuất
Khi máy khách chạy các truy vấn để lấy các bản ghi, bộ máy phân tích cú pháp sẽ gửi một yêu cầu đến BYNET. BYNET gửi yêu cầu truy xuất tới các AMP thích hợp. Sau đó, các AMP tìm kiếm đĩa của họ song song và xác định các bản ghi được yêu cầu và gửi đến BYNET. Sau đó BYNET sẽ gửi các bản ghi đến Parsing Engine, đến lượt nó sẽ gửi cho khách hàng. Sau đây là kiến trúc truy xuất của Teradata.
Hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) là một phần mềm DBMS giúp tương tác với cơ sở dữ liệu. Họ sử dụng Ngôn ngữ truy vấn có cấu trúc (SQL) để tương tác với dữ liệu được lưu trữ trong bảng.
Cơ sở dữ liệu
Cơ sở dữ liệu là một tập hợp các dữ liệu liên quan đến logic. Chúng được nhiều người dùng truy cập với nhiều mục đích khác nhau. Ví dụ, một cơ sở dữ liệu bán hàng chứa toàn bộ thông tin về việc bán hàng được lưu trữ trong nhiều bảng.
Những cái bàn
Bảng là đơn vị cơ bản trong RDBMS nơi dữ liệu được lưu trữ. Bảng là một tập hợp các hàng và cột. Sau đây là một ví dụ về bảng nhân viên.
Nhân viên Không | Tên đầu tiên | LastName | Ngày sinh |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
Cột
Một cột chứa dữ liệu tương tự. Ví dụ, cột Ngày sinh trong bảng Nhân viên chứa thông tin ngày sinh cho tất cả nhân viên.
Ngày sinh |
---|
1/5/1980 |
11/6/1984 |
3/5/1983 |
12/1/1984 |
4/1/1983 |
Hàng
Hàng là một ví dụ của tất cả các cột. Ví dụ, trong bảng nhân viên, một hàng chứa thông tin về một nhân viên.
Nhân viên Không | Tên đầu tiên | LastName | Ngày sinh |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
Khóa chính
Khóa chính được sử dụng để xác định duy nhất một hàng trong bảng. Không cho phép các giá trị trùng lặp trong cột khóa chính và chúng không thể chấp nhận giá trị NULL. Nó là một trường bắt buộc trong một bảng.
Khóa ngoại
Các khóa ngoại được sử dụng để xây dựng mối quan hệ giữa các bảng. Khóa ngoại trong bảng con được định nghĩa là khóa chính trong bảng mẹ. Một bảng có thể có nhiều hơn một khóa ngoại. Nó có thể chấp nhận các giá trị trùng lặp và cả các giá trị rỗng. Các khóa ngoại là tùy chọn trong một bảng.
Mỗi cột trong bảng được liên kết với một kiểu dữ liệu. Các kiểu dữ liệu chỉ định loại giá trị nào sẽ được lưu trữ trong cột. Teradata hỗ trợ một số kiểu dữ liệu. Sau đây là một số kiểu dữ liệu thường được sử dụng.
Loại dữ liệu | Chiều dài (Byte) | Phạm vi giá trị |
---|---|---|
BYTEINT | 1 | -128 đến +127 |
SMALLINT | 2 | -32768 đến +32767 |
INTEGER | 4 | -2,147,483,648 đến +2147,483,647 |
BIGINT | số 8 | -9.233.372.036.854.775.80 8 đến +9.233.372.036.854.775,8 07 |
QUYẾT ĐỊNH | 1-16 | |
SỐ | 1-16 | |
PHAO NỔI | số 8 | Định dạng IEEE |
CHAR | Định dạng cố định | 1-64.000 |
VARCHAR | Biến đổi | 1-64.000 |
NGÀY | 4 | YYYYYMMDD |
THỜI GIAN | 6 hoặc 8 | HHMMSS.nnnnnn or HHMMSS.nnnnnn + HHMM |
TIMESTAMP | 10 hoặc 12 | YYMMDDHHMMSS.nnnnnn or YYMMDDHHMMSS.nnnnnn + HHMM |
Các bảng trong mô hình Quan hệ được định nghĩa là tập hợp dữ liệu. Chúng được biểu diễn dưới dạng hàng và cột.
Các loại bảng
Các loại Teradata hỗ trợ các loại bảng khác nhau.
Permanent Table - Đây là bảng mặc định và nó chứa dữ liệu do người dùng chèn vào và lưu trữ dữ liệu vĩnh viễn.
Volatile Table- Dữ liệu được chèn vào bảng biến động chỉ được giữ lại trong phiên người dùng. Bảng và dữ liệu bị xóa vào cuối phiên. Các bảng này chủ yếu được sử dụng để chứa dữ liệu trung gian trong quá trình chuyển đổi dữ liệu.
Global Temporary Table - Định nghĩa của bảng tạm thời toàn cục là ổn định nhưng dữ liệu trong bảng sẽ bị xóa vào cuối phiên người dùng.
Derived Table- Bảng gốc chứa các kết quả trung gian trong một truy vấn. Thời gian tồn tại của chúng nằm trong truy vấn mà chúng được tạo, sử dụng và loại bỏ.
Đặt nhiều tập hợp so với
Teradata phân loại các bảng dưới dạng bảng SET hoặc MULTISET dựa trên cách xử lý các bản ghi trùng lặp. Một bảng được định nghĩa là bảng SET không lưu trữ các bản ghi trùng lặp, trong khi bảng MULTISET có thể lưu trữ các bản ghi trùng lặp.
Sr.No | Lệnh & Mô tả Bảng |
---|---|
1 | Tạo bảng Lệnh CREATE TABLE dùng để tạo bảng trong Teradata. |
2 | Bảng thay đổi Lệnh ALTER TABLE được sử dụng để thêm hoặc bớt các cột từ một bảng hiện có. |
3 | Bảng thả Lệnh DROP TABLE được sử dụng để bỏ một bảng. |
Chương này giới thiệu các lệnh SQL được sử dụng để thao tác dữ liệu được lưu trữ trong bảng Teradata.
Chèn hồ sơ
Câu lệnh INSERT INTO được sử dụng để chèn các bản ghi vào bảng.
Cú pháp
Sau đây là cú pháp chung cho INSERT INTO.
INSERT INTO <tablename>
(column1, column2, column3,…)
VALUES
(value1, value2, value3 …);
Thí dụ
Ví dụ sau đây chèn các bản ghi vào bảng nhân viên.
INSERT INTO Employee (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
101,
'Mike',
'James',
'1980-01-05',
'2005-03-27',
01
);
Khi truy vấn trên được chèn, bạn có thể sử dụng câu lệnh SELECT để xem các bản ghi từ bảng.
Nhân viên Không | Tên đầu tiên | LastName | Ngày tham gia | Bộ phận Không | Ngày sinh |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
Chèn từ bảng khác
Câu lệnh CHÈN CHỌN được sử dụng để chèn các bản ghi từ một bảng khác.
Cú pháp
Sau đây là cú pháp chung cho INSERT INTO.
INSERT INTO <tablename>
(column1, column2, column3,…)
SELECT
column1, column2, column3…
FROM
<source table>;
Thí dụ
Ví dụ sau đây chèn các bản ghi vào bảng nhân viên. Tạo một bảng có tên Employee_Bkup với định nghĩa cột giống như bảng nhân viên trước khi chạy truy vấn chèn sau.
INSERT INTO Employee_Bkup (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
SELECT
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
FROM
Employee;
Khi truy vấn trên được thực thi, nó sẽ chèn tất cả các bản ghi từ bảng worker vào bảng worker_bkup.
Quy tắc
Số cột được chỉ định trong danh sách GIÁ TRỊ phải khớp với số cột được chỉ định trong mệnh đề CHÈN VÀO.
Giá trị là bắt buộc đối với cột KHÔNG ĐỦ.
Nếu không có giá trị nào được chỉ định, thì NULL sẽ được chèn cho các trường có giá trị rỗng.
Kiểu dữ liệu của các cột được chỉ định trong mệnh đề VALUES phải tương thích với kiểu dữ liệu của các cột trong mệnh đề INSERT.
Cập nhật hồ sơ
Câu lệnh UPDATE được sử dụng để cập nhật các bản ghi từ bảng.
Cú pháp
Sau đây là cú pháp chung cho UPDATE.
UPDATE <tablename>
SET <columnnamme> = <new value>
[WHERE condition];
Thí dụ
Ví dụ sau cập nhật ghi nợ của nhân viên thành 03 cho nhân viên 101.
UPDATE Employee
SET DepartmentNo = 03
WHERE EmployeeNo = 101;
Trong kết quả sau, bạn có thể thấy rằng DepartmentNo được cập nhật từ 1 thành 3 cho EmployeeNo 101.
SELECT Employeeno, DepartmentNo FROM Employee;
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo
----------- -------------
101 3
Quy tắc
Bạn có thể cập nhật một hoặc nhiều giá trị của bảng.
Nếu điều kiện WHERE không được chỉ định thì tất cả các hàng của bảng sẽ bị ảnh hưởng.
Bạn có thể cập nhật bảng với các giá trị từ bảng khác.
Xóa bản ghi
Câu lệnh DELETE FROM được sử dụng để cập nhật các bản ghi từ bảng.
Cú pháp
Sau đây là cú pháp chung cho DELETE FROM.
DELETE FROM <tablename>
[WHERE condition];
Thí dụ
Ví dụ sau đây xóa nhân viên 101 khỏi nhân viên bảng.
DELETE FROM Employee
WHERE EmployeeNo = 101;
Trong kết quả sau, bạn có thể thấy rằng nhân viên 101 đã bị xóa khỏi bảng.
SELECT EmployeeNo FROM Employee;
*** Query completed. No rows found.
*** Total elapsed time was 1 second.
Quy tắc
Bạn có thể cập nhật một hoặc nhiều bản ghi của bảng.
Nếu điều kiện WHERE không được chỉ định thì tất cả các hàng của bảng sẽ bị xóa.
Bạn có thể cập nhật bảng với các giá trị từ bảng khác.
Câu lệnh SELECT được sử dụng để lấy các bản ghi từ một bảng.
Cú pháp
Sau đây là cú pháp cơ bản của câu lệnh SELECT.
SELECT
column 1, column 2, .....
FROM
tablename;
Thí dụ
Hãy xem xét bảng nhân viên sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày tham gia | Bộ phận Không | Ngày sinh |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 25/4/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 21/3/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
Sau đây là một ví dụ về câu lệnh SELECT.
SELECT EmployeeNo,FirstName,LastName
FROM Employee;
Khi truy vấn này được thực thi, nó sẽ tìm nạp các cột EmployeeNo, FirstName và LastName từ bảng nhân viên.
EmployeeNo FirstName LastName
----------- ------------------------------ ---------------------------
101 Mike James
104 Alex Stuart
102 Robert Williams
105 Robert James
103 Peter Paul
Nếu bạn muốn tìm nạp tất cả các cột từ một bảng, bạn có thể sử dụng lệnh sau thay vì liệt kê tất cả các cột.
SELECT * FROM Employee;
Truy vấn trên sẽ tìm nạp tất cả các bản ghi từ bảng nhân viên.
Mệnh đề WHERE
Mệnh đề WHERE được sử dụng để lọc các bản ghi được trả về bởi câu lệnh SELECT. Một điều kiện được liên kết với mệnh đề WHERE. Chỉ, các bản ghi thỏa mãn điều kiện trong mệnh đề WHERE mới được trả về.
Cú pháp
Sau đây là cú pháp của câu lệnh SELECT với mệnh đề WHERE.
SELECT * FROM tablename
WHERE[condition];
Thí dụ
Truy vấn sau tìm nạp các bản ghi trong đó EmployeeNo là 101.
SELECT * FROM Employee
WHERE EmployeeNo = 101;
Khi truy vấn này được thực thi, nó sẽ trả về các bản ghi sau.
EmployeeNo FirstName LastName
----------- ------------------------------ -----------------------------
101 Mike James
ĐẶT BỞI
Khi câu lệnh SELECT được thực thi, các hàng được trả về không theo bất kỳ thứ tự cụ thể nào. Mệnh đề ORDER BY được sử dụng để sắp xếp các bản ghi theo thứ tự tăng dần / giảm dần trên bất kỳ cột nào.
Cú pháp
Sau đây là cú pháp của câu lệnh SELECT với mệnh đề ORDER BY.
SELECT * FROM tablename
ORDER BY column 1, column 2..;
Thí dụ
Truy vấn sau tìm nạp các bản ghi từ bảng nhân viên và sắp xếp kết quả theo FirstName.
SELECT * FROM Employee
ORDER BY FirstName;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
EmployeeNo FirstName LastName
----------- ------------------------------ -----------------------------
104 Alex Stuart
101 Mike James
103 Peter Paul
102 Robert Williams
105 Robert James
NHÓM THEO
Mệnh đề GROUP BY được sử dụng với câu lệnh SELECT và sắp xếp các bản ghi tương tự thành các nhóm.
Cú pháp
Sau đây là cú pháp của câu lệnh SELECT với mệnh đề GROUP BY.
SELECT column 1, column2 …. FROM tablename
GROUP BY column 1, column 2..;
Thí dụ
Ví dụ sau đây nhóm các bản ghi theo cột Bộ phận Không và xác định tổng số từ mỗi bộ phận.
SELECT DepartmentNo,Count(*) FROM
Employee
GROUP BY DepartmentNo;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
DepartmentNo Count(*)
------------ -----------
3 1
1 1
2 3
Teradata hỗ trợ các toán tử logic và điều kiện sau. Các toán tử này được sử dụng để thực hiện so sánh và kết hợp nhiều điều kiện.
Cú pháp | Ý nghĩa |
---|---|
> | Lớn hơn |
< | Ít hơn |
>= | Lớn hơn hoặc bằng |
<= | Ít hơn hoặc bằng |
= | Tương đương với |
BETWEEN | Nếu giá trị trong phạm vi |
IN | Nếu các giá trị trong <biểu thức> |
NOT IN | Nếu các giá trị không có trong <expression> |
IS NULL | Nếu giá trị là NULL |
IS NOT NULL | Nếu giá trị KHÔNG ĐẦY ĐỦ |
AND | Kết hợp nhiều điều kiện. Chỉ đánh giá đúng nếu tất cả các điều kiện được đáp ứng |
OR | Kết hợp nhiều điều kiện. Chỉ đánh giá đúng nếu một trong hai điều kiện được đáp ứng. |
NOT | Đảo ngược ý nghĩa của điều kiện |
GIỮA
Lệnh BETWEEN được sử dụng để kiểm tra xem một giá trị có nằm trong một phạm vi giá trị hay không.
Thí dụ
Hãy xem xét bảng nhân viên sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày tham gia | Bộ phận Không | Ngày sinh |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 25/4/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 21/3/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
Ví dụ sau tìm nạp các bản ghi có số nhân viên trong phạm vi từ 101,102 đến 103.
SELECT EmployeeNo, FirstName FROM
Employee
WHERE EmployeeNo BETWEEN 101 AND 103;
Khi truy vấn trên được thực thi, nó sẽ trả về các bản ghi nhân viên có nhân viên không nằm trong khoảng từ 101 đến 103.
*** Query completed. 3 rows found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName
----------- ------------------------------
101 Mike
102 Robert
103 Peter
TRONG
Lệnh IN được sử dụng để kiểm tra giá trị so với danh sách các giá trị đã cho.
Thí dụ
Ví dụ sau tìm nạp các bản ghi có số nhân viên trong 101, 102 và 103.
SELECT EmployeeNo, FirstName FROM
Employee
WHERE EmployeeNo in (101,102,103);
Truy vấn trên trả về các bản ghi sau.
*** Query completed. 3 rows found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName
----------- ------------------------------
101 Mike
102 Robert
103 Peter
KHÔNG VÀO
Lệnh NOT IN đảo ngược kết quả của lệnh IN. Nó tìm nạp các bản ghi có giá trị không khớp với danh sách đã cho.
Thí dụ
Ví dụ sau tìm nạp các bản ghi có số nhân viên không thuộc 101, 102 và 103.
SELECT * FROM
Employee
WHERE EmployeeNo not in (101,102,103);
Truy vấn trên trả về các bản ghi sau.
*** Query completed. 2 rows found. 6 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName LastName
----------- ------------------------------ -----------------------------
104 Alex Stuart
105 Robert James
Toán tử SET kết hợp các kết quả từ nhiều câu lệnh SELECT. Điều này có thể trông tương tự như tham gia, nhưng kết hợp kết hợp các cột từ nhiều bảng trong khi toán tử SET kết hợp các hàng từ nhiều hàng.
Quy tắc
Số lượng cột từ mỗi câu lệnh SELECT phải giống nhau.
Các kiểu dữ liệu từ mỗi SELECT phải tương thích.
ORDER BY chỉ nên được đưa vào câu lệnh SELECT cuối cùng.
LIÊN HIỆP
Câu lệnh UNION được sử dụng để kết hợp các kết quả từ nhiều câu lệnh SELECT. Nó bỏ qua các bản sao.
Cú pháp
Sau đây là cú pháp cơ bản của câu lệnh UNION.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Thí dụ
Hãy xem xét bảng nhân viên và bảng lương sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày tham gia | Bộ phận Không | Ngày sinh |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 25/4/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 21/3/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
Nhân viên Không | Tổng | Khấu trừ | NetPay |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
Truy vấn UNION sau đây kết hợp giá trị EmployeeNo từ cả bảng Employee và Salary.
SELECT EmployeeNo
FROM
Employee
UNION
SELECT EmployeeNo
FROM
Salary;
Khi truy vấn được thực thi, nó tạo ra kết quả sau.
EmployeeNo
-----------
101
102
103
104
105
ĐOÀN KẾT TẤT CẢ
Câu lệnh UNION ALL tương tự như UNION, nó kết hợp các kết quả từ nhiều bảng bao gồm các hàng trùng lặp.
Cú pháp
Sau đây là cú pháp cơ bản của câu lệnh UNION ALL.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION ALL
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Thí dụ
Sau đây là một ví dụ cho câu lệnh UNION ALL.
SELECT EmployeeNo
FROM
Employee
UNION ALL
SELECT EmployeeNo
FROM
Salary;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Bạn có thể thấy rằng nó cũng trả về các bản sao.
EmployeeNo
-----------
101
104
102
105
103
101
104
102
103
GIAO NHAU
Lệnh INTERSECT cũng được sử dụng để kết hợp các kết quả từ nhiều câu lệnh SELECT. Nó trả về các hàng từ câu lệnh SELECT đầu tiên có khớp tương ứng trong các câu lệnh SELECT thứ hai. Nói cách khác, nó trả về các hàng tồn tại trong cả hai câu lệnh SELECT.
Cú pháp
Sau đây là cú pháp cơ bản của câu lệnh INTERSECT.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
INTERSECT
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Thí dụ
Sau đây là một ví dụ về câu lệnh INTERSECT. Nó trả về giá trị EmployeeNo tồn tại trong cả hai bảng.
SELECT EmployeeNo
FROM
Employee
INTERSECT
SELECT EmployeeNo
FROM
Salary;
Khi truy vấn trên được thực thi, nó sẽ trả về các bản ghi sau. EmployeeNo 105 bị loại trừ vì nó không tồn tại trong bảng SALARY.
EmployeeNo
-----------
101
104
102
103
TRỪ / TRỪ
Lệnh MINUS / EXCEPT kết hợp các hàng từ nhiều bảng và trả về các hàng nằm trong SELECT đầu tiên nhưng không có trong SELECT thứ hai. Cả hai đều trả về cùng một kết quả.
Cú pháp
Sau đây là cú pháp cơ bản của câu lệnh MINUS.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
MINUS
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Thí dụ
Sau đây là một ví dụ về câu lệnh MINUS.
SELECT EmployeeNo
FROM
Employee
MINUS
SELECT EmployeeNo
FROM
Salary;
Khi truy vấn này được thực thi, nó trả về bản ghi sau.
EmployeeNo
-----------
105
Teradata cung cấp một số chức năng để thao tác với các chuỗi. Các chức năng này tương thích với tiêu chuẩn ANSI.
Sr.No | Chức năng & Mô tả chuỗi |
---|---|
1 | || Nối các chuỗi với nhau |
2 | SUBSTR Trích xuất một phần của chuỗi (phần mở rộng Teradata) |
3 | SUBSTRING Trích xuất một phần của chuỗi (tiêu chuẩn ANSI) |
4 | INDEX Định vị vị trí của một ký tự trong một chuỗi (phần mở rộng Teradata) |
5 | POSITION Định vị vị trí của một ký tự trong một chuỗi (tiêu chuẩn ANSI) |
6 | TRIM Cắt khoảng trống từ một chuỗi |
7 | UPPER Chuyển một chuỗi thành chữ hoa |
số 8 | LOWER Chuyển đổi một chuỗi thành chữ thường |
Thí dụ
Bảng sau liệt kê một số hàm chuỗi với kết quả.
Hàm chuỗi | Kết quả |
---|---|
CHỌN ĐĂNG KÝ ('kho' TỪ 1 CHO 4) | đồ |
CHỌN SUBSTR ('kho', 1,4) | đồ |
CHỌN 'dữ liệu' || '' || 'Kho' | kho dữ liệu |
CHỌN LÊN LÊN ('dữ liệu') | DỮ LIỆU |
CHỌN LOWER ('DỮ LIỆU') | dữ liệu |
Chương này thảo luận về các chức năng ngày / giờ có sẵn trong Teradata.
Lưu trữ ngày
Ngày được lưu trữ dưới dạng số nguyên trong nội bộ bằng cách sử dụng công thức sau.
((YEAR - 1900) * 10000) + (MONTH * 100) + DAY
Bạn có thể sử dụng truy vấn sau để kiểm tra cách lưu trữ ngày tháng.
SELECT CAST(CURRENT_DATE AS INTEGER);
Vì ngày tháng được lưu trữ dưới dạng số nguyên nên bạn có thể thực hiện một số phép toán số học trên chúng. Teradata cung cấp các chức năng để thực hiện các thao tác này.
TRÍCH XUẤT
Hàm EXTRACT trích xuất các phần của ngày, tháng và năm từ giá trị DATE. Chức năng này cũng được sử dụng để trích xuất giờ, phút và giây từ giá trị TIME / TIMESTAMP.
Thí dụ
Các ví dụ sau đây cho thấy cách trích xuất các giá trị Năm, Tháng, Ngày, Giờ, Phút và thứ hai từ các giá trị Ngày và Dấu thời gian.
SELECT EXTRACT(YEAR FROM CURRENT_DATE);
EXTRACT(YEAR FROM Date)
-----------------------
2016
SELECT EXTRACT(MONTH FROM CURRENT_DATE);
EXTRACT(MONTH FROM Date)
------------------------
1
SELECT EXTRACT(DAY FROM CURRENT_DATE);
EXTRACT(DAY FROM Date)
------------------------
1
SELECT EXTRACT(HOUR FROM CURRENT_TIMESTAMP);
EXTRACT(HOUR FROM Current TimeStamp(6))
---------------------------------------
4
SELECT EXTRACT(MINUTE FROM CURRENT_TIMESTAMP);
EXTRACT(MINUTE FROM Current TimeStamp(6))
-----------------------------------------
54
SELECT EXTRACT(SECOND FROM CURRENT_TIMESTAMP);
EXTRACT(SECOND FROM Current TimeStamp(6))
-----------------------------------------
27.140000
INTERVAL
Teradata cung cấp hàm INTERVAL để thực hiện các phép tính số học trên các giá trị NGÀY và GIỜ. Có hai loại chức năng INTERVAL.
Khoảng thời gian năm tháng
- YEAR
- NĂM ĐẾN THÁNG
- MONTH
Khoảng thời gian trong ngày
- DAY
- NGÀY ĐẾN GIỜ
- NGÀY ĐẾN PHÚT
- NGÀY ĐẾN THỨ HAI
- HOUR
- GIỜ ĐẾN PHÚT
- GIỜ ĐẾN GIÂY
- MINUTE
- PHÚT ĐẾN GIÂY
- SECOND
Thí dụ
Ví dụ sau thêm 3 năm cho ngày hiện tại.
SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03' YEAR;
Date (Date+ 3)
-------- ---------
16/01/01 19/01/01
Ví dụ sau đây thêm 3 năm và 01 tháng cho ngày hiện tại.
SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03-01' YEAR TO MONTH;
Date (Date+ 3-01)
-------- ------------
16/01/01 19/02/01
Ví dụ sau thêm 01 ngày, 05 giờ và 10 phút vào dấu thời gian hiện tại.
SELECT CURRENT_TIMESTAMP,CURRENT_TIMESTAMP + INTERVAL '01 05:10' DAY TO MINUTE;
Current TimeStamp(6) (Current TimeStamp(6)+ 1 05:10)
-------------------------------- --------------------------------
2016-01-01 04:57:26.360000+00:00 2016-01-02 10:07:26.360000+00:00
Teradata cung cấp các hàm tích hợp là phần mở rộng cho SQL. Sau đây là các chức năng tích hợp phổ biến.
Chức năng | Kết quả |
---|---|
CHỌN NGÀY; | Ngày -------- 16/01/01 |
CHỌN CURRENT_DATE; | Ngày -------- 16/01/01 |
CHỌN THỜI GIAN; | Thời gian -------- 04:50:29 |
CHỌN CURRENT_TIME; | Thời gian -------- 04:50:29 |
CHỌN CURRENT_TIMESTAMP; | Thời gian hiện tạiStamp (6) -------------------------------- 2016-01-01 04: 51: 06.990000 + 00: 00 |
CHỌN CƠ SỞ DỮ LIỆU; | Cơ sở dữ liệu ------------------------------ TDUSER |
Teradata hỗ trợ các hàm tổng hợp chung. Chúng có thể được sử dụng với câu lệnh SELECT.
COUNT - Đếm các hàng
SUM - Tính tổng các giá trị của (các) cột được chỉ định
MAX - Trả về giá trị lớn của cột được chỉ định
MIN - Trả về giá trị nhỏ nhất của cột được chỉ định
AVG - Trả về giá trị trung bình của cột được chỉ định
Thí dụ
Hãy xem xét Bảng lương sau đây.
Nhân viên Không | Tổng | Khấu trừ | NetPay |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
104 | 75.000 | 5.000 | 70.000 |
102 | 80.000 | 6.000 | 74.000 |
105 | 70.000 | 4.000 | 66.000 |
103 | 90.000 | 7.000 | 83.000 |
ĐẾM
Ví dụ sau đây đếm số lượng bản ghi trong bảng Lương.
SELECT count(*) from Salary;
Count(*)
-----------
5
TỐI ĐA
Ví dụ sau trả về giá trị tiền lương ròng tối đa của nhân viên.
SELECT max(NetPay) from Salary;
Maximum(NetPay)
---------------------
83000
MIN
Ví dụ sau trả về giá trị lương ròng tối thiểu của nhân viên từ bảng Lương.
SELECT min(NetPay) from Salary;
Minimum(NetPay)
---------------------
36000
AVG
Ví dụ sau trả về giá trị tiền lương ròng trung bình của nhân viên từ bảng.
SELECT avg(NetPay) from Salary;
Average(NetPay)
---------------------
65800
TỔNG
Ví dụ sau đây tính tổng tiền lương ròng của nhân viên từ tất cả các bản ghi của Bảng lương.
SELECT sum(NetPay) from Salary;
Sum(NetPay)
-----------------
329000
Chương này giải thích các chức năng CASE và COALESCE của Teradata.
Biểu thức CASE
Biểu thức CASE đánh giá mỗi hàng theo một điều kiện hoặc mệnh đề WHEN và trả về kết quả của trận đấu đầu tiên. Nếu không có kết quả phù hợp nào thì kết quả từ phần ELSE của được trả về.
Cú pháp
Sau đây là cú pháp của biểu thức CASE.
CASE <expression>
WHEN <expression> THEN result-1
WHEN <expression> THEN result-2
ELSE
Result-n
END
Thí dụ
Hãy xem xét bảng Nhân viên sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày tham gia | Bộ phận Không | Ngày sinh |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 25/4/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 21/3/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
Ví dụ sau đây đánh giá cột Phòng ban và trả về giá trị 1 nếu số phòng ban là 1; trả về 2 nếu số bộ phận là 3; nếu không nó trả về giá trị là bộ phận không hợp lệ.
SELECT
EmployeeNo,
CASE DepartmentNo
WHEN 1 THEN 'Admin'
WHEN 2 THEN 'IT'
ELSE 'Invalid Dept'
END AS Department
FROM Employee;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
*** Query completed. 5 rows found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo Department
----------- ------------
101 Admin
104 IT
102 IT
105 Invalid Dept
103 IT
Biểu thức CASE ở trên cũng có thể được viết dưới dạng sau sẽ cho kết quả tương tự như trên.
SELECT
EmployeeNo,
CASE
WHEN DepartmentNo = 1 THEN 'Admin'
WHEN DepartmentNo = 2 THEN 'IT'
ELSE 'Invalid Dept'
END AS Department
FROM Employee;
THAN
COALESCE là một câu lệnh trả về giá trị khác rỗng đầu tiên của biểu thức. Nó trả về NULL nếu tất cả các đối số của biểu thức được đánh giá là NULL. Sau đây là cú pháp.
Cú pháp
COALESCE(expression 1, expression 2, ....)
Thí dụ
SELECT
EmployeeNo,
COALESCE(dept_no, 'Department not found')
FROM
employee;
NULLIF
Câu lệnh NULLIF trả về NULL nếu các đối số bằng nhau.
Cú pháp
Sau đây là cú pháp của câu lệnh NULLIF.
NULLIF(expression 1, expression 2)
Thí dụ
Ví dụ sau trả về NULL nếu DepartmentNo bằng 3. Ngược lại, nó trả về giá trị DepartmentNo.
SELECT
EmployeeNo,
NULLIF(DepartmentNo,3) AS department
FROM Employee;
Truy vấn trên trả về các bản ghi sau. Bạn có thể thấy rằng nhân viên 105 không có phòng ban. dưới dạng NULL.
*** Query completed. 5 rows found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo department
----------- ------------------
101 1
104 2
102 2
105 ?
103 2
Chỉ mục chính được sử dụng để chỉ định nơi dữ liệu nằm trong Teradata. Nó được sử dụng để chỉ định AMP lấy hàng dữ liệu. Mỗi bảng trong Teradata bắt buộc phải có một chỉ mục chính được xác định. Nếu chỉ mục chính không được xác định, Teradata sẽ tự động gán chỉ mục chính. Chỉ mục chính cung cấp cách nhanh nhất để truy cập dữ liệu. Một chính có thể có tối đa 64 cột.
Chỉ mục chính được xác định trong khi tạo bảng. Có 2 loại Chỉ số chính.
- Chỉ số chính duy nhất (UPI)
- Chỉ mục chính không duy nhất (NUPI)
Chỉ số chính duy nhất (UPI)
Nếu bảng được xác định là có UPI, thì cột được coi là UPI không được có bất kỳ giá trị trùng lặp nào. Nếu bất kỳ giá trị trùng lặp nào được chèn vào, chúng sẽ bị từ chối.
Tạo chỉ mục chính duy nhất
Ví dụ sau tạo bảng Lương với cột EmployeeNo làm Chỉ mục chính duy nhất.
CREATE SET TABLE Salary (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
UNIQUE PRIMARY INDEX(EmployeeNo);
Chỉ mục chính không duy nhất (NUPI)
Nếu bảng được xác định là có NUPI, thì cột được coi là UPI có thể chấp nhận các giá trị trùng lặp.
Tạo chỉ mục chính không duy nhất
Ví dụ sau đây tạo bảng tài khoản nhân viên với cột EmployeeNo làm Chỉ mục chính không duy nhất. EmployeeNo được định nghĩa là Chỉ mục Chính Không Duy nhất vì một nhân viên có thể có nhiều tài khoản trong bảng; một cho tài khoản lương và một cho tài khoản hoàn trả.
CREATE SET TABLE Employee _Accounts (
EmployeeNo INTEGER,
employee_bank_account_type BYTEINT.
employee_bank_account_number INTEGER,
employee_bank_name VARCHAR(30),
employee_bank_city VARCHAR(30)
)
PRIMARY INDEX(EmployeeNo);
Tham gia được sử dụng để kết hợp các bản ghi từ nhiều hơn một bảng. Các bảng được nối dựa trên các cột / giá trị chung từ các bảng này.
Có nhiều loại Tham gia khác nhau có sẵn.
- Tham gia bên trong
- Tham gia bên ngoài bên trái
- Tham gia bên ngoài bên phải
- Tham gia đầy đủ bên ngoài
- Tự tham gia
- Tham gia chéo
- Tham gia sản xuất Descartes
THAM GIA INNER
Tham gia bên trong kết hợp các bản ghi từ nhiều bảng và trả về các giá trị tồn tại trong cả hai bảng.
Cú pháp
Sau đây là cú pháp của câu lệnh INNER JOIN.
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
Thí dụ
Hãy xem xét bảng nhân viên và bảng lương sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày tham gia | Bộ phận Không | Ngày sinh |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 25/4/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 21/3/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
Nhân viên Không | Tổng | Khấu trừ | NetPay |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
Truy vấn sau đây kết hợp bảng Nhân viên và bảng Lương trên cột chung EmployeeNo. Mỗi bảng được gán một bí danh A & B và các cột được tham chiếu với bí danh chính xác.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
INNER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo);
Khi truy vấn trên được thực thi, nó sẽ trả về các bản ghi sau. Nhân viên 105 không được bao gồm trong kết quả vì nó không có bản ghi phù hợp trong bảng Lương.
*** Query completed. 4 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
THAM GIA NGOÀI TRỜI
LEFT OUTER JOIN và RIGHT OUTER JOIN cũng kết hợp các kết quả từ nhiều bảng.
LEFT OUTER JOIN trả về tất cả các bản ghi từ bảng bên trái và chỉ trả về các bản ghi phù hợp từ bảng bên phải.
RIGHT OUTER JOIN trả về tất cả các bản ghi từ bảng bên phải và chỉ trả về các hàng phù hợp từ bảng bên trái.
FULL OUTER JOINkết hợp các kết quả từ cả LEFT OUTER và RIGHT OUTER JOINS. Nó trả về cả các hàng phù hợp và không khớp từ các bảng đã nối.
Cú pháp
Sau đây là cú pháp của câu lệnh OUTER JOIN. Bạn cần sử dụng một trong các tùy chọn từ LEFT OUTER JOIN, RIGHT OUTER JOIN hoặc FULL OUTER JOIN.
SELECT col1, col2, col3….
FROM
Table-1
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
Thí dụ
Hãy xem xét ví dụ sau về truy vấn LEFT OUTER JOIN. Nó trả về tất cả các bản ghi từ bảng Nhân viên và các bản ghi khớp từ bảng Lương.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
LEFT OUTER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo)
ORDER BY A.EmployeeNo;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Đối với nhân viên 105, giá trị NetPay là NULL, vì nó không có bản ghi phù hợp trong bảng Lương.
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo NetPay
----------- ------------ -----------
101 1 36000
102 2 74000
103 2 83000
104 2 70000
105 3 ?
THAM GIA CROSS
Cross Join nối mọi hàng từ bảng bên trái sang mọi hàng từ bảng bên phải.
Cú pháp
Sau đây là cú pháp của câu lệnh CROSS JOIN.
SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay
FROM
Employee A
CROSS JOIN
Salary B
WHERE A.EmployeeNo = 101
ORDER BY B.EmployeeNo;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Nhân viên số 101 từ bảng Nhân viên được kết hợp với mỗi và mọi bản ghi từ Bảng lương.
*** Query completed. 4 rows found. 4 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo DepartmentNo EmployeeNo NetPay
----------- ------------ ----------- -----------
101 1 101 36000
101 1 104 70000
101 1 102 74000
101 1 103 83000
Một truy vấn con trả về các bản ghi từ một bảng dựa trên các giá trị từ một bảng khác. Nó là một truy vấn SELECT trong một truy vấn khác. Truy vấn SELECT được gọi là truy vấn bên trong được thực thi đầu tiên và kết quả được sử dụng bởi truy vấn bên ngoài. Một số tính năng nổi bật của nó là -
Một truy vấn có thể có nhiều truy vấn con và truy vấn con có thể chứa một truy vấn con khác.
Truy vấn con không trả về các bản ghi trùng lặp.
Nếu truy vấn con chỉ trả về một giá trị, bạn có thể sử dụng toán tử = để sử dụng nó với truy vấn bên ngoài. Nếu nó trả về nhiều giá trị, bạn có thể sử dụng IN hoặc NOT IN.
Cú pháp
Sau đây là cú pháp chung của các truy vấn con.
SELECT col1, col2, col3,…
FROM
Outer Table
WHERE col1 OPERATOR ( Inner SELECT Query);
Thí dụ
Hãy xem xét bảng lương sau đây.
Nhân viên Không | Tổng | Khấu trừ | NetPay |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
Truy vấn sau xác định số nhân viên có mức lương cao nhất. SELECT bên trong thực hiện chức năng tổng hợp để trả về giá trị NetPay lớn nhất và truy vấn SELECT bên ngoài sử dụng giá trị này để trả về bản ghi nhân viên có giá trị này.
SELECT EmployeeNo, NetPay
FROM Salary
WHERE NetPay =
(SELECT MAX(NetPay)
FROM Salary);
Khi truy vấn này được thực thi, nó tạo ra kết quả sau.
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo NetPay
----------- -----------
103 83000
Teradata hỗ trợ các loại bảng sau để giữ dữ liệu tạm thời.
- Bảng có nguồn gốc
- Bàn dễ bay hơi
- Bảng tạm thời toàn cầu
Bảng có nguồn gốc
Các bảng có nguồn gốc được tạo, sử dụng và bỏ trong một truy vấn. Chúng được sử dụng để lưu trữ các kết quả trung gian trong một truy vấn.
Thí dụ
Ví dụ sau đây xây dựng một bảng dẫn xuất EmpSal với các bản ghi của nhân viên có mức lương lớn hơn 75000.
SELECT
Emp.EmployeeNo,
Emp.FirstName,
Empsal.NetPay
FROM
Employee Emp,
(select EmployeeNo , NetPay
from Salary
where NetPay >= 75000) Empsal
where Emp.EmployeeNo = Empsal.EmployeeNo;
Khi truy vấn trên được thực thi, nó sẽ trả về những nhân viên có mức lương lớn hơn 75000.
*** Query completed. One row found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName NetPay
----------- ------------------------------ -----------
103 Peter 83000
Bàn dễ bay hơi
Các bảng biến động được tạo, sử dụng và xóa trong phiên người dùng. Định nghĩa của chúng không được lưu trữ trong từ điển dữ liệu. Chúng giữ dữ liệu trung gian của truy vấn thường được sử dụng. Sau đây là cú pháp.
Cú pháp
CREATE [SET|MULTISET] VOALTILE TABLE tablename
<table definitions>
<column definitions>
<index definitions>
ON COMMIT [DELETE|PRESERVE] ROWS
Thí dụ
CREATE VOLATILE TABLE dept_stat (
dept_no INTEGER,
avg_salary INTEGER,
max_salary INTEGER,
min_salary INTEGER
)
PRIMARY INDEX(dept_no)
ON COMMIT PRESERVE ROWS;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
*** Table has been created.
*** Total elapsed time was 1 second.
Bảng tạm thời toàn cầu
Định nghĩa của bảng Tạm thời toàn cục được lưu trữ trong từ điển dữ liệu và chúng có thể được sử dụng bởi nhiều người dùng / phiên. Nhưng dữ liệu được tải vào bảng tạm thời toàn cầu chỉ được giữ lại trong phiên. Bạn có thể hiện thực hóa tối đa 2000 bảng tạm thời chung cho mỗi phiên. Sau đây là cú pháp.
Cú pháp
CREATE [SET|MULTISET] GLOBAL TEMPORARY TABLE tablename
<table definitions>
<column definitions>
<index definitions>
Thí dụ
CREATE SET GLOBAL TEMPORARY TABLE dept_stat (
dept_no INTEGER,
avg_salary INTEGER,
max_salary INTEGER,
min_salary INTEGER
)
PRIMARY INDEX(dept_no);
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
*** Table has been created.
*** Total elapsed time was 1 second.
Có ba loại không gian có sẵn trong Teradata.
Không gian vĩnh viễn
Không gian vĩnh viễn là lượng không gian tối đa có sẵn cho người dùng / cơ sở dữ liệu để chứa các hàng dữ liệu. Bảng cố định, tạp chí, bảng dự phòng và bảng phụ chỉ mục phụ sử dụng không gian vĩnh viễn.
Không gian vĩnh viễn không được cấp phát trước cho cơ sở dữ liệu / người dùng. Chúng chỉ được định nghĩa là dung lượng tối đa mà cơ sở dữ liệu / người dùng có thể sử dụng. Số lượng không gian cố định được chia cho số lượng AMP. Bất cứ khi nào vượt quá giới hạn AMP, một thông báo lỗi sẽ được tạo.
Spool Space
Không gian bộ đệm là không gian cố định không sử dụng được hệ thống sử dụng để giữ các kết quả trung gian của truy vấn SQL. Người dùng không có không gian ống đệm không thể thực hiện bất kỳ truy vấn nào.
Tương tự như Không gian vĩnh viễn, không gian ống chỉ định lượng không gian tối đa mà người dùng có thể sử dụng. Không gian bộ đệm được chia cho số lượng AMP. Bất cứ khi nào vượt quá giới hạn AMP, người dùng sẽ gặp lỗi không gian cuộn.
Không gian tạm thời
Không gian tạm thời là không gian cố định không sử dụng được sử dụng bởi các bảng Tạm thời Toàn cầu. Không gian tạm thời cũng được chia cho số lượng AMP.
Một bảng chỉ có thể chứa một chỉ mục chính. Thường xuyên hơn, bạn sẽ gặp các tình huống trong đó bảng chứa các cột khác, sử dụng dữ liệu mà dữ liệu thường xuyên được truy cập. Teradata sẽ thực hiện quét toàn bộ bảng cho các truy vấn đó. Chỉ mục phụ giải quyết vấn đề này.
Các chỉ mục phụ là một đường dẫn thay thế để truy cập dữ liệu. Có một số khác biệt giữa chỉ mục chính và chỉ mục phụ.
Chỉ mục thứ cấp không tham gia vào việc phân phối dữ liệu.
Giá trị chỉ mục phụ được lưu trữ trong bảng phụ. Các bảng này được xây dựng trong tất cả các AMP.
Chỉ mục phụ là tùy chọn.
Chúng có thể được tạo trong khi tạo bảng hoặc sau khi tạo bảng.
Chúng chiếm thêm không gian vì chúng xây dựng bảng phụ và chúng cũng yêu cầu bảo trì vì các bảng con cần được cập nhật cho mỗi hàng mới.
Có hai loại chỉ mục phụ -
- Chỉ số thứ cấp duy nhất (USI)
- Chỉ mục phụ không duy nhất (NUSI)
Chỉ số thứ cấp duy nhất (USI)
Chỉ mục phụ duy nhất chỉ cho phép các giá trị duy nhất cho các cột được xác định là USI. Truy cập hàng bằng USI là một hoạt động hai amp.
Tạo chỉ mục phụ duy nhất
Ví dụ sau tạo USI trên cột EmployeeNo của bảng nhân viên.
CREATE UNIQUE INDEX(EmployeeNo) on employee;
Chỉ mục phụ không duy nhất (NUSI)
Chỉ mục phụ không duy nhất cho phép các giá trị trùng lặp cho các cột được xác định là NUSI. Truy cập hàng bằng NUSI là hoạt động tất cả các bộ khuếch đại.
Tạo chỉ mục phụ không duy nhất
Ví dụ sau tạo NUSI trên cột FirstName của bảng nhân viên.
CREATE INDEX(FirstName) on Employee;
Trình tối ưu hóa Teradata đưa ra chiến lược thực thi cho mọi truy vấn SQL. Chiến lược thực thi này dựa trên thống kê được thu thập trên các bảng được sử dụng trong truy vấn SQL. Thống kê trên bảng được thu thập bằng lệnh COLLECT STATISTICS. Trình tối ưu hóa yêu cầu thông tin môi trường và nhân khẩu học dữ liệu để đưa ra chiến lược thực thi tối ưu.
Thông tin môi trường
- Số lượng nút, AMP và CPU
- Dung lượng bộ nhớ
Nhân khẩu học Dữ liệu
- Số hàng
- Kích thước hàng
- Phạm vi giá trị trong bảng
- Số hàng trên mỗi giá trị
- Số lượng rỗng
Có ba cách tiếp cận để thu thập số liệu thống kê trên bảng.
- Lấy mẫu AMP ngẫu nhiên
- Thu thập thống kê đầy đủ
- Sử dụng tùy chọn SAMPLE
Thu thập thống kê
Lệnh COLLECT STATISTICS được sử dụng để thu thập số liệu thống kê trên một bảng.
Cú pháp
Sau đây là cú pháp cơ bản để thu thập số liệu thống kê trên một bảng.
COLLECT [SUMMARY] STATISTICS
INDEX (indexname) COLUMN (columnname)
ON <tablename>;
Thí dụ
Ví dụ sau đây thu thập số liệu thống kê trên cột EmployeeNo của bảng Employee.
COLLECT STATISTICS COLUMN(EmployeeNo) ON Employee;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
*** Update completed. 2 rows changed.
*** Total elapsed time was 1 second.
Xem thống kê
Bạn có thể xem số liệu thống kê đã thu thập bằng lệnh HELP STATISTICS.
Cú pháp
Sau đây là cú pháp để xem số liệu thống kê được thu thập.
HELP STATISTICS <tablename>;
Thí dụ
Sau đây là một ví dụ để xem số liệu thống kê được thu thập trên bảng Nhân viên.
HELP STATISTICS employee;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
Date Time Unique Values Column Names
-------- -------- -------------------- -----------------------
16/01/01 08:07:04 5 *
16/01/01 07:24:16 3 DepartmentNo
16/01/01 08:07:04 5 EmployeeNo
Nén được sử dụng để giảm bộ nhớ được sử dụng bởi các bảng. Trong Teradata, tính năng nén có thể nén tới 255 giá trị khác nhau bao gồm cả NULL. Vì dung lượng lưu trữ được giảm xuống, Teradata có thể lưu trữ nhiều bản ghi hơn trong một khối. Điều này dẫn đến thời gian phản hồi truy vấn được cải thiện vì bất kỳ thao tác I / O nào cũng có thể xử lý nhiều hàng hơn cho mỗi khối. Nén có thể được thêm vào lúc tạo bảng bằng CREATE TABLE hoặc sau khi tạo bảng bằng lệnh ALTER TABLE.
Hạn chế
- Chỉ có thể nén 255 giá trị trên mỗi cột.
- Không thể nén cột Chỉ mục chính.
- Các bảng dễ bay hơi không thể nén được.
Nén nhiều giá trị (MVC)
Bảng sau đây nén trường DepatmentNo cho các giá trị 1, 2 và 3. Khi nén được áp dụng trên một cột, các giá trị cho cột này không được lưu cùng hàng. Thay vào đó, các giá trị được lưu trữ trong tiêu đề Bảng trong mỗi AMP và chỉ các bit hiện diện mới được thêm vào hàng để biểu thị giá trị.
CREATE SET TABLE employee (
EmployeeNo integer,
FirstName CHAR(30),
LastName CHAR(30),
BirthDate DATE FORMAT 'YYYY-MM-DD-',
JoinedDate DATE FORMAT 'YYYY-MM-DD-',
employee_gender CHAR(1),
DepartmentNo CHAR(02) COMPRESS(1,2,3)
)
UNIQUE PRIMARY INDEX(EmployeeNo);
Nén nhiều giá trị có thể được sử dụng khi bạn có một cột trong bảng lớn với các giá trị hữu hạn.
Lệnh EXPLAIN trả về kế hoạch thực thi của công cụ phân tích cú pháp bằng tiếng Anh. Nó có thể được sử dụng với bất kỳ câu lệnh SQL nào ngoại trừ trên một lệnh EXPLAIN khác. Khi truy vấn được đặt trước bằng lệnh EXPLAIN, kế hoạch thực thi của Công cụ phân tích cú pháp được trả lại cho người dùng thay vì AMP.
Ví dụ về GIẢI THÍCH
Hãy xem xét bảng Nhân viên với định nghĩa sau.
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30),
LastName VARCHAR(30),
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
Dưới đây là một số ví dụ về kế hoạch EXPLAIN.
Quét toàn bảng (FTS)
Khi không có điều kiện nào được chỉ định trong câu lệnh SELECT, thì trình tối ưu hóa có thể chọn sử dụng Quét toàn bảng nơi mỗi và mọi hàng của bảng được truy cập.
Thí dụ
Sau đây là một truy vấn mẫu trong đó trình tối ưu hóa có thể chọn FTS.
EXPLAIN SELECT * FROM employee;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Có thể thấy trình tối ưu hóa chọn truy cập tất cả các AMP và tất cả các hàng trong AMP.
1) First, we lock a distinct TDUSER."pseudo table" for read on a
RowHash to prevent global deadlock for TDUSER.employee.
2) Next, we lock TDUSER.employee for read.
3) We do an all-AMPs RETRIEVE step from TDUSER.employee by way of an
all-rows scan with no residual conditions into Spool 1
(group_amps), which is built locally on the AMPs. The size of
Spool 1 is estimated with low confidence to be 2 rows (116 bytes).
The estimated time for this step is 0.03 seconds.
4) Finally, we send out an END TRANSACTION step to all AMPs involved
in processing the request.
→ The contents of Spool 1 are sent back to the user as the result of
statement 1. The total estimated time is 0.03 seconds.
Chỉ mục chính duy nhất
Khi các hàng được truy cập bằng Chỉ mục chính duy nhất, thì đó là một hoạt động AMP.
EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Có thể thấy đây là một truy xuất AMP đơn và trình tối ưu hóa đang sử dụng chỉ mục chính duy nhất để truy cập hàng.
1) First, we do a single-AMP RETRIEVE step from TDUSER.employee by
way of the unique primary index "TDUSER.employee.EmployeeNo = 101"
with no residual conditions. The estimated time for this step is
0.01 seconds.
→ The row is sent directly back to the user as the result of
statement 1. The total estimated time is 0.01 seconds.
Chỉ mục phụ duy nhất
Khi các hàng được truy cập bằng Chỉ mục phụ duy nhất, đó là một hoạt động hai amp.
Thí dụ
Hãy xem xét bảng Lương với định nghĩa sau.
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo )
UNIQUE INDEX (EmployeeNo);
Hãy xem xét câu lệnh SELECT sau đây.
EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Có thể thấy trình tối ưu hóa truy xuất hàng trong hoạt động hai amp bằng cách sử dụng chỉ mục phụ duy nhất.
1) First, we do a two-AMP RETRIEVE step from TDUSER.Salary
by way of unique index # 4 "TDUSER.Salary.EmployeeNo =
101" with no residual conditions. The estimated time for this
step is 0.01 seconds.
→ The row is sent directly back to the user as the result of
statement 1. The total estimated time is 0.01 seconds.
Điều khoản bổ sung
Sau đây là danh sách các thuật ngữ thường thấy trong kế hoạch EXPLAIN.
... (Last Use) …
Tệp cuộn không cần thiết nữa và sẽ được phát hành khi bước này hoàn tất.
... with no residual conditions …
Tất cả các điều kiện áp dụng đã được áp dụng cho các hàng.
... END TRANSACTION …
Khóa giao dịch được giải phóng và các thay đổi được cam kết.
... eliminating duplicate rows ...
Các hàng trùng lặp chỉ tồn tại trong tệp cuộn, không phải bảng thiết lập. Đang thực hiện thao tác DISTINCT.
... by way of a traversal of index #n extracting row ids only …
Tệp cuộn được tạo có chứa ID hàng được tìm thấy trong chỉ mục phụ (chỉ mục #n)
... we do a SMS (set manipulation step) …
Kết hợp các hàng bằng cách sử dụng toán tử UNION, MINUS hoặc INTERSECT.
... which is redistributed by hash code to all AMPs.
Phân phối lại dữ liệu để chuẩn bị tham gia.
... which is duplicated on all AMPs.
Sao chép dữ liệu từ bảng nhỏ hơn (về SPOOL) để chuẩn bị tham gia.
... (one_AMP) or (group_AMPs)
Cho biết một AMP hoặc một tập hợp con AMP sẽ được sử dụng thay vì tất cả AMP.
Một hàng được chỉ định cho một AMP cụ thể dựa trên giá trị chỉ mục chính. Teradata sử dụng thuật toán băm để xác định AMP lấy hàng.
Sau đây là một sơ đồ cấp cao về thuật toán băm.
Sau đây là các bước để chèn dữ liệu.
Khách hàng gửi một truy vấn.
Trình phân tích cú pháp nhận truy vấn và chuyển giá trị PI của bản ghi cho thuật toán băm.
Thuật toán băm băm giá trị chỉ mục chính và trả về một số 32 bit, được gọi là Row Hash.
Các bit bậc cao hơn của băm hàng (16 bit đầu tiên) được sử dụng để xác định mục nhập bản đồ băm. Bản đồ băm chứa một AMP #. Bản đồ băm là một mảng các nhóm chứa AMP # cụ thể.
BYNET gửi dữ liệu đến AMP đã xác định.
AMP sử dụng băm Hàng 32 bit để định vị hàng trong đĩa của nó.
Nếu có bất kỳ bản ghi nào có cùng một băm hàng, thì nó sẽ tăng ID duy nhất là một số 32 bit. Đối với băm hàng mới, ID duy nhất được gán là 1 và tăng lên bất cứ khi nào một bản ghi có cùng hàm băm được chèn vào.
Sự kết hợp của băm hàng và ID duy nhất được gọi là ID hàng.
ID hàng đặt trước mỗi bản ghi trong đĩa.
Mỗi hàng trong bảng trong AMP được sắp xếp hợp lý theo ID hàng của chúng.
Cách các bảng được lưu trữ
Các bảng được sắp xếp theo ID hàng (băm hàng + id duy nhất) và sau đó được lưu trữ trong AMP. ID hàng được lưu trữ với mỗi hàng dữ liệu.
Hàng băm | ID tính duy nhất | Nhân viên Không | Tên đầu tiên | LastName |
---|---|---|---|---|
2A01 2611 | 0000 0001 | 101 | Mike | James |
2A01 2612 | 0000 0001 | 104 | Alex | Stuart |
2A01 2613 | 0000 0001 | 102 | Robert | Williams |
2A01 2614 | 0000 0001 | 105 | Robert | James |
2A01 2615 | 0000 0001 | 103 | Peter | Paul |
JOIN INDEX là một dạng xem vật thể hóa. Định nghĩa của nó được lưu trữ vĩnh viễn và dữ liệu được cập nhật bất cứ khi nào các bảng cơ sở được tham chiếu trong chỉ mục nối được cập nhật. JOIN INDEX có thể chứa một hoặc nhiều bảng và cũng chứa dữ liệu được tổng hợp trước. Chỉ mục tham gia chủ yếu được sử dụng để cải thiện hiệu suất.
Có nhiều loại chỉ mục tham gia khác nhau có sẵn.
- Chỉ số tham gia bảng đơn (STJI)
- Chỉ số tham gia nhiều bảng (MTJI)
- Chỉ số tham gia tổng hợp (AJI)
Chỉ mục tham gia bảng đơn
Chỉ mục Nối bảng đơn cho phép phân vùng một bảng lớn dựa trên các cột chỉ mục chính khác với cột chỉ mục từ bảng cơ sở.
Cú pháp
Sau đây là cú pháp của một INDEX JOIN.
CREATE JOIN INDEX <index name>
AS
<SELECT Query>
<Index Definition>;
Thí dụ
Hãy xem xét các bảng Nhân viên và Lương sau đây.
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30) ,
LastName VARCHAR(30) ,
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo )
UNIQUE INDEX (EmployeeNo);
Sau đây là một ví dụ tạo chỉ mục Tham gia có tên Employee_JI trên bảng Employee.
CREATE JOIN INDEX Employee_JI
AS
SELECT EmployeeNo,FirstName,LastName,
BirthDate,JoinedDate,DepartmentNo
FROM Employee
PRIMARY INDEX(FirstName);
Nếu người dùng gửi truy vấn với mệnh đề WHERE trên EmployeeNo, thì hệ thống sẽ truy vấn bảng Nhân viên bằng cách sử dụng chỉ mục chính duy nhất. Nếu người dùng truy vấn bảng nhân viên bằng tên worker_name, thì hệ thống có thể truy cập chỉ mục tham gia Employee_JI bằng cách sử dụng tên_nhân_vân. Các hàng của chỉ mục kết hợp được băm trên cột tên_nhân_viên. Nếu chỉ mục tham gia không được xác định và tên_người_việc không được xác định là chỉ mục phụ, thì hệ thống sẽ thực hiện quét toàn bộ bảng để truy cập các hàng tốn thời gian.
Bạn có thể chạy kế hoạch GIẢI THÍCH sau và xác minh kế hoạch trình tối ưu hóa. Trong ví dụ sau, bạn có thể thấy rằng trình tối ưu hóa đang sử dụng Chỉ mục tham gia thay vì bảng Nhân viên cơ sở khi bảng truy vấn bằng cột Tên nhân viên.
EXPLAIN SELECT * FROM EMPLOYEE WHERE FirstName='Mike';
*** Help information returned. 8 rows.
*** Total elapsed time was 1 second.
Explanation
------------------------------------------------------------------------
1) First, we do a single-AMP RETRIEVE step from EMPLOYEE_JI by
way of the primary index "EMPLOYEE_JI.FirstName = 'Mike'"
with no residual conditions into Spool 1 (one-amp), which is built
locally on that AMP. The size of Spool 1 is estimated with low
confidence to be 2 rows (232 bytes). The estimated time for this
step is 0.02 seconds.
→ The contents of Spool 1 are sent back to the user as the result of
statement 1. The total estimated time is 0.02 seconds.
Chỉ mục tham gia nhiều bảng
Chỉ mục tham gia nhiều bảng được tạo bằng cách tham gia nhiều bảng. Chỉ mục tham gia nhiều bảng có thể được sử dụng để lưu trữ tập hợp kết quả của các bảng được tham gia thường xuyên để cải thiện hiệu suất.
Thí dụ
Ví dụ sau tạo một JOIN INDEX có tên Employee_Salary_JI bằng cách tham gia các bảng Nhân viên và Lương.
CREATE JOIN INDEX Employee_Salary_JI
AS
SELECT a.EmployeeNo,a.FirstName,a.LastName,
a.BirthDate,a.JoinedDate,a.DepartmentNo,b.Gross,b.Deduction,b.NetPay
FROM Employee a
INNER JOIN Salary b
ON(a.EmployeeNo = b.EmployeeNo)
PRIMARY INDEX(FirstName);
Bất cứ khi nào bảng cơ sở Nhân viên hoặc Lương được cập nhật, thì chỉ mục Tham gia Employee_Salary_JI cũng được cập nhật tự động. Nếu bạn đang chạy một truy vấn tham gia các bảng Nhân viên và Lương, thì trình tối ưu hóa có thể chọn truy cập trực tiếp dữ liệu từ Employee_Salary_JI thay vì tham gia các bảng. Kế hoạch GIẢI THÍCH trên truy vấn có thể được sử dụng để xác minh xem trình tối ưu hóa sẽ chọn bảng cơ sở hoặc Tham gia chỉ mục.
Chỉ mục tham gia tổng hợp
Nếu một bảng được tổng hợp nhất quán trên các cột nhất định, thì chỉ số kết hợp tổng hợp có thể được xác định trên bảng để cải thiện hiệu suất. Một hạn chế của chỉ mục kết hợp tổng hợp là nó chỉ hỗ trợ các hàm SUM và COUNT.
Thí dụ
Trong ví dụ sau, Nhân viên và Tiền lương được kết hợp để xác định tổng mức lương cho mỗi Bộ phận.
CREATE JOIN INDEX Employee_Salary_JI
AS
SELECT a.DepartmentNo,SUM(b.NetPay) AS TotalPay
FROM Employee a
INNER JOIN Salary b
ON(a.EmployeeNo = b.EmployeeNo)
GROUP BY a.DepartmentNo
Primary Index(DepartmentNo);
Dạng xem là các đối tượng cơ sở dữ liệu được xây dựng bởi truy vấn. Chế độ xem có thể được tạo bằng cách sử dụng một bảng hoặc nhiều bảng bằng cách nối. Định nghĩa của chúng được lưu trữ vĩnh viễn trong từ điển dữ liệu nhưng chúng không lưu trữ bản sao của dữ liệu. Dữ liệu cho chế độ xem được tạo động.
Một dạng xem có thể chứa một tập hợp con các hàng của bảng hoặc một tập hợp con các cột của bảng.
Tạo chế độ xem
Chế độ xem được tạo bằng câu lệnh CREATE VIEW.
Cú pháp
Sau đây là cú pháp để tạo một khung nhìn.
CREATE/REPLACE VIEW <viewname>
AS
<select query>;
Thí dụ
Hãy xem xét bảng Nhân viên sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày sinh |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
Ví dụ sau đây tạo một dạng xem trên bảng Nhân viên.
CREATE VIEW Employee_View
AS
SELECT
EmployeeNo,
FirstName,
LastName,
FROM
Employee;
Sử dụng Chế độ xem
Bạn có thể sử dụng câu lệnh SELECT thông thường để lấy dữ liệu từ Chế độ xem.
Thí dụ
Ví dụ sau lấy các bản ghi từ Employee_View;
SELECT EmployeeNo, FirstName, LastName FROM Employee_View;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName LastName
----------- ------------------------------ ---------------------------
101 Mike James
104 Alex Stuart
102 Robert Williams
105 Robert James
103 Peter Paul
Sửa đổi chế độ xem
Chế độ xem hiện có có thể được sửa đổi bằng cách sử dụng câu lệnh REPLACE VIEW.
Sau đây là cú pháp để sửa đổi một dạng xem.
REPLACE VIEW <viewname>
AS
<select query>;
Thí dụ
Ví dụ sau sửa đổi chế độ xem Employee_View để thêm các cột bổ sung.
REPLACE VIEW Employee_View
AS
SELECT
EmployeeNo,
FirstName,
BirthDate,
JoinedDate
DepartmentNo
FROM
Employee;
Drop View
Chế độ xem hiện có có thể bị loại bỏ bằng cách sử dụng câu lệnh DROP VIEW.
Cú pháp
Sau đây là cú pháp của DROP VIEW.
DROP VIEW <viewname>;
Thí dụ
Sau đây là một ví dụ để bỏ chế độ xem Employee_View.
DROP VIEW Employee_View;
Ưu điểm của Chế độ xem
Chế độ xem cung cấp mức độ bảo mật bổ sung bằng cách hạn chế các hàng hoặc cột của bảng.
Người dùng chỉ có thể được cấp quyền truy cập vào các khung nhìn thay vì các bảng cơ sở.
Đơn giản hóa việc sử dụng nhiều bảng bằng cách nối trước chúng bằng Chế độ xem.
Macro là một tập hợp các câu lệnh SQL được lưu trữ và thực thi bằng cách gọi tên Macro. Định nghĩa về Macro được lưu trữ trong Từ điển dữ liệu. Người dùng chỉ cần đặc quyền EXEC để thực thi Macro. Người dùng không cần các đặc quyền riêng biệt trên các đối tượng cơ sở dữ liệu được sử dụng bên trong Macro. Các câu lệnh macro được thực hiện như một giao dịch duy nhất. Nếu một trong các câu lệnh SQL trong Macro bị lỗi, thì tất cả các câu lệnh sẽ được khôi phục lại. Macro có thể chấp nhận các tham số. Macro có thể chứa các câu lệnh DDL, nhưng đó phải là câu lệnh cuối cùng trong Macro.
Tạo Macro
Macro được tạo bằng cách sử dụng câu lệnh CREATE MACRO.
Cú pháp
Sau đây là cú pháp chung của lệnh CREATE MACRO.
CREATE MACRO <macroname> [(parameter1, parameter2,...)] (
<sql statements>
);
Thí dụ
Hãy xem xét bảng Nhân viên sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày sinh |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
Ví dụ sau đây tạo một Macro có tên là Get_Emp. Nó chứa một câu lệnh select để lấy các bản ghi từ bảng nhân viên.
CREATE MACRO Get_Emp AS (
SELECT
EmployeeNo,
FirstName,
LastName
FROM
employee
ORDER BY EmployeeNo;
);
Thực thi Macro
Macro được thực thi bằng lệnh EXEC.
Cú pháp
Sau đây là cú pháp của lệnh EXECUTE MACRO.
EXEC <macroname>;
Thí dụ
Ví dụ sau đây thực thi các tên Macro Get_Emp; Khi lệnh sau được thực hiện, nó lấy tất cả các bản ghi từ bảng nhân viên.
EXEC Get_Emp;
*** Query completed. 5 rows found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName LastName
----------- ------------------------------ ---------------------------
101 Mike James
102 Robert Williams
103 Peter Paul
104 Alex Stuart
105 Robert James
Macro được tham số hóa
Macro Teradata có thể chấp nhận các tham số. Trong Macro, các tham số này được tham chiếu với; (dấu chấm phẩy).
Sau đây là một ví dụ về Macro chấp nhận các tham số.
CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS (
SELECT
EmployeeNo,
NetPay
FROM
Salary
WHERE EmployeeNo = :EmployeeNo;
);
Thực thi Macro tham số hóa
Macro được thực thi bằng lệnh EXEC. Bạn cần đặc quyền EXEC để thực thi Macro.
Cú pháp
Sau đây là cú pháp của câu lệnh EXECUTE MACRO.
EXEC <macroname>(value);
Thí dụ
Ví dụ sau đây thực thi các tên Macro Get_Emp; Nó chấp nhận nhân viên không làm tham số và trích xuất các bản ghi từ bảng nhân viên cho nhân viên đó.
EXEC Get_Emp_Salary(101);
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo NetPay
----------- ------------
101 36000
Một thủ tục được lưu trữ chứa một tập hợp các câu lệnh SQL và các câu lệnh thủ tục. Chúng có thể chỉ chứa các câu lệnh thủ tục. Định nghĩa của thủ tục được lưu trữ được lưu trữ trong cơ sở dữ liệu và các tham số được lưu trữ trong các bảng từ điển dữ liệu.
Ưu điểm
Các thủ tục được lưu trữ giúp giảm tải mạng giữa máy khách và máy chủ.
Cung cấp bảo mật tốt hơn vì dữ liệu được truy cập thông qua các thủ tục được lưu trữ thay vì truy cập trực tiếp.
Cung cấp khả năng bảo trì tốt hơn vì logic nghiệp vụ được kiểm tra và lưu trữ trong máy chủ.
Tạo thủ tục
Các thủ tục được lưu trữ được tạo bằng cách sử dụng câu lệnh CREATE PROCEDURE.
Cú pháp
Sau đây là cú pháp chung của câu lệnh CREATE PROCEDURE.
CREATE PROCEDURE <procedurename> ( [parameter 1 data type, parameter 2 data type..] )
BEGIN
<SQL or SPL statements>;
END;
Thí dụ
Hãy xem xét Bảng lương sau đây.
Nhân viên Không | Tổng | Khấu trừ | NetPay |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
Ví dụ sau đây tạo một thủ tục được lưu trữ có tên InsertSalary để chấp nhận các giá trị và chèn vào Bảng lương.
CREATE PROCEDURE InsertSalary (
IN in_EmployeeNo INTEGER, IN in_Gross INTEGER,
IN in_Deduction INTEGER, IN in_NetPay INTEGER
)
BEGIN
INSERT INTO Salary (
EmployeeNo,
Gross,
Deduction,
NetPay
)
VALUES (
:in_EmployeeNo,
:in_Gross,
:in_Deduction,
:in_NetPay
);
END;
Các thủ tục thực thi
Các thủ tục được lưu trữ được thực thi bằng câu lệnh CALL.
Cú pháp
Sau đây là cú pháp chung của câu lệnh CALL.
CALL <procedure name> [(parameter values)];
Thí dụ
Ví dụ sau gọi thủ tục được lưu trữ InsertSalary và chèn các bản ghi vào Bảng lương.
CALL InsertSalary(105,20000,2000,18000);
Khi truy vấn trên được thực thi, nó sẽ tạo ra kết quả sau và bạn có thể thấy hàng được chèn trong bảng Lương.
Nhân viên Không | Tổng | Khấu trừ | NetPay |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
105 | 20.000 | 2.000 | 18.000 |
Chương này thảo luận về các chiến lược THAM GIA khác nhau có sẵn trong Teradata.
Tham gia các phương pháp
Teradata sử dụng các phương thức nối khác nhau để thực hiện các thao tác nối. Một số phương pháp nối thường được sử dụng là:
- Hợp nhất Tham gia
- Tham gia lồng nhau
- Tham gia sản phẩm
Hợp nhất Tham gia
Phương thức kết hợp kết hợp diễn ra khi phép nối dựa trên điều kiện bình đẳng. Hợp nhất Tham gia yêu cầu các hàng kết hợp trên cùng một AMP. Các hàng được nối dựa trên hàm băm hàng của chúng. Kết hợp Tham gia sử dụng các chiến lược kết hợp khác nhau để đưa các hàng về cùng một AMP.
Chiến lược số 1
Nếu các cột kết hợp là chỉ mục chính của các bảng tương ứng, thì các hàng tham gia đã nằm trên cùng một AMP. Trong trường hợp này, không cần phân phối.
Hãy xem xét các Bảng Nhân viên và Lương sau đây.
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30) ,
LastName VARCHAR(30) ,
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE Salary (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
UNIQUE PRIMARY INDEX(EmployeeNo);
Khi hai bảng này được kết hợp trên cột EmployeeNo, thì không có sự phân phối lại nào diễn ra vì EmployeeNo là chỉ mục chính của cả hai bảng đang được nối.
Chiến lược số 2
Hãy xem xét các bảng Nhân viên và Bộ phận sau đây.
CREATE SET TABLE EMPLOYEE,FALLBACK (
EmployeeNo INTEGER,
FirstName VARCHAR(30) ,
LastName VARCHAR(30) ,
DOB DATE FORMAT 'YYYY-MM-DD',
JoinedDate DATE FORMAT 'YYYY-MM-DD',
DepartmentNo BYTEINT
)
UNIQUE PRIMARY INDEX ( EmployeeNo );
CREATE SET TABLE DEPARTMENT,FALLBACK (
DepartmentNo BYTEINT,
DepartmentName CHAR(15)
)
UNIQUE PRIMARY INDEX ( DepartmentNo );
Nếu hai bảng này được nối trên cột DeparmentNo, thì các hàng cần phải được phân phối lại vì DepartmentNo là chỉ mục chính trong một bảng và không phải chỉ mục chính trong bảng khác. Trong trường hợp này, việc nối các hàng có thể không trên cùng một AMP. Trong trường hợp đó, Teradata có thể phân phối lại bảng nhân viên trên cột DepartmentNo.
Chiến lược số 3
Đối với các bảng Nhân viên và Bộ phận ở trên, Teradata có thể sao chép bảng Bộ phận trên tất cả các AMP, nếu kích thước của bảng Bộ phận nhỏ.
Tham gia lồng nhau
Tham gia lồng nhau không sử dụng tất cả các AMP. Để Nối lồng nhau diễn ra, một trong những điều kiện phải là bằng nhau trên chỉ mục chính duy nhất của một bảng và sau đó nối cột này với bất kỳ chỉ mục nào trên bảng khác.
Trong trường hợp này, hệ thống sẽ tìm nạp một hàng bằng cách sử dụng chỉ mục Chính duy nhất của một bảng và sử dụng hàm băm của hàng đó để tìm nạp các bản ghi phù hợp từ bảng khác. Phép nối lồng nhau là phương thức hiệu quả nhất trong số tất cả các phương thức Nối.
Tham gia sản phẩm
Tham gia sản phẩm so sánh mỗi hàng đủ điều kiện từ một bảng với mỗi hàng đủ điều kiện từ bảng khác. Tham gia sản phẩm có thể diễn ra do một số yếu tố sau:
- Nơi thiếu điều kiện.
- Điều kiện tham gia không dựa trên điều kiện bình đẳng.
- Bí danh bảng không chính xác.
- Nhiều điều kiện tham gia.
Chỉ mục chính được phân vùng (PPI) là một cơ chế lập chỉ mục hữu ích trong việc cải thiện hiệu suất của một số truy vấn nhất định. Khi các hàng được chèn vào bảng, chúng được lưu trữ trong AMP và được sắp xếp theo thứ tự băm hàng của chúng. Khi một bảng được xác định bằng PPI, các hàng được sắp xếp theo số phân vùng của chúng. Trong mỗi phân vùng, chúng được sắp xếp theo hàm băm hàng của chúng. Các hàng được gán cho một phân vùng dựa trên biểu thức phân vùng được xác định.
Ưu điểm
Tránh quét toàn bộ bảng cho các truy vấn nhất định.
Tránh sử dụng chỉ mục phụ yêu cầu cấu trúc vật lý bổ sung và bảo trì I / O bổ sung.
Truy cập một tập hợp con của một bảng lớn một cách nhanh chóng.
Bỏ dữ liệu cũ nhanh chóng và thêm dữ liệu mới.
Thí dụ
Hãy xem xét bảng Đơn hàng sau với Chỉ mục chính trên OrderNo.
StoreNo | OrderNo | Ngày đặt hàng | OrderTotal |
---|---|---|---|
101 | 7501 | 2015-10-01 | 900 |
101 | 7502 | 2015-10-02 | 1.200 |
102 | 7503 | 2015-10-02 | 3.000 |
102 | 7504 | 2015-10-03 | 2.454 |
101 | 7505 | 2015-10-03 | 1201 |
103 | 7506 | 2015-10-04 | 2.454 |
101 | 7507 | 2015-10-05 | 1201 |
101 | 7508 | 2015-10-05 | 1201 |
Giả sử rằng các bản ghi được phân phối giữa các AMP như được hiển thị trong các bảng sau. Bản ghi được lưu trữ trong AMP, được sắp xếp dựa trên băm hàng của chúng.
RowHash | OrderNo | Ngày đặt hàng |
---|---|---|
1 | 7505 | 2015-10-03 |
2 | 7504 | 2015-10-03 |
3 | 7501 | 2015-10-01 |
4 | 7508 | 2015-10-05 |
RowHash | OrderNo | Ngày đặt hàng |
---|---|---|
1 | 7507 | 2015-10-05 |
2 | 7502 | 2015-10-02 |
3 | 7506 | 2015-10-04 |
4 | 7503 | 2015-10-02 |
Nếu bạn chạy truy vấn để trích xuất các đơn đặt hàng cho một ngày cụ thể, thì trình tối ưu hóa có thể chọn sử dụng Quét toàn bảng, sau đó tất cả các bản ghi trong AMP có thể được truy cập. Để tránh điều này, bạn có thể xác định ngày đặt hàng là Chỉ mục chính được phân vùng. Khi các hàng được chèn vào bảng đơn hàng, chúng được phân vùng theo ngày đặt hàng. Trong mỗi phân vùng, chúng sẽ được sắp xếp theo hàm băm hàng của chúng.
Dữ liệu sau đây cho biết cách các bản ghi sẽ được lưu trữ trong AMP, nếu chúng được phân vùng theo Ngày đặt hàng. Nếu một truy vấn được chạy để truy cập các bản ghi theo Ngày đặt hàng, thì chỉ phân vùng chứa các bản ghi cho thứ tự cụ thể đó mới được truy cập.
Vách ngăn | RowHash | OrderNo | Ngày đặt hàng |
---|---|---|---|
0 | 3 | 7501 | 2015-10-01 |
1 | 1 | 7505 | 2015-10-03 |
1 | 2 | 7504 | 2015-10-03 |
2 | 4 | 7508 | 2015-10-05 |
Vách ngăn | RowHash | OrderNo | Ngày đặt hàng |
---|---|---|---|
0 | 2 | 7502 | 2015-10-02 |
0 | 4 | 7503 | 2015-10-02 |
1 | 3 | 7506 | 2015-10-04 |
2 | 1 | 7507 | 2015-10-05 |
Sau đây là một ví dụ để tạo một bảng với chỉ mục chính của phân vùng. Mệnh đề PARTITION BY được sử dụng để định nghĩa phân vùng.
CREATE SET TABLE Orders (
StoreNo SMALLINT,
OrderNo INTEGER,
OrderDate DATE FORMAT 'YYYY-MM-DD',
OrderTotal INTEGER
)
PRIMARY INDEX(OrderNo)
PARTITION BY RANGE_N (
OrderDate BETWEEN DATE '2010-01-01' AND '2016-12-31' EACH INTERVAL '1' DAY
);
Trong ví dụ trên, bảng được phân vùng theo cột OrderDate. Sẽ có một phân vùng riêng biệt cho mỗi ngày.
Các hàm OLAP tương tự như các hàm tổng hợp ngoại trừ việc các hàm tổng hợp sẽ chỉ trả về một giá trị trong khi hàm OLAP sẽ cung cấp các hàng riêng lẻ ngoài các tổng hợp.
Cú pháp
Sau đây là cú pháp chung của hàm OLAP.
<aggregate function> OVER
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)
Các hàm tổng hợp có thể là SUM, COUNT, MAX, MIN, AVG.
Thí dụ
Hãy xem xét bảng lương sau đây.
Nhân viên Không | Tổng | Khấu trừ | NetPay |
---|---|---|---|
101 | 40.000 | 4.000 | 36.000 |
102 | 80.000 | 6.000 | 74.000 |
103 | 90.000 | 7.000 | 83.000 |
104 | 75.000 | 5.000 | 70.000 |
Sau đây là một ví dụ để tìm tổng tích lũy hoặc tổng hoạt động của NetPay trên bảng Lương. Các bản ghi được sắp xếp theo EmployeeNo và tổng tích lũy được tính trên cột NetPay.
SELECT
EmployeeNo, NetPay,
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS
UNBOUNDED PRECEDING) as TotalSalary
FROM Salary;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
EmployeeNo NetPay TotalSalary
----------- ----------- -----------
101 36000 36000
102 74000 110000
103 83000 193000
104 70000 263000
105 18000 281000
CẤP
Hàm RANK sắp xếp thứ tự các bản ghi dựa trên cột được cung cấp. Hàm RANK cũng có thể lọc số lượng bản ghi được trả về dựa trên thứ hạng.
Cú pháp
Sau đây là cú pháp chung để sử dụng hàm RANK.
RANK() OVER
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])
Thí dụ
Hãy xem xét bảng Nhân viên sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày tham gia | DepartmentID | Ngày sinh |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
102 | Robert | Williams | 25/4/2007 | 2 | 3/5/1983 |
103 | Peter | Paul | 21/3/2007 | 2 | 4/1/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 11/6/1984 |
105 | Robert | James | 1/4/2008 | 3 | 12/1/1984 |
Truy vấn sau sắp xếp các bản ghi của bảng nhân viên theo Ngày tham gia và ấn định xếp hạng vào Ngày tham gia.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(ORDER BY JoinedDate) as Seniority
FROM Employee;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau.
EmployeeNo JoinedDate Seniority
----------- ---------- -----------
101 2005-03-27 1
103 2007-03-21 2
102 2007-04-25 3
105 2008-01-04 4
104 2008-02-01 5
Mệnh đề PARTITION BY nhóm dữ liệu theo các cột được xác định trong mệnh đề PARTITION BY và thực hiện chức năng OLAP trong mỗi nhóm. Sau đây là một ví dụ về truy vấn sử dụng mệnh đề PARTITION BY.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority
FROM Employee;
Khi truy vấn trên được thực thi, nó tạo ra kết quả sau. Bạn có thể thấy rằng Xếp hạng được đặt lại cho từng Bộ phận.
EmployeeNo DepartmentNo JoinedDate Seniority
----------- ------------ ---------- -----------
101 1 2005-03-27 1
103 2 2007-03-21 1
102 2 2007-04-25 2
104 2 2008-02-01 3
105 3 2008-01-04 1
Chương này thảo luận về các tính năng có sẵn để bảo vệ dữ liệu trong Teradata.
Nhật ký thoáng qua
Teradata sử dụng Nhật ký tạm thời để bảo vệ dữ liệu khỏi các lỗi giao dịch. Bất cứ khi nào bất kỳ giao dịch nào được chạy, Nhật ký tạm thời sẽ giữ một bản sao của hình ảnh trước của các hàng bị ảnh hưởng cho đến khi giao dịch thành công hoặc khôi phục thành công. Sau đó, những hình ảnh trước đó sẽ bị loại bỏ. Nhật ký tạm thời được giữ trong mỗi AMP. Nó là một quá trình tự động và không thể bị vô hiệu hóa.
Dự phòng
Dự phòng bảo vệ dữ liệu bảng bằng cách lưu trữ bản sao thứ hai của các hàng trong bảng trên một AMP khác được gọi là AMP dự phòng. Nếu một AMP không thành công, thì các hàng dự phòng sẽ được truy cập. Với điều này, ngay cả khi một AMP bị lỗi, dữ liệu vẫn có sẵn thông qua AMP dự phòng. Tùy chọn dự phòng có thể được sử dụng khi tạo bảng hoặc sau khi tạo bảng. Dự phòng đảm bảo rằng bản sao thứ hai của các hàng trong bảng luôn được lưu trữ trong một AMP khác để bảo vệ dữ liệu khỏi lỗi AMP. Tuy nhiên, dự phòng chiếm gấp đôi dung lượng lưu trữ và I / O cho Chèn / Xóa / Cập nhật.
Sơ đồ sau đây cho thấy cách bản sao dự phòng của các hàng được lưu trữ trong một AMP khác.
Xuống nhật ký khôi phục AMP
Nhật ký khôi phục AMP Down được kích hoạt khi AMP bị lỗi và bảng được bảo vệ dự phòng. Tạp chí này theo dõi tất cả các thay đổi đối với dữ liệu của AMP bị lỗi. Tạp chí được kích hoạt trên các AMP còn lại trong cụm. Nó là một quá trình tự động và không thể bị vô hiệu hóa. Khi AMP bị lỗi hoạt động thì dữ liệu từ tạp chí khôi phục AMP Down sẽ được đồng bộ hóa với AMP. Sau khi hoàn thành việc này, tạp chí sẽ bị loại bỏ.
Cliques
Clique là một cơ chế được Teradata sử dụng để bảo vệ dữ liệu khỏi lỗi Node. Một nhóm không là gì khác ngoài một tập hợp các nút Teradata chia sẻ một tập hợp Mảng đĩa chung. Khi một nút bị lỗi, thì các vprocs từ nút bị lỗi sẽ di chuyển đến các nút khác trong nhóm và tiếp tục truy cập các mảng đĩa của chúng.
Nút chờ nóng
Hot Standby Node là một nút không tham gia vào môi trường sản xuất. Nếu một nút bị lỗi thì vprocs từ các nút bị lỗi sẽ di chuyển sang nút chờ nóng. Khi nút bị lỗi được khôi phục, nó sẽ trở thành nút chờ nóng. Các nút Hot Standby được sử dụng để duy trì hiệu suất trong trường hợp nút bị lỗi.
RAID
Mảng dự phòng của đĩa độc lập (RAID) là một cơ chế được sử dụng để bảo vệ dữ liệu khỏi lỗi Đĩa. Mảng đĩa bao gồm một tập hợp các đĩa được nhóm lại thành một đơn vị logic. Đơn vị này có thể trông giống như một đơn vị duy nhất đối với người dùng nhưng chúng có thể nằm rải rác trên nhiều đĩa.
RAID 1 thường được sử dụng trong Teradata. Trong RAID 1, mỗi đĩa được liên kết với một đĩa nhân bản. Bất kỳ thay đổi nào đối với dữ liệu trong đĩa chính cũng được phản ánh trong bản sao nhân bản. Nếu đĩa chính bị lỗi, thì dữ liệu từ đĩa nhân bản có thể được truy cập.
Chương này đã thảo luận về các chiến lược quản lý người dùng khác nhau trong Teradata.
Người dùng
Người dùng được tạo bằng lệnh CREATE USER. Trong Teradata, một người dùng cũng tương tự như một cơ sở dữ liệu. Cả hai đều có thể được gán không gian và chứa các đối tượng cơ sở dữ liệu ngoại trừ việc người dùng được gán mật khẩu.
Cú pháp
Sau đây là cú pháp để TẠO NGƯỜI DÙNG.
CREATE USER username
AS
[PERMANENT|PERM] = n BYTES
PASSWORD = password
TEMPORARY = n BYTES
SPOOL = n BYTES;
Trong khi tạo người dùng, các giá trị cho tên người dùng, Không gian vĩnh viễn và Mật khẩu là bắt buộc. Các trường khác là tùy chọn.
Thí dụ
Sau đây là một ví dụ để tạo người dùng TD01.
CREATE USER TD01
AS
PERMANENT = 1000000 BYTES
PASSWORD = ABC$124
TEMPORARY = 1000000 BYTES
SPOOL = 1000000 BYTES;
Tài khoản
Trong khi tạo người dùng mới, người dùng có thể được chỉ định cho một tài khoản. Tùy chọn TÀI KHOẢN trong TẠO NGƯỜI DÙNG được sử dụng để chỉ định tài khoản. Một người dùng có thể được chỉ định cho nhiều tài khoản.
Cú pháp
Sau đây là cú pháp cho tùy chọn TẠO NGƯỜI DÙNG với tài khoản.
CREATE USER username
PERM = n BYTES
PASSWORD = password
ACCOUNT = accountid
Thí dụ
Ví dụ sau đây tạo người dùng TD02 và chỉ định tài khoản là IT và Admin.
CREATE USER TD02
AS
PERMANENT = 1000000 BYTES
PASSWORD = abc$123
TEMPORARY = 1000000 BYTES
SPOOL = 1000000 BYTES
ACCOUNT = (‘IT’,’Admin’);
Người dùng có thể chỉ định id tài khoản khi đăng nhập vào hệ thống Teradata hoặc sau khi đăng nhập vào hệ thống bằng lệnh SET SESSION.
.LOGON username, passowrd,accountid
OR
SET SESSION ACCOUNT = accountid
Cấp đặc quyền
Lệnh GRANT được sử dụng để gán một hoặc nhiều đặc quyền trên các đối tượng cơ sở dữ liệu cho người dùng hoặc cơ sở dữ liệu.
Cú pháp
Sau đây là cú pháp của lệnh GRANT.
GRANT privileges ON objectname TO username;
Các đặc quyền có thể CHÈN, CHỌN, CẬP NHẬT, TÀI LIỆU THAM KHẢO.
Thí dụ
Sau đây là một ví dụ về câu lệnh GRANT.
GRANT SELECT,INSERT,UPDATE ON Employee TO TD01;
Thu hồi đặc quyền
Lệnh REVOKE loại bỏ các đặc quyền khỏi người dùng hoặc cơ sở dữ liệu. Lệnh REVOKE chỉ có thể xóa các đặc quyền rõ ràng.
Cú pháp
Sau đây là cú pháp cơ bản cho lệnh REVOKE.
REVOKE [ALL|privileges] ON objectname FROM username;
Thí dụ
Sau đây là một ví dụ về lệnh REVOKE.
REVOKE INSERT,SELECT ON Employee FROM TD01;
Chương này thảo luận về quy trình điều chỉnh hiệu suất trong Teradata.
Giải thích
Bước đầu tiên trong việc điều chỉnh hiệu suất là sử dụng EXPLAIN trên truy vấn của bạn. Kế hoạch EXPLAIN cung cấp chi tiết về cách trình tối ưu hóa sẽ thực thi truy vấn của bạn. Trong kế hoạch Giải thích, hãy kiểm tra các từ khóa như mức độ tin cậy, chiến lược tham gia được sử dụng, kích thước tệp cuộn, phân phối lại, v.v.
Thu thập số liệu thống kê
Trình tối ưu hóa sử dụng nhân khẩu học Dữ liệu để đưa ra chiến lược thực thi hiệu quả. Lệnh COLLECT STATISTICS được sử dụng để thu thập dữ liệu nhân khẩu học của bảng. Đảm bảo rằng thống kê được thu thập trên các cột được cập nhật.
Thu thập thống kê về các cột được sử dụng trong mệnh đề WHERE và trên các cột được sử dụng trong điều kiện nối.
Thu thập thống kê trên các cột Chỉ mục chính duy nhất.
Thu thập số liệu thống kê về các cột Chỉ mục phụ Trình tối ưu hóa sẽ quyết định xem nó có thể sử dụng NUSI hoặc Full Table Scan.
Thu thập số liệu thống kê trên Chỉ số tham gia mặc dù số liệu thống kê trên bảng cơ sở được thu thập.
Thu thập số liệu thống kê về các cột phân vùng.
Loại dữ liệu
Đảm bảo rằng các kiểu dữ liệu thích hợp được sử dụng. Điều này sẽ tránh việc sử dụng quá nhiều dung lượng lưu trữ so với yêu cầu.
Chuyển đổi
Đảm bảo rằng các loại dữ liệu của các cột được sử dụng trong điều kiện kết hợp tương thích để tránh chuyển đổi dữ liệu rõ ràng.
Sắp xếp
Loại bỏ các mệnh đề ORDER BY không cần thiết trừ khi được yêu cầu.
Vấn đề về bộ đệm
Lỗi không gian bộ đệm được tạo ra nếu truy vấn vượt quá giới hạn không gian bộ đệm cho mỗi người dùng đó. Xác minh kế hoạch giải thích và xác định bước tiêu tốn nhiều không gian ống chỉ hơn. Các truy vấn trung gian này có thể được tách ra và đặt riêng biệt để tạo các bảng tạm thời.
Chỉ mục chính
Đảm bảo rằng Chỉ mục chính được xác định chính xác cho bảng. Cột chỉ mục chính nên phân phối dữ liệu một cách đồng đều và nên được sử dụng thường xuyên để truy cập dữ liệu.
SET Bảng
Nếu bạn xác định bảng SET, thì trình tối ưu hóa sẽ kiểm tra xem bản ghi có trùng lặp đối với mỗi và mọi bản ghi được chèn hay không. Để loại bỏ điều kiện kiểm tra trùng lặp, bạn có thể xác định Chỉ mục phụ duy nhất cho bảng.
CẬP NHẬT trên Bàn Lớn
Cập nhật bảng lớn sẽ tốn thời gian. Thay vì cập nhật bảng, bạn có thể xóa các bản ghi và chèn các bản ghi với các hàng đã sửa đổi.
Bỏ bảng tạm thời
Bỏ các bảng tạm thời (bảng dàn) và chất bay hơi nếu chúng không còn cần thiết nữa. Điều này sẽ giải phóng không gian vĩnh viễn và không gian ống chỉ.
Bảng MULTISET
Nếu bạn chắc chắn rằng các bản ghi đầu vào sẽ không có các bản ghi trùng lặp, thì bạn có thể xác định bảng đích là bảng MULTISET để tránh kiểm tra hàng trùng lặp được sử dụng bởi bảng SET.
Tiện ích FastLoad được sử dụng để tải dữ liệu vào các bảng trống. Vì nó không sử dụng nhật ký tạm thời, dữ liệu có thể được tải nhanh chóng. Nó không tải các hàng trùng lặp ngay cả khi bảng đích là bảng MULTISET.
Giới hạn
Bảng mục tiêu không được có chỉ mục phụ, chỉ mục tham gia và tham chiếu khóa ngoại.
Cách hoạt động của FastLoad
FastLoad được thực hiện trong hai giai đoạn.
Giai đoạn 1
Các công cụ phân tích cú pháp đọc các bản ghi từ tệp đầu vào và gửi một khối đến mỗi AMP.
Mỗi AMP lưu trữ các khối bản ghi.
Sau đó, AMP sẽ băm từng bản ghi và phân phối lại chúng cho đúng AMP.
Vào cuối Giai đoạn 1, mỗi AMP có các hàng của nó nhưng chúng không nằm trong chuỗi băm hàng.
Giai đoạn 2
Giai đoạn 2 bắt đầu khi FastLoad nhận được câu lệnh END LOADING.
Mỗi AMP sắp xếp các bản ghi trên băm hàng và ghi chúng vào đĩa.
Các khóa trên bảng mục tiêu được giải phóng và các bảng lỗi bị loại bỏ.
Thí dụ
Tạo một tệp văn bản với các bản ghi sau và đặt tên tệp là worker.txt.
101,Mike,James,1980-01-05,2010-03-01,1
102,Robert,Williams,1983-03-05,2010-09-01,1
103,Peter,Paul,1983-04-01,2009-02-12,2
104,Alex,Stuart,1984-11-06,2014-01-01,2
105,Robert,James,1984-12-01,2015-03-09,3
Sau đây là một đoạn mã FastLoad mẫu để tải tệp trên vào bảng Employee_Stg.
LOGON 192.168.1.102/dbc,dbc;
DATABASE tduser;
BEGIN LOADING tduser.Employee_Stg
ERRORFILES Employee_ET, Employee_UV
CHECKPOINT 10;
SET RECORD VARTEXT ",";
DEFINE in_EmployeeNo (VARCHAR(10)),
in_FirstName (VARCHAR(30)),
in_LastName (VARCHAR(30)),
in_BirthDate (VARCHAR(10)),
in_JoinedDate (VARCHAR(10)),
in_DepartmentNo (VARCHAR(02)),
FILE = employee.txt;
INSERT INTO Employee_Stg (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
:in_EmployeeNo,
:in_FirstName,
:in_LastName,
:in_BirthDate (FORMAT 'YYYY-MM-DD'),
:in_JoinedDate (FORMAT 'YYYY-MM-DD'),
:in_DepartmentNo
);
END LOADING;
LOGOFF;
Thực thi một tập lệnh FastLoad
Sau khi tệp đầu vào Employee.txt được tạo và tập lệnh FastLoad được đặt tên là EmployeeLoad.fl, bạn có thể chạy tập lệnh FastLoad bằng lệnh sau trong UNIX và Windows.
FastLoad < EmployeeLoad.fl;
Khi lệnh trên được thực thi, tập lệnh FastLoad sẽ chạy và tạo ra nhật ký. Trong nhật ký, bạn có thể thấy số lượng bản ghi được FastLoad xử lý và mã trạng thái.
**** 03:19:14 END LOADING COMPLETE
Total Records Read = 5
Total Error Table 1 = 0 ---- Table has been dropped
Total Error Table 2 = 0 ---- Table has been dropped
Total Inserts Applied = 5
Total Duplicate Rows = 0
Start: Fri Jan 8 03:19:13 2016
End : Fri Jan 8 03:19:14 2016
**** 03:19:14 Application Phase statistics:
Elapsed time: 00:00:01 (in hh:mm:ss)
0008 LOGOFF;
**** 03:19:15 Logging off all sessions
Điều khoản FastLoad
Sau đây là danh sách các thuật ngữ phổ biến được sử dụng trong tập lệnh FastLoad.
LOGON - Đăng nhập vào Teradata và bắt đầu một hoặc nhiều phiên.
DATABASE - Đặt cơ sở dữ liệu mặc định.
BEGIN LOADING - Xác định bảng được tải.
ERRORFILES - Xác định 2 bảng lỗi cần được tạo / cập nhật.
CHECKPOINT - Xác định thời điểm đi điểm kiểm tra.
SET RECORD - Chỉ định xem định dạng tệp đầu vào là định dạng, nhị phân, văn bản hay không định dạng.
DEFINE - Xác định bố cục tệp đầu vào.
FILE - Chỉ định tên và đường dẫn tệp đầu vào.
INSERT - Chèn các bản ghi từ tệp đầu vào vào bảng đích.
END LOADING- Bắt đầu giai đoạn 2 của FastLoad. Phân phối các bản ghi vào bảng đích.
LOGOFF - Kết thúc tất cả các phiên và chấm dứt FastLoad.
MultiLoad có thể tải nhiều bảng cùng một lúc và nó cũng có thể thực hiện các loại tác vụ khác nhau như INSERT, DELETE, UPDATE và UPSERT. Nó có thể tải tối đa 5 bảng cùng một lúc và thực hiện tối đa 20 thao tác DML trong một tập lệnh. Bảng mục tiêu không bắt buộc đối với MultiLoad.
MultiLoad hỗ trợ hai chế độ -
- IMPORT
- DELETE
MultiLoad yêu cầu một bảng làm việc, một bảng nhật ký và hai bảng lỗi ngoài bảng đích.
Log Table - Được sử dụng để duy trì các điểm kiểm tra được thực hiện trong quá trình tải sẽ được sử dụng để khởi động lại.
Error Tables- Các bảng này được chèn trong quá trình tải khi xảy ra lỗi. Bảng lỗi đầu tiên lưu trữ các lỗi chuyển đổi trong khi bảng lỗi thứ hai lưu trữ các bản ghi trùng lặp.
Log Table - Duy trì kết quả từ mỗi giai đoạn của MultiLoad cho mục đích khởi động lại.
Work table- MultiLoad script tạo một bảng làm việc cho mỗi bảng đích. Bảng công việc được sử dụng để giữ các tác vụ DML và dữ liệu đầu vào.
Giới hạn
MultiLoad có một số hạn chế.
- Chỉ mục phụ duy nhất không được hỗ trợ trên bảng mục tiêu.
- Tính toàn vẹn tham chiếu không được hỗ trợ.
- Trình kích hoạt không được hỗ trợ.
Cách hoạt động của MultiLoad
Nhập MultiLoad có năm giai đoạn -
Phase 1 - Giai đoạn sơ bộ - Thực hiện các hoạt động thiết lập cơ bản.
Phase 2 - Giai đoạn Giao dịch DML - Xác minh cú pháp của các câu lệnh DML và đưa chúng vào hệ thống Teradata.
Phase 3 - Giai đoạn Thu nhận - Đưa dữ liệu đầu vào vào bảng công việc và khóa bảng.
Phase 4 - Giai đoạn Ứng dụng - Áp dụng tất cả các hoạt động DML.
Phase 5 - Giai đoạn Dọn dẹp - Giải phóng khóa bàn.
Các bước liên quan đến một tập lệnh MultiLoad là:
Step 1 - Lập bảng nhật ký.
Step 2 - Đăng nhập vào Teradata.
Step 3 - Chỉ định các bảng Mục tiêu, Công việc và Lỗi.
Step 4 - Xác định bố cục tệp INPUT.
Step 5 - Xác định các truy vấn DML.
Step 6 - Đặt tên cho tệp IMPORT.
Step 7 - Chỉ định LAYOUT được sử dụng.
Step 8 - Bắt đầu tải.
Step 9 - Kết thúc tải và kết thúc phiên.
Thí dụ
Tạo một tệp văn bản với các bản ghi sau và đặt tên tệp là worker.txt.
101,Mike,James,1980-01-05,2010-03-01,1
102,Robert,Williams,1983-03-05,2010-09-01,1
103,Peter,Paul,1983-04-01,2009-02-12,2
104,Alex,Stuart,1984-11-06,2014-01-01,2
105,Robert,James,1984-12-01,2015-03-09,3
Ví dụ sau là một tập lệnh MultiLoad đọc các bản ghi từ bảng nhân viên và tải vào bảng Employee_Stg.
.LOGTABLE tduser.Employee_log;
.LOGON 192.168.1.102/dbc,dbc;
.BEGIN MLOAD TABLES Employee_Stg;
.LAYOUT Employee;
.FIELD in_EmployeeNo * VARCHAR(10);
.FIELD in_FirstName * VARCHAR(30);
.FIELD in_LastName * VARCHAR(30);
.FIELD in_BirthDate * VARCHAR(10);
.FIELD in_JoinedDate * VARCHAR(10);
.FIELD in_DepartmentNo * VARCHAR(02);
.DML LABEL EmpLabel;
INSERT INTO Employee_Stg (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
:in_EmployeeNo,
:in_FirstName,
:in_Lastname,
:in_BirthDate,
:in_JoinedDate,
:in_DepartmentNo
);
.IMPORT INFILE employee.txt
FORMAT VARTEXT ','
LAYOUT Employee
APPLY EmpLabel;
.END MLOAD;
LOGOFF;
Thực thi MultiLoad Script
Khi tệp đầu vào worker.txt được tạo và tập lệnh đa tải được đặt tên là EmployeeLoad.ml, thì bạn có thể chạy tập lệnh đa tải bằng lệnh sau trong UNIX và Windows.
Multiload < EmployeeLoad.ml;
Tiện ích FastExport được sử dụng để xuất dữ liệu từ bảng Teradata thành các tệp phẳng. Nó cũng có thể tạo dữ liệu ở định dạng báo cáo. Dữ liệu có thể được trích xuất từ một hoặc nhiều bảng bằng Tham gia. Vì FastExport xuất dữ liệu dưới dạng khối 64K, nên nó rất hữu ích để trích xuất khối lượng lớn dữ liệu.
Thí dụ
Hãy xem xét bảng Nhân viên sau đây.
Nhân viên Không | Tên đầu tiên | LastName | Ngày sinh |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 11/6/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 12/1/1984 |
103 | Peter | Paul | 4/1/1983 |
Sau đây là một ví dụ về tập lệnh FastExport. Nó xuất dữ liệu từ bảng của nhân viên và ghi vào một tệp Employeedata.txt.
.LOGTABLE tduser.employee_log;
.LOGON 192.168.1.102/dbc,dbc;
DATABASE tduser;
.BEGIN EXPORT SESSIONS 2;
.EXPORT OUTFILE employeedata.txt
MODE RECORD FORMAT TEXT;
SELECT CAST(EmployeeNo AS CHAR(10)),
CAST(FirstName AS CHAR(15)),
CAST(LastName AS CHAR(15)),
CAST(BirthDate AS CHAR(10))
FROM
Employee;
.END EXPORT;
.LOGOFF;
Thực thi một tập lệnh FastExport
Khi tập lệnh được viết và đặt tên là worker.fx, bạn có thể sử dụng lệnh sau để thực thi tập lệnh.
fexp < employee.fx
Sau khi thực hiện lệnh trên, bạn sẽ nhận được kết quả sau trong tệp Employeedata.txt.
103 Peter Paul 1983-04-01
101 Mike James 1980-01-05
102 Robert Williams 1983-03-05
105 Robert James 1984-12-01
104 Alex Stuart 1984-11-06
Điều khoản FastExport
Sau đây là danh sách các thuật ngữ thường được sử dụng trong tập lệnh FastExport.
LOGTABLE - Chỉ định bảng nhật ký cho mục đích khởi động lại.
LOGON - Đăng nhập vào Teradata và bắt đầu một hoặc nhiều phiên.
DATABASE - Đặt cơ sở dữ liệu mặc định.
BEGIN EXPORT - Cho biết thời điểm bắt đầu xuất.
EXPORT - Chỉ định tệp đích và định dạng xuất.
SELECT - Chỉ định truy vấn chọn để xuất dữ liệu.
END EXPORT - Chỉ định kết thúc của FastExport.
LOGOFF - Kết thúc tất cả các phiên và chấm dứt FastExport.
Tiện ích BTEQ là một tiện ích mạnh mẽ trong Teradata có thể được sử dụng ở cả chế độ hàng loạt và tương tác. Nó có thể được sử dụng để chạy bất kỳ câu lệnh DDL, câu lệnh DML, tạo Macro và các thủ tục được lưu trữ. BTEQ có thể được sử dụng để nhập dữ liệu vào bảng Teradata từ tệp phẳng và nó cũng có thể được sử dụng để trích xuất dữ liệu từ bảng thành tệp hoặc báo cáo.
Điều khoản BTEQ
Sau đây là danh sách các thuật ngữ thường được sử dụng trong tập lệnh BTEQ.
LOGON - Dùng để đăng nhập vào hệ thống Teradata.
ACTIVITYCOUNT - Trả về số hàng bị ảnh hưởng bởi truy vấn trước đó.
ERRORCODE - Trả về mã trạng thái của truy vấn trước đó.
DATABASE - Đặt cơ sở dữ liệu mặc định.
LABEL - Gán nhãn cho một tập hợp các lệnh SQL.
RUN FILE - Thực hiện truy vấn có trong một tệp.
GOTO - Chuyển quyền điều khiển sang nhãn.
LOGOFF - Đăng xuất khỏi cơ sở dữ liệu và kết thúc tất cả các phiên.
IMPORT - Chỉ định đường dẫn tệp đầu vào.
EXPORT - Chỉ định đường dẫn tệp đầu ra và bắt đầu xuất.
Thí dụ
Sau đây là một tập lệnh BTEQ mẫu.
.LOGON 192.168.1.102/dbc,dbc;
DATABASE tduser;
CREATE TABLE employee_bkup (
EmployeeNo INTEGER,
FirstName CHAR(30),
LastName CHAR(30),
DepartmentNo SMALLINT,
NetPay INTEGER
)
Unique Primary Index(EmployeeNo);
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;
SELECT * FROM
Employee
Sample 1;
.IF ACTIVITYCOUNT <> 0 THEN .GOTO InsertEmployee;
DROP TABLE employee_bkup;
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;
.LABEL InsertEmployee
INSERT INTO employee_bkup
SELECT a.EmployeeNo,
a.FirstName,
a.LastName,
a.DepartmentNo,
b.NetPay
FROM
Employee a INNER JOIN Salary b
ON (a.EmployeeNo = b.EmployeeNo);
.IF ERRORCODE <> 0 THEN .EXIT ERRORCODE;
.LOGOFF;
Tập lệnh trên thực hiện các tác vụ sau.
Đăng nhập vào Hệ thống Teradata.
Đặt cơ sở dữ liệu mặc định.
Tạo một bảng có tên là worker_bkup.
Chọn một bản ghi từ bảng Nhân viên để kiểm tra xem bảng có bất kỳ bản ghi nào không.
Bỏ bảng worker_bkup, nếu bảng trống.
Chuyển quyền điều khiển sang một Chèn Nhãn sẽ chèn các bản ghi vào bảng worker_bkup
Kiểm tra ERRORCODE để đảm bảo rằng câu lệnh thành công, sau mỗi câu lệnh SQL.
ACTIVITYCOUNT trả về số lượng bản ghi được chọn / tác động bởi truy vấn SQL trước đó.