Teradata - Panduan Cepat
Apa itu Teradata?
Teradata adalah salah satu Sistem Manajemen Database Relasional yang populer. Ini terutama cocok untuk membangun aplikasi pergudangan data skala besar. Teradata mencapai ini dengan konsep paralelisme. Ini dikembangkan oleh perusahaan bernama Teradata.
Sejarah Teradata
Berikut ini adalah ringkasan singkat dari sejarah Teradata, daftar tonggak utama.
1979 - Teradata dimasukkan.
1984 - Rilis komputer database pertama DBC / 1012.
1986- Majalah Fortune menyebut Teradata sebagai 'Product of the Year'.
1999 - Database terbesar di dunia menggunakan Teradata dengan 130 Terabytes.
2002 - Teradata V2R5 dirilis dengan Partition Primary Index dan kompresi.
2006 - Peluncuran solusi Manajemen Data Master Teradata.
2008 - Teradata 13.0 dirilis dengan Active Data Warehousing.
2011 - Mengakuisisi Teradata Aster dan masuk ke Ruang Analisis Lanjutan.
2012 - Teradata 14.0 diperkenalkan.
2014 - Teradata 15.0 diperkenalkan.
Fitur Teradata
Berikut adalah beberapa fitur Teradata -
Unlimited Parallelism- Sistem database teradata didasarkan pada Arsitektur Massively Parallel Processing (MPP). Arsitektur MPP membagi beban kerja secara merata di seluruh sistem. Sistem teradata membagi tugas di antara prosesnya dan menjalankannya secara paralel untuk memastikan bahwa tugas diselesaikan dengan cepat.
Shared Nothing Architecture- Arsitektur Teradata disebut dengan Shared Nothing Architecture. Node Teradata, Pemroses Modul Akses (AMP), dan disk yang terkait dengan AMP bekerja secara independen. Mereka tidak dibagikan dengan orang lain.
Linear Scalability- Sistem teradata sangat skalabel. Mereka dapat menskalakan hingga 2048 Node. Misalnya, Anda dapat menggandakan kapasitas sistem dengan menggandakan jumlah AMP.
Connectivity - Teradata dapat terhubung ke sistem yang terpasang pada Saluran seperti Mainframe atau sistem yang terhubung ke Jaringan.
Mature Optimizer- Pengoptimal teradata adalah salah satu pengoptimal yang matang di pasar. Ini telah dirancang agar paralel sejak awal. Itu telah disempurnakan untuk setiap rilis.
SQL- Teradata mendukung SQL standar industri untuk berinteraksi dengan data yang disimpan dalam tabel. Selain itu, ia menyediakan ekstensi sendiri.
Robust Utilities - Teradata menyediakan utilitas yang kuat untuk mengimpor / mengekspor data dari / ke sistem Teradata seperti FastLoad, MultiLoad, FastExport, dan TPT.
Automatic Distribution - Teradata secara otomatis mendistribusikan data secara merata ke disk tanpa intervensi manual.
Teradata menyediakan Teradata express untuk VMWARE yang merupakan mesin virtual Teradata yang beroperasi penuh. Ini menyediakan penyimpanan hingga 1 terabyte. Teradata menyediakan VMware versi 40GB dan 1TB.
Prasyarat
Karena VM 64 bit, CPU Anda harus mendukung 64-bit.
Langkah Instalasi untuk Windows
Step 1 - Unduh versi VM yang diperlukan dari tautan, https://downloads.teradata.com/download/database/teradata-express-for-vmware-player
Step 2 - Ekstrak file dan tentukan folder target.
Step 3 - Unduh pemutar VMWare Workstation dari tautan, https://my.vmware.com/web/vmware/downloads. Ini tersedia untuk Windows dan Linux. Unduh pemutar stasiun kerja VMWARE untuk Windows.
Step 4 - Setelah pengunduhan selesai, instal perangkat lunak.
Step 5 - Setelah penginstalan selesai, jalankan klien VMWARE.
Step 6- Pilih 'Buka Mesin Virtual'. Arahkan melalui folder Teradata VMWare yang diekstrak dan pilih file dengan ekstensi .vmdk.
Step 7- Teradata VMWare ditambahkan ke klien VMWare. Pilih Teradata VMware yang ditambahkan dan klik 'Mainkan Mesin Virtual'.
Step 8 - Jika Anda mendapatkan popup tentang pembaruan perangkat lunak, Anda dapat memilih 'Ingatkan Saya Nanti'.
Step 9 - Masukkan nama pengguna sebagai root, tekan tab dan masukkan kata sandi sebagai root dan sekali lagi tekan Enter.
Step 10- Setelah layar berikut muncul di desktop, klik dua kali pada 'root's home'. Kemudian klik dua kali pada 'Terminal Genome'. Ini akan membuka Shell.
Step 11- Dari shell berikut, masukkan perintah /etc/init.d/tpa start. Ini akan memulai server Teradata.
Memulai BTEQ
Utilitas BTEQ digunakan untuk mengirimkan kueri SQL secara interaktif. Berikut adalah langkah-langkah untuk memulai utilitas BTEQ.
Step 1 - Masukkan perintah / sbin / ifconfig dan catat alamat IP VMWare.
Step 2- Jalankan perintah bteq. Pada prompt logon, masukkan perintah.
Logon <ipaddress> / dbc, dbc; dan masukkan Pada prompt kata sandi, masukkan kata sandi sebagai dbc;
Anda dapat masuk ke sistem Teradata menggunakan BTEQ dan menjalankan kueri SQL apa pun.
Arsitektur teradata didasarkan pada arsitektur Massively Parallel Processing (MPP). Komponen utama Teradata adalah Parsing Engine, BYNET, dan Access Module Processors (AMPs). Diagram berikut menunjukkan arsitektur tingkat tinggi dari Teradata Node.
Komponen Teradata
Komponen utama Teradata adalah sebagai berikut -
Node- Ini adalah unit dasar dalam Sistem Teradata. Setiap server individu dalam sistem Teradata disebut sebagai Node. Node terdiri dari sistem operasinya sendiri, CPU, memori, salinan sendiri dari perangkat lunak RDBMS Teradata, dan ruang disk. Kabinet terdiri dari satu atau lebih Node.
Parsing Engine- Parsing Engine bertanggung jawab untuk menerima pertanyaan dari klien dan menyiapkan rencana eksekusi yang efisien. Tanggung jawab mesin parsing adalah -
Terima kueri SQL dari klien
Parse pemeriksaan kueri SQL untuk kesalahan sintaks
Periksa apakah pengguna memerlukan hak istimewa terhadap objek yang digunakan dalam kueri SQL
Periksa apakah objek yang digunakan dalam SQL benar-benar ada
Siapkan rencana eksekusi untuk mengeksekusi kueri SQL dan teruskan ke BYNET
Menerima hasil dari AMP dan mengirim ke klien
Message Passing Layer- Message Passing Layer yang disebut BYNET, adalah lapisan jaringan dalam sistem Teradata. Ini memungkinkan komunikasi antara PE dan AMP dan juga antara node. Ini menerima rencana eksekusi dari Parsing Engine dan mengirim ke AMP. Demikian pula, ini menerima hasil dari AMP dan mengirimnya ke Parsing Engine.
Access Module Processor (AMP)- AMP, disebut sebagai Prosesor Virtual (vprocs) adalah yang benar-benar menyimpan dan mengambil data. AMP menerima data dan rencana eksekusi dari Parsing Engine, melakukan semua jenis konversi data, agregasi, filter, pengurutan, dan menyimpan data dalam disk yang terkait dengannya. Catatan dari tabel didistribusikan secara merata di antara AMP dalam sistem. Setiap AMP dikaitkan dengan sekumpulan disk tempat data disimpan. Hanya AMP itu yang dapat membaca / menulis data dari disk.
Arsitektur Penyimpanan
Ketika klien menjalankan kueri untuk menyisipkan catatan, mesin Parsing mengirimkan catatan ke BYNET. BYNET mengambil record dan mengirimkan baris tersebut ke AMP target. AMP menyimpan catatan ini di disknya. Diagram berikut menunjukkan arsitektur penyimpanan Teradata.
Arsitektur Retrieval
Ketika klien menjalankan kueri untuk mengambil rekaman, mesin Parsing mengirimkan permintaan ke BYNET. BYNET mengirimkan permintaan pengambilan ke AMP yang sesuai. Kemudian AMP mencari disk mereka secara paralel dan mengidentifikasi catatan yang diperlukan dan mengirimkannya ke BYNET. BYNET kemudian mengirimkan catatan ke Parsing Engine yang pada gilirannya akan dikirim ke klien. Berikut ini adalah arsitektur pengambilan Teradata.
Relational Database Management System (RDBMS) adalah perangkat lunak DBMS yang membantu untuk berinteraksi dengan database. Mereka menggunakan Structured Query Language (SQL) untuk berinteraksi dengan data yang disimpan dalam tabel.
Database
Database adalah kumpulan data yang berhubungan secara logis. Mereka diakses oleh banyak pengguna untuk tujuan berbeda. Misalnya, database penjualan berisi seluruh informasi tentang penjualan yang disimpan di banyak tabel.
Tabel
Tabel adalah unit dasar dalam RDBMS tempat data disimpan. Tabel adalah kumpulan baris dan kolom. Berikut adalah contoh tabel karyawan.
KaryawanNo | Nama depan | Nama keluarga | Tanggal lahir |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 6/11/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 1/12/1984 |
103 | Peter | Paul | 1/4/1983 |
Kolom
Sebuah kolom berisi data serupa. Misalnya, kolom BirthDate di tabel Employee berisi informasi birth_date untuk semua karyawan.
Tanggal lahir |
---|
1/5/1980 |
6/11/1984 |
3/5/1983 |
1/12/1984 |
1/4/1983 |
Baris
Baris adalah salah satu contoh dari semua kolom. Misalnya, dalam tabel karyawan satu baris berisi informasi tentang satu karyawan.
KaryawanNo | Nama depan | Nama keluarga | Tanggal lahir |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
Kunci utama
Kunci utama digunakan untuk mengidentifikasi baris dalam tabel secara unik. Tidak ada nilai duplikat yang diperbolehkan dalam kolom kunci utama dan mereka tidak dapat menerima nilai NULL. Ini adalah bidang wajib dalam tabel.
Kunci asing
Kunci asing digunakan untuk membangun hubungan antar tabel. Kunci asing dalam tabel anak didefinisikan sebagai kunci utama dalam tabel induk. Sebuah tabel dapat memiliki lebih dari satu kunci asing. Itu dapat menerima nilai duplikat dan juga nilai nol. Kunci asing adalah opsional dalam tabel.
Setiap kolom dalam tabel dikaitkan dengan tipe data. Tipe data menentukan jenis nilai apa yang akan disimpan di kolom. Teradata mendukung beberapa tipe data. Berikut adalah beberapa tipe data yang sering digunakan.
Jenis Data | Panjang (Bytes) | Jarak nilai |
---|---|---|
BYTEINT | 1 | -128 hingga +127 |
SMALLINT | 2 | -32768 hingga +32767 |
BILANGAN BULAT | 4 | -2,147,483,648 hingga +2147,483,647 |
BIGINT | 8 | -9,233,372,036,854,775,80 8 hingga +9,233,372,036,854,775,8 07 |
DESIMAL | 1-16 | |
NUMERIK | 1-16 | |
MENGAPUNG | 8 | Format IEEE |
ARANG | Format Tetap | 1-64,000 |
VARCHAR | Variabel | 1-64,000 |
TANGGAL | 4 | YYYYYMMDD |
WAKTU | 6 atau 8 | HHMMSS.nnnnnn or HHMMSS.nnnnnn + HHMM |
TIMESTAMP | 10 atau 12 | YYMMDDHHMMSS.nnnnnn or YYMMDDHHMMSS.nnnnnn + HHMM |
Tabel dalam model Relasional didefinisikan sebagai kumpulan data. Mereka direpresentasikan sebagai baris dan kolom.
Jenis Tabel
Tipe Teradata mendukung tipe tabel yang berbeda.
Permanent Table - Ini adalah tabel default dan berisi data yang dimasukkan oleh pengguna dan menyimpan data secara permanen.
Volatile Table- Data yang dimasukkan ke dalam tabel volatil disimpan hanya selama sesi pengguna. Tabel dan data dihapus di akhir sesi. Tabel ini terutama digunakan untuk menyimpan data perantara selama transformasi data.
Global Temporary Table - Definisi tabel Global Temporary tetap ada tetapi data dalam tabel dihapus di akhir sesi pengguna.
Derived Table- Tabel turunan memegang hasil antara dalam kueri. Masa pakai mereka ada dalam kueri tempat mereka dibuat, digunakan, dan dijatuhkan.
Setel versus Multiset
Teradata mengklasifikasikan tabel sebagai tabel SET atau MULTISET berdasarkan bagaimana catatan duplikat ditangani. Tabel yang ditentukan sebagai tabel SET tidak menyimpan catatan duplikat, sedangkan tabel MULTISET dapat menyimpan catatan duplikat.
Sr Tidak | Perintah & Deskripsi Tabel |
---|---|
1 | Buat tabel Perintah CREATE TABLE digunakan untuk membuat tabel di Teradata. |
2 | Alter Table Perintah ALTER TABLE digunakan untuk menambah atau melepas kolom dari tabel yang sudah ada. |
3 | Meja Taruh Perintah DROP TABLE digunakan untuk menjatuhkan tabel. |
Bab ini memperkenalkan perintah SQL yang digunakan untuk memanipulasi data yang disimpan dalam tabel Teradata.
Sisipkan Rekaman
Pernyataan INSERT INTO digunakan untuk memasukkan record ke dalam tabel.
Sintaksis
Berikut ini adalah sintaks umum untuk INSERT INTO.
INSERT INTO <tablename>
(column1, column2, column3,…)
VALUES
(value1, value2, value3 …);
Contoh
Contoh berikut menyisipkan rekaman ke dalam tabel karyawan.
INSERT INTO Employee (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
VALUES (
101,
'Mike',
'James',
'1980-01-05',
'2005-03-27',
01
);
Setelah query di atas dimasukkan, Anda dapat menggunakan pernyataan SELECT untuk melihat record dari tabel.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartemenNo | Tanggal lahir |
---|---|---|---|---|---|
101 | Mike | James | 27/3/2005 | 1 | 1/5/1980 |
Sisipkan dari Tabel Lain
Pernyataan INSERT SELECT digunakan untuk memasukkan record dari tabel lain.
Sintaksis
Berikut ini adalah sintaks umum untuk INSERT INTO.
INSERT INTO <tablename>
(column1, column2, column3,…)
SELECT
column1, column2, column3…
FROM
<source table>;
Contoh
Contoh berikut menyisipkan rekaman ke dalam tabel karyawan. Buat tabel bernama Employee_Bkup dengan definisi kolom yang sama dengan tabel karyawan sebelum menjalankan kueri sisipkan berikut ini.
INSERT INTO Employee_Bkup (
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
)
SELECT
EmployeeNo,
FirstName,
LastName,
BirthDate,
JoinedDate,
DepartmentNo
FROM
Employee;
Ketika query di atas dijalankan, semua record dari tabel karyawan akan dimasukkan ke dalam tabel employee_bkup.
Aturan
Jumlah kolom yang ditentukan dalam daftar VALUES harus sesuai dengan kolom yang ditentukan dalam klausa INSERT INTO.
Nilai wajib diisi untuk kolom NOT NULL.
Jika tidak ada nilai yang ditentukan, maka NULL dimasukkan untuk bidang nullable.
Jenis data kolom yang ditentukan dalam klausa VALUES harus kompatibel dengan jenis data kolom dalam klausa INSERT.
Perbarui Rekaman
Pernyataan UPDATE digunakan untuk memperbarui catatan dari tabel.
Sintaksis
Berikut ini adalah sintaks generik untuk UPDATE.
UPDATE <tablename>
SET <columnnamme> = <new value>
[WHERE condition];
Contoh
Contoh berikut memperbarui karyawan dept 03 untuk karyawan 101.
UPDATE Employee
SET DepartmentNo = 03
WHERE EmployeeNo = 101;
Pada keluaran berikut, Anda dapat melihat bahwa DepartmentNo diperbarui dari 1 menjadi 3 untuk 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
Aturan
Anda dapat memperbarui satu atau beberapa nilai tabel.
Jika kondisi WHERE tidak ditentukan maka semua baris tabel akan terpengaruh.
Anda dapat memperbarui tabel dengan nilai dari tabel lain.
Hapus Rekaman
DELETE FROM pernyataan digunakan untuk memperbarui catatan dari tabel.
Sintaksis
Berikut ini adalah sintaks umum untuk DELETE FROM.
DELETE FROM <tablename>
[WHERE condition];
Contoh
Contoh berikut menghapus karyawan 101 dari karyawan tabel.
DELETE FROM Employee
WHERE EmployeeNo = 101;
Pada output berikut, Anda dapat melihat karyawan 101 dihapus dari tabel.
SELECT EmployeeNo FROM Employee;
*** Query completed. No rows found.
*** Total elapsed time was 1 second.
Aturan
Anda dapat memperbarui satu atau lebih rekaman tabel.
Jika kondisi WHERE tidak ditentukan maka semua baris tabel akan dihapus.
Anda dapat memperbarui tabel dengan nilai dari tabel lain.
Pernyataan SELECT digunakan untuk mengambil record dari tabel.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan SELECT.
SELECT
column 1, column 2, .....
FROM
tablename;
Contoh
Perhatikan tabel karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartemenNo | Tanggal lahir |
---|---|---|---|---|---|
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 | 1/4/1983 |
104 | Alex | Stuart | 1/2/2008 | 2 | 6/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 1/12/1984 |
Berikut adalah contoh pernyataan SELECT.
SELECT EmployeeNo,FirstName,LastName
FROM Employee;
Ketika kueri ini dijalankan, ia mengambil kolom EmployeeNo, FirstName, dan LastName dari tabel karyawan.
EmployeeNo FirstName LastName
----------- ------------------------------ ---------------------------
101 Mike James
104 Alex Stuart
102 Robert Williams
105 Robert James
103 Peter Paul
Jika Anda ingin mengambil semua kolom dari tabel, Anda dapat menggunakan perintah berikut alih-alih mencantumkan semua kolom.
SELECT * FROM Employee;
Kueri di atas akan mengambil semua catatan dari tabel karyawan.
Klausul WHERE
Klausa WHERE digunakan untuk memfilter catatan yang dikembalikan oleh pernyataan SELECT. Kondisi terkait dengan klausa WHERE. Hanya, catatan yang memenuhi kondisi di klausa WHERE akan dikembalikan.
Sintaksis
Berikut ini adalah sintaks dari pernyataan SELECT dengan klausa WHERE.
SELECT * FROM tablename
WHERE[condition];
Contoh
Kueri berikut mengambil rekaman dengan EmployeeNo adalah 101.
SELECT * FROM Employee
WHERE EmployeeNo = 101;
Saat kueri ini dijalankan, ia mengembalikan rekaman berikut.
EmployeeNo FirstName LastName
----------- ------------------------------ -----------------------------
101 Mike James
DIPESAN OLEH
Ketika pernyataan SELECT dijalankan, baris yang dikembalikan tidak berada dalam urutan tertentu. Klausa ORDER BY digunakan untuk mengatur catatan dalam urutan naik / turun pada kolom apa pun.
Sintaksis
Berikut adalah sintaks dari pernyataan SELECT dengan klausa ORDER BY.
SELECT * FROM tablename
ORDER BY column 1, column 2..;
Contoh
Kueri berikut mengambil rekaman dari tabel karyawan dan mengurutkan hasil berdasarkan NamaDepan.
SELECT * FROM Employee
ORDER BY FirstName;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
EmployeeNo FirstName LastName
----------- ------------------------------ -----------------------------
104 Alex Stuart
101 Mike James
103 Peter Paul
102 Robert Williams
105 Robert James
GRUP OLEH
Klausa GROUP BY digunakan dengan pernyataan SELECT dan mengatur rekaman serupa ke dalam grup.
Sintaksis
Berikut ini adalah sintaks dari pernyataan SELECT dengan klausa GROUP BY.
SELECT column 1, column2 …. FROM tablename
GROUP BY column 1, column 2..;
Contoh
Contoh berikut mengelompokkan catatan menurut kolom DepartmentNo dan mengidentifikasi jumlah total dari setiap departemen.
SELECT DepartmentNo,Count(*) FROM
Employee
GROUP BY DepartmentNo;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
DepartmentNo Count(*)
------------ -----------
3 1
1 1
2 3
Teradata mendukung operator logis dan bersyarat berikut. Operator ini digunakan untuk melakukan perbandingan dan menggabungkan beberapa kondisi.
Sintaksis | Berarti |
---|---|
> | Lebih besar dari |
< | Kurang dari |
>= | Lebih dari atau sama dengan |
<= | Kurang dari atau sama dengan |
= | Sama dengan |
BETWEEN | Jika nilai dalam jangkauan |
IN | Jika nilai dalam <ekspresi> |
NOT IN | Jika nilai tidak ada dalam <ekspresi> |
IS NULL | Jika nilainya NULL |
IS NOT NULL | Jika nilainya NOT NULL |
AND | Gabungkan beberapa kondisi. Mengevaluasi menjadi benar hanya jika semua ketentuan terpenuhi |
OR | Gabungkan beberapa kondisi. Mengevaluasi menjadi benar hanya jika salah satu ketentuan terpenuhi. |
NOT | Membalik arti dari kondisi |
ANTARA
Perintah BETWEEN digunakan untuk memeriksa apakah suatu nilai berada dalam kisaran nilai.
Contoh
Perhatikan tabel karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartemenNo | Tanggal lahir |
---|---|---|---|---|---|
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 | 1/4/1983 |
104 | Alex | Stuart | 1/2/2008 | 2 | 6/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 1/12/1984 |
Contoh berikut mengambil rekaman dengan nomor karyawan dalam kisaran antara 101.102 dan 103.
SELECT EmployeeNo, FirstName FROM
Employee
WHERE EmployeeNo BETWEEN 101 AND 103;
Ketika kueri di atas dijalankan, ia mengembalikan catatan karyawan dengan no karyawan antara 101 dan 103.
*** Query completed. 3 rows found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName
----------- ------------------------------
101 Mike
102 Robert
103 Peter
DI
Perintah IN digunakan untuk memeriksa nilai terhadap daftar nilai yang diberikan.
Contoh
Contoh berikut mengambil catatan dengan nomor karyawan di 101, 102 dan 103.
SELECT EmployeeNo, FirstName FROM
Employee
WHERE EmployeeNo in (101,102,103);
Kueri di atas mengembalikan rekaman berikut.
*** Query completed. 3 rows found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName
----------- ------------------------------
101 Mike
102 Robert
103 Peter
TIDAK MASUK
Perintah NOT IN membalikkan hasil dari perintah IN. Itu mengambil catatan dengan nilai yang tidak cocok dengan daftar yang diberikan.
Contoh
Contoh berikut mengambil record dengan nomor karyawan bukan 101, 102 dan 103.
SELECT * FROM
Employee
WHERE EmployeeNo not in (101,102,103);
Kueri di atas mengembalikan rekaman berikut.
*** Query completed. 2 rows found. 6 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName LastName
----------- ------------------------------ -----------------------------
104 Alex Stuart
105 Robert James
Operator SET menggabungkan hasil dari beberapa pernyataan SELECT. Ini mungkin terlihat mirip dengan Gabungan, tetapi gabungan menggabungkan kolom dari beberapa tabel sedangkan operator SET menggabungkan baris dari beberapa baris.
Aturan
Jumlah kolom dari setiap pernyataan SELECT harus sama.
Tipe data dari setiap SELECT harus kompatibel.
ORDER BY harus disertakan hanya dalam pernyataan SELECT terakhir.
PERSATUAN
Pernyataan UNION digunakan untuk menggabungkan hasil dari beberapa pernyataan SELECT. Ini mengabaikan duplikat.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan UNION.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Contoh
Perhatikan tabel karyawan dan tabel gaji berikut.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartemenNo | Tanggal lahir |
---|---|---|---|---|---|
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 | 1/4/1983 |
104 | Alex | Stuart | 1/2/2008 | 2 | 6/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 1/12/1984 |
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
Kueri UNION berikut menggabungkan nilai EmployeeNo dari tabel Employee dan Gaji.
SELECT EmployeeNo
FROM
Employee
UNION
SELECT EmployeeNo
FROM
Salary;
Ketika kueri dijalankan, itu menghasilkan keluaran berikut.
EmployeeNo
-----------
101
102
103
104
105
UNI SEMUA
Pernyataan UNION ALL mirip dengan UNION, ini menggabungkan hasil dari beberapa tabel termasuk baris duplikat.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan UNION ALL.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
UNION ALL
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Contoh
Berikut adalah contoh pernyataan UNION ALL.
SELECT EmployeeNo
FROM
Employee
UNION ALL
SELECT EmployeeNo
FROM
Salary;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Anda dapat melihat bahwa ia juga mengembalikan duplikat.
EmployeeNo
-----------
101
104
102
105
103
101
104
102
103
MEMOTONG
Perintah INTERSECT juga digunakan untuk menggabungkan hasil dari beberapa pernyataan SELECT. Ini mengembalikan baris dari pernyataan SELECT pertama yang memiliki kecocokan yang sesuai dalam pernyataan SELECT kedua. Dengan kata lain, ini mengembalikan baris yang ada di kedua pernyataan SELECT.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan INTERSECT.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
INTERSECT
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Contoh
Berikut adalah contoh pernyataan INTERSECT. Ini mengembalikan nilai EmployeeNo yang ada di kedua tabel.
SELECT EmployeeNo
FROM
Employee
INTERSECT
SELECT EmployeeNo
FROM
Salary;
Saat kueri di atas dijalankan, ia mengembalikan rekaman berikut. EmployeeNo 105 dikecualikan karena tidak ada di tabel SALARY.
EmployeeNo
-----------
101
104
102
103
MINUS / KECUALI
MINUS / EXCEPT perintah menggabungkan baris dari beberapa tabel dan mengembalikan baris yang ada di SELECT pertama tetapi tidak di SELECT kedua. Keduanya memberikan hasil yang sama.
Sintaksis
Berikut ini adalah sintaks dasar dari pernyataan MINUS.
SELECT col1, col2, col3…
FROM
<table 1>
[WHERE condition]
MINUS
SELECT col1, col2, col3…
FROM
<table 2>
[WHERE condition];
Contoh
Berikut adalah contoh pernyataan MINUS.
SELECT EmployeeNo
FROM
Employee
MINUS
SELECT EmployeeNo
FROM
Salary;
Ketika kueri ini dijalankan, ia mengembalikan rekaman berikut.
EmployeeNo
-----------
105
Teradata menyediakan beberapa fungsi untuk memanipulasi string. Fungsi ini kompatibel dengan standar ANSI.
Sr Tidak | Fungsi & Deskripsi String |
---|---|
1 | || Menggabungkan string menjadi satu |
2 | SUBSTR Mengekstrak sebagian dari string (ekstensi Teradata) |
3 | SUBSTRING Mengekstrak sebagian string (standar ANSI) |
4 | INDEX Menemukan posisi karakter dalam string (ekstensi Teradata) |
5 | POSITION Menemukan posisi karakter dalam string (standar ANSI) |
6 | TRIM Memangkas kosong dari string |
7 | UPPER Mengonversi string menjadi huruf besar |
8 | LOWER Mengonversi string menjadi huruf kecil |
Contoh
Tabel berikut mencantumkan beberapa fungsi string dengan hasilnya.
Fungsi String | Hasil |
---|---|
PILIH SUBSTRING ('gudang' DARI 1 UNTUK 4) | ware |
PILIH SUBSTR ('gudang', 1,4) | ware |
PILIH 'data' || '' || 'gudang' | gudang data |
PILIH ATAS ('data') | DATA |
PILIH LEBIH RENDAH ('DATA') | data |
Bab ini membahas fungsi tanggal / waktu yang tersedia di Teradata.
Tanggal Penyimpanan
Tanggal disimpan sebagai bilangan bulat secara internal menggunakan rumus berikut.
((YEAR - 1900) * 10000) + (MONTH * 100) + DAY
Anda dapat menggunakan kueri berikut ini untuk memeriksa bagaimana tanggal disimpan.
SELECT CAST(CURRENT_DATE AS INTEGER);
Karena tanggal disimpan sebagai bilangan bulat, Anda dapat melakukan beberapa operasi aritmatika padanya. Teradata menyediakan fungsi untuk melakukan operasi ini.
EKSTRAK
Fungsi EXTRACT mengekstrak bagian hari, bulan dan tahun dari nilai DATE. Fungsi ini juga digunakan untuk mengekstrak jam, menit dan detik dari nilai TIME / TIMESTAMP.
Contoh
Contoh berikut memperlihatkan cara mengekstrak nilai Tahun, Bulan, Tanggal, Jam, Menit, dan detik dari nilai Tanggal dan Stempel Waktu.
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
SELANG
Teradata menyediakan fungsi INTERVAL untuk melakukan operasi aritmatika pada nilai DATE dan TIME. Ada dua jenis fungsi INTERVAL.
Interval Tahun-Bulan
- YEAR
- TAHUN KE BULAN
- MONTH
Interval Siang Hari
- DAY
- HARI KE JAM
- HARI KE MENIT
- HARI KE KEDUA
- HOUR
- JAM KE MENIT
- JAM SAMPAI KEDUA
- MINUTE
- MENIT KE KEDUA
- SECOND
Contoh
Contoh berikut menambahkan 3 tahun ke tanggal sekarang.
SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03' YEAR;
Date (Date+ 3)
-------- ---------
16/01/01 19/01/01
Contoh berikut menambahkan 3 tahun dan 01 bulan ke tanggal sekarang.
SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03-01' YEAR TO MONTH;
Date (Date+ 3-01)
-------- ------------
16/01/01 19/02/01
Contoh berikut menambahkan 01 hari, 05 jam dan 10 menit ke stempel waktu saat ini.
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 menyediakan fungsi bawaan yang merupakan ekstensi ke SQL. Berikut ini adalah fungsi bawaan yang umum.
Fungsi | Hasil |
---|---|
PILIH TANGGAL; | Tanggal -------- 16/01/01 |
PILIH CURRENT_DATE; | Tanggal -------- 16/01/01 |
PILIH WAKTU; | Waktu -------- 04:50:29 |
PILIH CURRENT_TIME; | Waktu -------- 04:50:29 |
PILIH CURRENT_TIMESTAMP; | Stempel Waktu Saat Ini (6) -------------------------------- 01-01 2016 04: 51: 06,990000 + 00: 00 |
PILIH DATABASE; | Basis data ------------------------------ TDUSER |
Teradata mendukung fungsi agregat umum. Mereka dapat digunakan dengan pernyataan SELECT.
COUNT - Menghitung baris
SUM - Meringkas nilai dari kolom tertentu
MAX - Mengembalikan nilai besar dari kolom yang ditentukan
MIN - Mengembalikan nilai minimum dari kolom yang ditentukan
AVG - Mengembalikan nilai rata-rata dari kolom yang ditentukan
Contoh
Perhatikan Tabel Gaji berikut ini.
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
MENGHITUNG
Contoh berikut menghitung jumlah catatan dalam tabel Gaji.
SELECT count(*) from Salary;
Count(*)
-----------
5
MAKS
Contoh berikut mengembalikan nilai gaji bersih karyawan maksimum.
SELECT max(NetPay) from Salary;
Maximum(NetPay)
---------------------
83000
MIN
Contoh berikut mengembalikan nilai gaji bersih karyawan minimum dari tabel Gaji.
SELECT min(NetPay) from Salary;
Minimum(NetPay)
---------------------
36000
AVG
Contoh berikut mengembalikan rata-rata nilai gaji bersih karyawan dari tabel.
SELECT avg(NetPay) from Salary;
Average(NetPay)
---------------------
65800
JUMLAH
Contoh berikut menghitung jumlah gaji bersih karyawan dari semua catatan tabel Gaji.
SELECT sum(NetPay) from Salary;
Sum(NetPay)
-----------------
329000
Bab ini menjelaskan fungsi CASE dan COALESCE dari Teradata.
Ekspresi CASE
Ekspresi CASE mengevaluasi setiap baris terhadap kondisi atau klausa WHEN dan mengembalikan hasil dari kecocokan pertama. Jika tidak ada yang cocok maka hasil dari ELSE bagian dari dikembalikan.
Sintaksis
Berikut ini adalah sintaks dari ekspresi CASE.
CASE <expression>
WHEN <expression> THEN result-1
WHEN <expression> THEN result-2
ELSE
Result-n
END
Contoh
Perhatikan tabel Karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartemenNo | Tanggal lahir |
---|---|---|---|---|---|
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 | 1/4/1983 |
104 | Alex | Stuart | 1/2/2008 | 2 | 6/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 1/12/1984 |
Contoh berikut mengevaluasi kolom DepartmentNo dan mengembalikan nilai 1 jika nomor departemen adalah 1; mengembalikan 2 jika nomor departemen adalah 3; jika tidak, ia mengembalikan nilai sebagai departemen yang tidak valid.
SELECT
EmployeeNo,
CASE DepartmentNo
WHEN 1 THEN 'Admin'
WHEN 2 THEN 'IT'
ELSE 'Invalid Dept'
END AS Department
FROM Employee;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
*** 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
Ekspresi CASE di atas juga bisa ditulis dalam bentuk berikut yang akan menghasilkan hasil yang sama seperti di atas.
SELECT
EmployeeNo,
CASE
WHEN DepartmentNo = 1 THEN 'Admin'
WHEN DepartmentNo = 2 THEN 'IT'
ELSE 'Invalid Dept'
END AS Department
FROM Employee;
BERSATU
COALESCE adalah pernyataan yang mengembalikan nilai bukan-null pertama dari ekspresi tersebut. Ia mengembalikan NULL jika semua argumen ekspresi mengevaluasi ke NULL. Berikut adalah sintaksnya.
Sintaksis
COALESCE(expression 1, expression 2, ....)
Contoh
SELECT
EmployeeNo,
COALESCE(dept_no, 'Department not found')
FROM
employee;
NULLIF
Pernyataan NULLIF mengembalikan NULL jika argumennya sama.
Sintaksis
Berikut ini adalah sintaks dari pernyataan NULLIF.
NULLIF(expression 1, expression 2)
Contoh
Contoh berikut mengembalikan NULL jika DepartmentNo sama dengan 3. Jika tidak, ia mengembalikan nilai DepartmentNo.
SELECT
EmployeeNo,
NULLIF(DepartmentNo,3) AS department
FROM Employee;
Kueri di atas mengembalikan rekaman berikut. Anda dapat melihat bahwa karyawan 105 memiliki no departemen. sebagai 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
Indeks utama digunakan untuk menentukan di mana data berada di Teradata. Ini digunakan untuk menentukan AMP mana yang mendapatkan baris data. Setiap tabel di Teradata harus memiliki indeks utama yang ditentukan. Jika indeks utama tidak ditentukan, Teradata secara otomatis menetapkan indeks utama. Indeks utama menyediakan cara tercepat untuk mengakses data. Utama dapat memiliki maksimal 64 kolom.
Indeks utama ditentukan saat membuat tabel. Ada 2 jenis Indeks Utama.
- Indeks Utama Unik (UPI)
- Indeks Utama Tidak Unik (NUPI)
Indeks Utama Unik (UPI)
Jika tabel ditetapkan memiliki UPI, maka kolom yang dianggap sebagai UPI tidak boleh memiliki nilai duplikat. Jika ada nilai duplikat yang disisipkan, nilai tersebut akan ditolak.
Buat Indeks Utama Unik
Contoh berikut membuat tabel Gaji dengan kolom EmployeeNo sebagai Unique Primary Index.
CREATE SET TABLE Salary (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
UNIQUE PRIMARY INDEX(EmployeeNo);
Indeks Utama Tidak Unik (NUPI)
Jika tabel ditetapkan memiliki NUPI, maka kolom yang dianggap UPI dapat menerima nilai duplikat.
Buat Indeks Utama Tidak Unik
Contoh berikut membuat tabel akun karyawan dengan kolom EmployeeNo sebagai Non Unique Primary Index. EmployeeNo didefinisikan sebagai Non Unique Primary Index karena seorang karyawan dapat memiliki banyak akun di tabel; satu untuk akun gaji dan satu lagi untuk akun reimbursement.
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);
Gabung digunakan untuk menggabungkan rekaman dari lebih dari satu tabel. Tabel digabungkan berdasarkan kolom / nilai umum dari tabel ini.
Ada berbagai jenis Gabungan yang tersedia.
- Gabung Batin
- Gabung Luar Kiri
- Gabung Luar Kanan
- Gabung Luar Penuh
- Bergabung Sendiri
- Gabung Silang
- Produksi Cartesian Bergabung
GABUNG DALAM
Inner Join menggabungkan catatan dari beberapa tabel dan mengembalikan nilai yang ada di kedua tabel.
Sintaksis
Berikut ini adalah sintaks dari pernyataan INNER JOIN.
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
Contoh
Perhatikan tabel karyawan dan tabel gaji berikut.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartemenNo | Tanggal lahir |
---|---|---|---|---|---|
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 | 1/4/1983 |
104 | Alex | Stuart | 1/2/2008 | 2 | 6/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 1/12/1984 |
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
Kueri berikut ini menggabungkan tabel Karyawan dan tabel Gaji di kolom umum EmployeeNo. Setiap tabel diberi alias A & B dan kolom direferensikan dengan alias yang benar.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
INNER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo);
Saat kueri di atas dijalankan, ia mengembalikan rekaman berikut. Karyawan 105 tidak disertakan dalam hasil karena tidak memiliki catatan yang cocok di tabel Gaji.
*** 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
OUTER GABUNG
LEFT OUTER JOIN dan RIGHT OUTER JOIN juga menggabungkan hasil dari beberapa tabel.
LEFT OUTER JOIN mengembalikan semua rekaman dari tabel kiri dan hanya mengembalikan rekaman yang cocok dari tabel kanan.
RIGHT OUTER JOIN mengembalikan semua rekaman dari tabel kanan dan hanya mengembalikan baris yang cocok dari tabel kiri.
FULL OUTER JOINmenggabungkan hasil dari LEFT OUTER dan RIGHT OUTER JOINS. Ini mengembalikan baris yang cocok dan tidak cocok dari tabel yang digabungkan.
Sintaksis
Berikut ini adalah sintaks dari pernyataan OUTER JOIN. Anda perlu menggunakan salah satu opsi dari LEFT OUTER JOIN, RIGHT OUTER JOIN atau 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>;
Contoh
Pertimbangkan contoh berikut dari kueri LEFT OUTER JOIN. Ia mengembalikan semua catatan dari tabel Karyawan dan catatan yang cocok dari tabel Gaji.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
LEFT OUTER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo)
ORDER BY A.EmployeeNo;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Untuk karyawan 105, nilai NetPay adalah NULL, karena tidak memiliki catatan yang cocok dalam tabel Gaji.
*** 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 ?
CROSS JOIN
Cross Join menggabungkan setiap baris dari tabel kiri ke setiap baris dari tabel kanan.
Sintaksis
Berikut ini adalah sintaks dari pernyataan 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;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Karyawan No 101 dari tabel Karyawan digabungkan dengan masing-masing dan setiap catatan dari Tabel Gaji.
*** 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
Sebuah subkueri mengembalikan rekaman dari satu tabel berdasarkan nilai dari tabel lain. Ini adalah kueri SELECT di dalam kueri lain. Kueri SELECT yang disebut sebagai kueri dalam dieksekusi terlebih dahulu dan hasilnya digunakan oleh kueri luar. Beberapa fiturnya yang menonjol adalah -
Kueri bisa memiliki beberapa subkueri dan subkueri mungkin berisi subkueri lain.
Subkueri tidak mengembalikan rekaman duplikat.
Jika subkueri hanya mengembalikan satu nilai, Anda bisa menggunakan = operator untuk menggunakannya dengan kueri luar. Jika mengembalikan beberapa nilai, Anda dapat menggunakan IN atau NOT IN.
Sintaksis
Berikut ini adalah sintaks generik subkueri.
SELECT col1, col2, col3,…
FROM
Outer Table
WHERE col1 OPERATOR ( Inner SELECT Query);
Contoh
Perhatikan tabel Gaji berikut.
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
Kueri berikut mengidentifikasi nomor karyawan dengan gaji tertinggi. SELECT bagian dalam melakukan fungsi agregasi untuk mengembalikan nilai NetPay maksimum dan kueri SELECT luar menggunakan nilai ini untuk mengembalikan catatan karyawan dengan nilai ini.
SELECT EmployeeNo, NetPay
FROM Salary
WHERE NetPay =
(SELECT MAX(NetPay)
FROM Salary);
Ketika kueri ini dijalankan, itu menghasilkan keluaran berikut.
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo NetPay
----------- -----------
103 83000
Teradata mendukung tipe tabel berikut untuk menyimpan data sementara.
- Tabel Turunan
- Tabel Volatile
- Tabel Sementara Global
Tabel Turunan
Tabel turunan dibuat, digunakan, dan ditempatkan di dalam kueri. Ini digunakan untuk menyimpan hasil antara dalam kueri.
Contoh
Contoh berikut membuat tabel turunan EmpSal dengan catatan karyawan dengan gaji lebih dari 75.000.
SELECT
Emp.EmployeeNo,
Emp.FirstName,
Empsal.NetPay
FROM
Employee Emp,
(select EmployeeNo , NetPay
from Salary
where NetPay >= 75000) Empsal
where Emp.EmployeeNo = Empsal.EmployeeNo;
Ketika kueri di atas dijalankan, ia mengembalikan karyawan dengan gaji lebih dari 75.000.
*** Query completed. One row found. 3 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo FirstName NetPay
----------- ------------------------------ -----------
103 Peter 83000
Tabel Volatile
Tabel volatil dibuat, digunakan, dan dijatuhkan dalam sesi pengguna. Definisi mereka tidak disimpan dalam kamus data. Mereka menyimpan data perantara dari kueri yang sering digunakan. Berikut adalah sintaksnya.
Sintaksis
CREATE [SET|MULTISET] VOALTILE TABLE tablename
<table definitions>
<column definitions>
<index definitions>
ON COMMIT [DELETE|PRESERVE] ROWS
Contoh
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;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
*** Table has been created.
*** Total elapsed time was 1 second.
Tabel Sementara Global
Definisi tabel Global Temporary disimpan dalam kamus data dan dapat digunakan oleh banyak pengguna / sesi. Tetapi data yang dimuat ke tabel sementara global disimpan hanya selama sesi. Anda dapat membuat hingga 2000 tabel sementara global per sesi. Berikut adalah sintaksnya.
Sintaksis
CREATE [SET|MULTISET] GLOBAL TEMPORARY TABLE tablename
<table definitions>
<column definitions>
<index definitions>
Contoh
CREATE SET GLOBAL TEMPORARY TABLE dept_stat (
dept_no INTEGER,
avg_salary INTEGER,
max_salary INTEGER,
min_salary INTEGER
)
PRIMARY INDEX(dept_no);
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
*** Table has been created.
*** Total elapsed time was 1 second.
Ada tiga jenis spasi yang tersedia di Teradata.
Ruang Permanen
Ruang permanen adalah jumlah maksimum ruang yang tersedia bagi pengguna / database untuk menampung baris data. Tabel permanen, jurnal, tabel fallback dan sub-tabel indeks sekunder menggunakan spasi permanen.
Ruang permanen tidak dialokasikan sebelumnya untuk database / pengguna. Mereka hanya didefinisikan sebagai jumlah maksimum ruang yang dapat digunakan database / pengguna. Jumlah ruang permanen dibagi dengan jumlah AMP. Setiap kali per batas AMP melebihi, pesan kesalahan akan dibuat.
Spool Space
Spool space adalah ruang permanen yang tidak digunakan yang digunakan oleh sistem untuk menyimpan hasil antara kueri SQL. Pengguna tanpa ruang spool tidak dapat menjalankan kueri apa pun.
Mirip dengan ruang permanen, ruang spool menentukan jumlah maksimum ruang yang dapat digunakan pengguna. Ruang spool dibagi dengan jumlah AMP. Setiap kali per batas AMP melebihi, pengguna akan mendapatkan error ruang spool.
Temp Space
Temp space adalah ruang permanen tidak terpakai yang digunakan oleh tabel-tabel Global Temporary. Ruang temp juga dibagi dengan jumlah AMP.
Tabel hanya dapat berisi satu indeks utama. Lebih sering, Anda akan menemukan skenario di mana tabel berisi kolom lain, yang datanya sering diakses. Teradata akan melakukan pemindaian tabel lengkap untuk kueri tersebut. Indeks sekunder mengatasi masalah ini.
Indeks sekunder adalah jalur alternatif untuk mengakses data. Ada beberapa perbedaan antara indeks primer dan indeks sekunder.
Indeks sekunder tidak terlibat dalam distribusi data.
Nilai indeks sekunder disimpan dalam sub tabel. Tabel ini dibuat di semua AMP.
Indeks sekunder bersifat opsional.
Mereka dapat dibuat selama pembuatan tabel atau setelah tabel dibuat.
Mereka menempati ruang tambahan karena mereka membangun sub-tabel dan mereka juga memerlukan pemeliharaan karena sub-tabel perlu diperbarui untuk setiap baris baru.
Ada dua jenis indeks sekunder -
- Unique Secondary Index (USI)
- Indeks Sekunder Non-Unik (NUSI)
Unique Secondary Index (USI)
Indeks Sekunder Unik hanya mengizinkan nilai unik untuk kolom yang ditentukan sebagai USI. Mengakses baris oleh USI adalah operasi dua amp.
Buat Indeks Sekunder Unik
Contoh berikut membuat USI pada kolom EmployeeNo dari tabel karyawan.
CREATE UNIQUE INDEX(EmployeeNo) on employee;
Non Unique Secondary Index (NUSI)
Indeks Sekunder Non-Unik memungkinkan nilai duplikat untuk kolom yang ditentukan sebagai NUSI. Mengakses baris oleh NUSI adalah operasi all-amp.
Buat Indeks Sekunder Non Unik
Contoh berikut membuat NUSI pada kolom FirstName tabel karyawan.
CREATE INDEX(FirstName) on Employee;
Pengoptimal teradata hadir dengan strategi eksekusi untuk setiap kueri SQL. Strategi eksekusi ini didasarkan pada statistik yang dikumpulkan di tabel yang digunakan dalam kueri SQL. Statistik di atas tabel dikumpulkan menggunakan perintah KUMPULKAN STATISTIK. Pengoptimal membutuhkan informasi lingkungan dan demografi data untuk menghasilkan strategi eksekusi yang optimal.
Informasi Lingkungan
- Jumlah Node, AMP, dan CPU
- Jumlah memori
Demografi Data
- Jumlah baris
- Ukuran baris
- Rentang nilai dalam tabel
- Jumlah baris per nilai
- Jumlah Nulls
Ada tiga pendekatan untuk mengumpulkan statistik di atas meja.
- Pengambilan Sampel AMP Acak
- Koleksi statistik lengkap
- Menggunakan opsi SAMPEL
Mengumpulkan Statistik
KUMPULKAN STATISTIK perintah digunakan untuk mengumpulkan statistik di atas meja.
Sintaksis
Berikut ini adalah sintaks dasar untuk mengumpulkan statistik di atas meja.
COLLECT [SUMMARY] STATISTICS
INDEX (indexname) COLUMN (columnname)
ON <tablename>;
Contoh
Contoh berikut mengumpulkan statistik pada kolom EmployeeNo dari tabel Employee.
COLLECT STATISTICS COLUMN(EmployeeNo) ON Employee;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
*** Update completed. 2 rows changed.
*** Total elapsed time was 1 second.
Melihat Statistik
Anda dapat melihat statistik yang dikumpulkan menggunakan perintah BANTUAN STATISTIK.
Sintaksis
Berikut ini adalah sintaks untuk melihat statistik yang dikumpulkan.
HELP STATISTICS <tablename>;
Contoh
Berikut adalah contoh untuk melihat statistik yang dikumpulkan pada tabel Karyawan.
HELP STATISTICS employee;
Ketika query di atas dijalankan, itu menghasilkan hasil sebagai berikut.
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
Kompresi digunakan untuk mengurangi penyimpanan yang digunakan oleh tabel. Di Teradata, kompresi dapat memampatkan hingga 255 nilai berbeda termasuk NULL. Karena penyimpanan berkurang, Teradata dapat menyimpan lebih banyak catatan dalam satu blok. Ini menghasilkan waktu respons kueri yang lebih baik karena operasi I / O apa pun dapat memproses lebih banyak baris per blok. Kompresi dapat ditambahkan saat pembuatan tabel menggunakan CREATE TABLE atau setelah pembuatan tabel menggunakan perintah ALTER TABLE.
Batasan
- Hanya 255 nilai yang dapat dikompresi per kolom.
- Kolom Indeks Utama tidak dapat dikompresi.
- Tabel yang mudah menguap tidak dapat dikompresi.
Kompresi Multi-Nilai (MVC)
Tabel berikut mengompresi bidang DepatmentNo untuk nilai 1, 2, dan 3. Saat kompresi diterapkan pada kolom, nilai untuk kolom ini tidak disimpan dengan baris tersebut. Sebagai gantinya, nilai disimpan di header Tabel di setiap AMP dan hanya bit kehadiran yang ditambahkan ke baris untuk menunjukkan nilainya.
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);
Kompresi Multi-Nilai dapat digunakan jika Anda memiliki kolom dalam tabel besar dengan nilai terbatas.
EXPLAIN perintah mengembalikan rencana eksekusi mesin parsing dalam bahasa Inggris. Ini dapat digunakan dengan pernyataan SQL apa pun kecuali pada perintah MENJELASKAN lainnya. Jika kueri diawali dengan perintah EXPLAIN, rencana eksekusi Mesin Parsing dikembalikan ke pengguna, bukan ke AMP.
Contoh MENJELASKAN
Perhatikan tabel Employee dengan definisi berikut.
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 );
Beberapa contoh rencana MENJELASKAN diberikan di bawah ini.
Scan Tabel Lengkap (FTS)
Jika tidak ada kondisi yang ditentukan dalam pernyataan SELECT, maka pengoptimal dapat memilih untuk menggunakan Pemindaian Tabel Lengkap di mana setiap baris tabel diakses.
Contoh
Berikut ini adalah contoh permintaan dimana pengoptimal dapat memilih FTS.
EXPLAIN SELECT * FROM employee;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Seperti yang dapat dilihat, pengoptimal memilih untuk mengakses semua AMP dan semua baris dalam 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.
Indeks Utama Unik
Jika baris diakses menggunakan Unique Primary Index, maka itu adalah salah satu operasi AMP.
EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Seperti yang dapat dilihat, ini adalah pengambilan AMP tunggal dan pengoptimal menggunakan indeks utama unik untuk mengakses baris.
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.
Indeks Sekunder Unik
Ketika baris diakses menggunakan Indeks Sekunder Unik, itu adalah operasi dua amp.
Contoh
Perhatikan tabel Gaji dengan definisi berikut.
CREATE SET TABLE SALARY,FALLBACK (
EmployeeNo INTEGER,
Gross INTEGER,
Deduction INTEGER,
NetPay INTEGER
)
PRIMARY INDEX ( EmployeeNo )
UNIQUE INDEX (EmployeeNo);
Pertimbangkan pernyataan SELECT berikut.
EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Seperti yang dapat dilihat, pengoptimal mengambil baris dalam operasi dua amp menggunakan indeks sekunder unik.
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.
Persyaratan Tambahan
Berikut adalah daftar istilah yang biasa terlihat dalam rencana MENJELASKAN.
... (Last Use) …
File spool tidak lagi diperlukan dan akan dirilis saat langkah ini selesai.
... with no residual conditions …
Semua kondisi yang berlaku telah diterapkan ke baris.
... END TRANSACTION …
Kunci transaksi dilepaskan, dan perubahan dilakukan.
... eliminating duplicate rows ...
Baris duplikat hanya ada di file spool, bukan tabel set. Melakukan operasi DISTINCT.
... by way of a traversal of index #n extracting row ids only …
File spool dibuat berisi ID Baris yang ditemukan di indeks sekunder (indeks #n)
... we do a SMS (set manipulation step) …
Menggabungkan baris menggunakan operator UNION, MINUS, atau INTERSECT.
... which is redistributed by hash code to all AMPs.
Mendistribusikan ulang data sebagai persiapan untuk bergabung.
... which is duplicated on all AMPs.
Menduplikasi data dari tabel yang lebih kecil (dalam istilah SPOOL) sebagai persiapan untuk bergabung.
... (one_AMP) or (group_AMPs)
Menunjukkan satu AMP atau subset AMP akan digunakan, bukan semua AMP.
Sebuah baris ditetapkan ke AMP tertentu berdasarkan nilai indeks utama. Teradata menggunakan algoritme hashing untuk menentukan AMP mana yang mendapatkan baris tersebut.
Berikut ini adalah diagram tingkat tinggi pada algoritma hashing.
Berikut langkah-langkah penyisipan data.
Klien mengajukan pertanyaan.
Parser menerima kueri dan meneruskan nilai PI dari rekaman ke algoritme hashing.
Algoritme hashing melakukan hash pada nilai indeks utama dan mengembalikan angka 32 bit, yang disebut Row Hash.
Bit orde tinggi dari hash baris (16 bit pertama) digunakan untuk mengidentifikasi entri peta hash. Peta hash berisi satu AMP #. Peta hash adalah serangkaian keranjang yang berisi AMP # tertentu.
BYNET mengirimkan data ke AMP yang diidentifikasi.
AMP menggunakan hash Row 32 bit untuk menemukan baris di dalam disknya.
Jika ada record dengan hash baris yang sama, maka itu akan menambah ID keunikan yaitu angka 32 bit. Untuk hash baris baru, ID keunikan ditetapkan sebagai 1 dan bertambah setiap kali rekaman dengan hash baris yang sama dimasukkan.
Kombinasi Row hash dan Uniqueness ID disebut sebagai Row ID.
ID baris mengawali setiap record di disk.
Setiap baris tabel di AMP secara logis diurutkan berdasarkan ID Barisnya.
Bagaimana Tabel Disimpan
Tabel diurutkan berdasarkan ID Barisnya (hash baris + id keunikan), lalu disimpan dalam AMP. ID baris disimpan dengan setiap baris data.
Row Hash | ID Keunikan | KaryawanNo | Nama depan | Nama keluarga |
---|---|---|---|---|
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 adalah tampilan yang terwujud. Definisinya disimpan secara permanen dan data diperbarui setiap kali tabel dasar yang dirujuk dalam indeks gabungan diperbarui. JOIN INDEX mungkin berisi satu atau lebih tabel dan juga berisi data yang telah digabungkan sebelumnya. Indeks gabungan terutama digunakan untuk meningkatkan kinerja.
Ada berbagai jenis indeks gabungan yang tersedia.
- Indeks Gabungan Tabel Tunggal (STJI)
- Multi Table Join Index (MTJI)
- Indeks Gabungan Gabungan (AJI)
Indeks Gabungan Tabel Tunggal
Indeks Gabungan Tabel Tunggal memungkinkan untuk mempartisi tabel besar berdasarkan kolom indeks utama yang berbeda dari yang dari tabel dasar.
Sintaksis
Berikut ini adalah sintaks dari JOIN INDEX.
CREATE JOIN INDEX <index name>
AS
<SELECT Query>
<Index Definition>;
Contoh
Pertimbangkan tabel Karyawan dan Gaji berikut.
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);
Berikut adalah contoh yang membuat indeks Gabung bernama Employee_JI pada tabel Karyawan.
CREATE JOIN INDEX Employee_JI
AS
SELECT EmployeeNo,FirstName,LastName,
BirthDate,JoinedDate,DepartmentNo
FROM Employee
PRIMARY INDEX(FirstName);
Jika pengguna mengirimkan kueri dengan klausa WHERE di EmployeeNo, sistem akan meminta tabel Karyawan menggunakan indeks utama yang unik. Jika pengguna menanyakan tabel karyawan menggunakan nama_karyawan, maka sistem dapat mengakses indeks gabungan Employee_JI menggunakan nama_karyawan. Baris indeks gabungan di-hash di kolom nama_karyawan. Jika indeks gabungan tidak ditentukan dan nama_karyawan tidak ditentukan sebagai indeks sekunder, maka sistem akan melakukan pemindaian tabel lengkap untuk mengakses baris yang memakan waktu.
Anda dapat menjalankan rencana JELASKAN berikut dan memverifikasi rencana pengoptimal. Dalam contoh berikut, Anda dapat melihat bahwa pengoptimal menggunakan Indeks Gabungan dan bukan tabel Karyawan dasar saat kueri tabel menggunakan kolom Nama_Nama.
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.
Indeks Gabungan Multi Tabel
Indeks gabungan multi-tabel dibuat dengan menggabungkan lebih dari satu tabel. Indeks gabungan multi-tabel dapat digunakan untuk menyimpan kumpulan hasil dari tabel yang sering digabungkan untuk meningkatkan kinerja.
Contoh
Contoh berikut membuat JOIN INDEX bernama Employee_Salary_JI dengan menggabungkan tabel Employee dan Gaji.
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);
Setiap kali tabel dasar Karyawan atau Gaji diperbarui, maka indeks Gabung Employee_Salary_JI juga otomatis diperbarui. Jika Anda menjalankan kueri yang bergabung dengan tabel Karyawan dan Gaji, maka pengoptimal dapat memilih untuk mengakses data dari Employee_Salary_JI secara langsung daripada bergabung dengan tabel. JELASKAN rencana pada kueri dapat digunakan untuk memverifikasi apakah pengoptimal akan memilih tabel dasar atau Bergabung dengan indeks.
Indeks Gabungan Gabungan
Jika tabel secara konsisten digabungkan pada kolom tertentu, maka indeks gabungan gabungan dapat ditentukan pada tabel untuk meningkatkan kinerja. Salah satu batasan indeks gabungan agregat adalah bahwa ia hanya mendukung fungsi SUM dan COUNT.
Contoh
Dalam contoh berikut, Karyawan dan Gaji digabungkan untuk mengidentifikasi gaji total per Departemen.
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);
Tampilan adalah objek database yang dibuat oleh kueri. Tampilan dapat dibangun menggunakan satu tabel atau beberapa tabel dengan cara bergabung. Definisi mereka disimpan secara permanen dalam kamus data tetapi mereka tidak menyimpan salinan data. Data untuk tampilan dibuat secara dinamis.
Tampilan mungkin berisi subset baris tabel atau subset kolom tabel.
Buat Tampilan
Tampilan dibuat menggunakan pernyataan CREATE VIEW.
Sintaksis
Berikut adalah sintaks untuk membuat view.
CREATE/REPLACE VIEW <viewname>
AS
<select query>;
Contoh
Perhatikan tabel Karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | Tanggal lahir |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 6/11/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 1/12/1984 |
103 | Peter | Paul | 1/4/1983 |
Contoh berikut membuat tampilan pada tabel Karyawan.
CREATE VIEW Employee_View
AS
SELECT
EmployeeNo,
FirstName,
LastName,
FROM
Employee;
Menggunakan Views
Anda dapat menggunakan pernyataan SELECT biasa untuk mengambil data dari Views.
Contoh
Contoh berikut mengambil record dari Employee_View;
SELECT EmployeeNo, FirstName, LastName FROM Employee_View;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
*** 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
Mengubah Tampilan
Tampilan yang ada dapat dimodifikasi menggunakan pernyataan REPLACE VIEW.
Berikut ini adalah sintaks untuk mengubah tampilan.
REPLACE VIEW <viewname>
AS
<select query>;
Contoh
Contoh berikut mengubah tampilan Employee_View untuk menambahkan kolom tambahan.
REPLACE VIEW Employee_View
AS
SELECT
EmployeeNo,
FirstName,
BirthDate,
JoinedDate
DepartmentNo
FROM
Employee;
Tampilan Drop
Tampilan yang ada dapat dijatuhkan menggunakan pernyataan DROP VIEW.
Sintaksis
Berikut ini adalah sintaks DROP VIEW.
DROP VIEW <viewname>;
Contoh
Berikut adalah contoh untuk menghilangkan tampilan Employee_View.
DROP VIEW Employee_View;
Keuntungan Views
Tampilan memberikan tingkat keamanan tambahan dengan membatasi baris atau kolom tabel.
Pengguna hanya dapat diberikan akses ke tampilan, bukan tabel dasar.
Menyederhanakan penggunaan beberapa tabel dengan menggabungkannya terlebih dahulu menggunakan Views.
Makro adalah sekumpulan pernyataan SQL yang disimpan dan dijalankan dengan memanggil nama Makro. Definisi Makro disimpan di Kamus Data. Pengguna hanya membutuhkan hak istimewa EXEC untuk menjalankan Makro. Pengguna tidak memerlukan hak istimewa terpisah pada objek database yang digunakan di dalam Makro. Pernyataan makro dijalankan sebagai transaksi tunggal. Jika salah satu pernyataan SQL di Makro gagal, semua pernyataan akan dibatalkan. Makro dapat menerima parameter. Makro dapat berisi pernyataan DDL, tetapi itu harus menjadi pernyataan terakhir di Makro.
Buat Makro
Makro dibuat menggunakan pernyataan CREATE MACRO.
Sintaksis
Berikut ini adalah sintaks umum dari perintah CREATE MACRO.
CREATE MACRO <macroname> [(parameter1, parameter2,...)] (
<sql statements>
);
Contoh
Perhatikan tabel Karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | Tanggal lahir |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 6/11/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 1/12/1984 |
103 | Peter | Paul | 1/4/1983 |
Contoh berikut membuat Makro yang disebut Get_Emp. Ini berisi pernyataan pilih untuk mengambil catatan dari tabel karyawan.
CREATE MACRO Get_Emp AS (
SELECT
EmployeeNo,
FirstName,
LastName
FROM
employee
ORDER BY EmployeeNo;
);
Menjalankan Makro
Makro dijalankan menggunakan perintah EXEC.
Sintaksis
Berikut ini adalah sintaks dari perintah EXECUTE MACRO.
EXEC <macroname>;
Contoh
Contoh berikut menjalankan nama Makro Get_Emp; Ketika perintah berikut dijalankan, itu mengambil semua catatan dari tabel karyawan.
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
Makro Parameter
Makro Teradata dapat menerima parameter. Dalam Makro, parameter ini direferensikan dengan; (titik koma).
Berikut adalah contoh Makro yang menerima parameter.
CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS (
SELECT
EmployeeNo,
NetPay
FROM
Salary
WHERE EmployeeNo = :EmployeeNo;
);
Menjalankan Makro Parameter
Makro dijalankan menggunakan perintah EXEC. Anda memerlukan hak EXEC untuk menjalankan Macro.
Sintaksis
Berikut adalah sintaks dari pernyataan EXECUTE MACRO.
EXEC <macroname>(value);
Contoh
Contoh berikut menjalankan nama Makro Get_Emp; Ini menerima karyawan no sebagai parameter dan mengekstrak catatan dari tabel karyawan untuk karyawan itu.
EXEC Get_Emp_Salary(101);
*** Query completed. One row found. 2 columns returned.
*** Total elapsed time was 1 second.
EmployeeNo NetPay
----------- ------------
101 36000
Prosedur tersimpan berisi sekumpulan pernyataan SQL dan pernyataan prosedural. Mereka mungkin hanya berisi pernyataan prosedural. Definisi prosedur tersimpan disimpan dalam database dan parameter disimpan dalam tabel kamus data.
Keuntungan
Prosedur yang disimpan mengurangi beban jaringan antara klien dan server.
Memberikan keamanan yang lebih baik karena data diakses melalui prosedur yang tersimpan daripada mengaksesnya secara langsung.
Memberikan pemeliharaan yang lebih baik karena logika bisnis diuji dan disimpan di server.
Membuat Prosedur
Prosedur Tersimpan dibuat menggunakan pernyataan CREATE PROCEDURE.
Sintaksis
Berikut ini adalah sintaks umum dari pernyataan CREATE PROCEDURE.
CREATE PROCEDURE <procedurename> ( [parameter 1 data type, parameter 2 data type..] )
BEGIN
<SQL or SPL statements>;
END;
Contoh
Perhatikan Tabel Gaji berikut ini.
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
Contoh berikut membuat prosedur tersimpan bernama Sisipan Gaji untuk menerima nilai dan menyisipkan ke dalam Tabel Gaji.
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;
Prosedur Pelaksanaan
Prosedur Tersimpan dijalankan menggunakan pernyataan CALL.
Sintaksis
Berikut ini adalah sintaks umum dari pernyataan CALL.
CALL <procedure name> [(parameter values)];
Contoh
Contoh berikut memanggil prosedur tersimpan Sisipkan Gaji dan menyisipkan catatan ke Tabel Gaji.
CALL InsertSalary(105,20000,2000,18000);
Setelah query di atas dijalankan, itu menghasilkan output berikut dan Anda dapat melihat baris yang disisipkan di tabel Gaji.
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
Bab ini membahas berbagai strategi JOIN yang tersedia di Teradata.
Bergabunglah dengan Metode
Teradata menggunakan metode gabungan yang berbeda untuk melakukan operasi gabungan. Beberapa metode Gabung yang umum digunakan adalah -
- Gabung Gabung
- Gabung Bersarang
- Produk Bergabung
Gabung Gabung
Metode Merge Join terjadi jika penggabungan didasarkan pada kondisi kesetaraan. Gabung Gabung mengharuskan baris penggabung berada di AMP yang sama. Baris digabungkan berdasarkan hash baris mereka. Merge Join menggunakan strategi penggabungan yang berbeda untuk membawa baris ke AMP yang sama.
Strategi # 1
Jika kolom penghubung adalah indeks utama dari tabel yang sesuai, baris penghubung sudah ada di AMP yang sama. Dalam kasus ini, tidak diperlukan distribusi.
Pertimbangkan Tabel Karyawan dan Gaji berikut.
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);
Jika kedua tabel ini digabungkan pada kolom EmployeeNo, maka tidak ada redistribusi yang terjadi karena EmployeeNo adalah indeks utama dari kedua tabel yang akan digabungkan.
Strategi # 2
Pertimbangkan tabel Karyawan dan Departemen berikut.
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 );
Jika kedua tabel ini digabungkan pada kolom DeparmentNo, maka baris perlu didistribusikan kembali karena DepartmentNo adalah indeks utama dalam satu tabel dan indeks non-primer di tabel lain. Dalam skenario ini, menggabungkan baris mungkin tidak berada di AMP yang sama. Dalam kasus seperti itu, Teradata dapat mendistribusikan kembali tabel karyawan di kolom DepartmentNo.
Strategi # 3
Untuk tabel Karyawan dan Departemen di atas, Teradata dapat menduplikasi tabel Departemen di semua AMP, jika ukuran tabel Departemen kecil.
Gabung Bersarang
Nested Join tidak menggunakan semua AMP. Untuk Nested Join berlangsung, salah satu syaratnya harus sama pada indeks utama unik dari satu tabel dan kemudian menggabungkan kolom ini ke indeks manapun di tabel lain.
Dalam skenario ini, sistem akan mengambil satu baris menggunakan indeks Primer Unik dari satu tabel dan menggunakan hash baris tersebut untuk mengambil rekaman yang cocok dari tabel lain. Gabung bersarang adalah metode Gabung yang paling efisien.
Produk Bergabung
Product Join membandingkan setiap baris kualifikasi dari satu tabel dengan setiap baris kualifikasi dari tabel lainnya. Penggabungan produk dapat terjadi karena beberapa faktor berikut -
- Dimana kondisinya hilang.
- Kondisi join tidak didasarkan pada kondisi kesetaraan.
- Alias tabel salah.
- Kondisi sambungan ganda.
Partitioned Primary Index (PPI) adalah mekanisme pengindeksan yang berguna dalam meningkatkan kinerja kueri tertentu. Saat baris disisipkan ke dalam tabel, baris tersebut disimpan di AMP dan disusun berdasarkan urutan hash barisnya. Ketika tabel didefinisikan dengan PPI, baris diurutkan berdasarkan nomor partisinya. Dalam setiap partisi, mereka diatur oleh hash baris mereka. Baris ditetapkan ke partisi berdasarkan ekspresi partisi yang ditentukan.
Keuntungan
Hindari pemindaian tabel penuh untuk kueri tertentu.
Hindari menggunakan indeks sekunder yang memerlukan struktur fisik tambahan dan pemeliharaan I / O tambahan.
Akses subset dari tabel besar dengan cepat.
Jatuhkan data lama dengan cepat dan tambahkan data baru.
Contoh
Pertimbangkan tabel Pesanan berikut dengan Indeks Utama di OrderNo.
TokoNo | Nomor pesanan | Tanggal pemesanan | 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 |
Asumsikan bahwa record didistribusikan di antara AMP seperti yang ditunjukkan pada tabel berikut. Rekaman disimpan di AMP, diurutkan berdasarkan hash barisnya.
RowHash | Nomor pesanan | Tanggal pemesanan |
---|---|---|
1 | 7505 | 2015-10-03 |
2 | 7504 | 2015-10-03 |
3 | 7501 | 2015-10-01 |
4 | 7508 | 2015-10-05 |
RowHash | Nomor pesanan | Tanggal pemesanan |
---|---|---|
1 | 7507 | 2015-10-05 |
2 | 7502 | 2015-10-02 |
3 | 7506 | 2015-10-04 |
4 | 7503 | 2015-10-02 |
Jika Anda menjalankan kueri untuk mengekstrak pesanan untuk tanggal tertentu, maka pengoptimal dapat memilih untuk menggunakan Pemindaian Tabel Lengkap, kemudian semua catatan dalam AMP dapat diakses. Untuk menghindari hal ini, Anda dapat menentukan tanggal pemesanan sebagai Partitioned Primary Index. Ketika baris disisipkan ke dalam tabel pesanan, mereka dipartisi berdasarkan tanggal pemesanan. Dalam setiap partisi mereka akan diurutkan berdasarkan hash baris mereka.
Data berikut menunjukkan bagaimana record akan disimpan di AMP, jika dipartisi berdasarkan Tanggal Pemesanan. Jika kueri dijalankan untuk mengakses catatan menurut Tanggal Pemesanan, maka hanya partisi yang berisi catatan untuk pesanan tertentu yang akan diakses.
Partisi | RowHash | Nomor pesanan | Tanggal pemesanan |
---|---|---|---|
0 | 3 | 7501 | 2015-10-01 |
1 | 1 | 7505 | 2015-10-03 |
1 | 2 | 7504 | 2015-10-03 |
2 | 4 | 7508 | 2015-10-05 |
Partisi | RowHash | Nomor pesanan | Tanggal pemesanan |
---|---|---|---|
0 | 2 | 7502 | 2015-10-02 |
0 | 4 | 7503 | 2015-10-02 |
1 | 3 | 7506 | 2015-10-04 |
2 | 1 | 7507 | 2015-10-05 |
Berikut ini adalah contoh membuat tabel dengan indeks utama partisi. PARTITION BY klausa digunakan untuk mendefinisikan partisi.
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
);
Dalam contoh di atas, tabel dipartisi oleh kolom OrderDate. Akan ada satu partisi terpisah untuk setiap hari.
Fungsi OLAP mirip dengan fungsi agregat kecuali bahwa fungsi agregat hanya akan mengembalikan satu nilai sedangkan fungsi OLAP akan menyediakan baris individual selain agregat.
Sintaksis
Berikut ini adalah sintaks umum fungsi OLAP.
<aggregate function> OVER
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)
Fungsi agregasi dapat berupa SUM, COUNT, MAX, MIN, AVG.
Contoh
Perhatikan tabel Gaji berikut.
KaryawanNo | Kotor | Deduksi | Gaji bersih |
---|---|---|---|
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 |
Berikut adalah contoh untuk menemukan jumlah kumulatif atau menjalankan total NetPay pada tabel Gaji. Catatan diurutkan berdasarkan EmployeeNo dan jumlah kumulatif dihitung pada kolom NetPay.
SELECT
EmployeeNo, NetPay,
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS
UNBOUNDED PRECEDING) as TotalSalary
FROM Salary;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
EmployeeNo NetPay TotalSalary
----------- ----------- -----------
101 36000 36000
102 74000 110000
103 83000 193000
104 70000 263000
105 18000 281000
PANGKAT
Fungsi RANK mengurutkan rekaman berdasarkan kolom yang disediakan. Fungsi RANK juga dapat memfilter jumlah record yang dikembalikan berdasarkan ranking.
Sintaksis
Berikut ini adalah sintaks umum untuk menggunakan fungsi RANK.
RANK() OVER
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])
Contoh
Perhatikan tabel Karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | JoinedDate | DepartmentID | Tanggal lahir |
---|---|---|---|---|---|
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 | 1/4/1983 |
104 | Alex | Stuart | 1/2/2008 | 2 | 6/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 1/12/1984 |
Kueri berikut mengurutkan rekaman tabel karyawan berdasarkan Tanggal Bergabung dan menetapkan peringkat pada Tanggal Bergabung.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(ORDER BY JoinedDate) as Seniority
FROM Employee;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut.
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
Klausa PARTITION BY mengelompokkan data menurut kolom yang ditentukan dalam klausa PARTITION BY dan menjalankan fungsi OLAP dalam setiap grup. Berikut ini adalah contoh dari query yang menggunakan klausa PARTITION BY.
SELECT EmployeeNo, JoinedDate,RANK()
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority
FROM Employee;
Ketika query di atas dijalankan, itu menghasilkan keluaran sebagai berikut. Anda dapat melihat bahwa Peringkat diatur ulang untuk setiap Departemen.
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
Bab ini membahas fitur yang tersedia untuk perlindungan data di Teradata.
Jurnal Transien
Teradata menggunakan Transient Journal untuk melindungi data dari kegagalan transaksi. Setiap kali ada transaksi yang dijalankan, jurnal Transient menyimpan salinan gambar sebelumnya dari baris yang terpengaruh hingga transaksi berhasil atau berhasil dibatalkan. Kemudian, gambar sebelumnya dibuang. Jurnal transien disimpan di setiap AMP. Ini adalah proses otomatis dan tidak dapat dinonaktifkan.
Fallback
Fallback melindungi data tabel dengan menyimpan salinan kedua baris tabel di AMP lain yang disebut AMP Fallback. Jika salah satu AMP gagal, baris fallback diakses. Dengan ini, meskipun salah satu AMP gagal, datanya masih tersedia melalui AMP cadangan. Opsi fallback dapat digunakan pada pembuatan tabel atau setelah pembuatan tabel. Penggantian memastikan bahwa salinan kedua dari baris tabel selalu disimpan di AMP lain untuk melindungi data dari kegagalan AMP. Namun, fallback menempati dua kali penyimpanan dan I / O untuk Sisipkan / Hapus / Perbarui.
Diagram berikut menunjukkan bagaimana salinan fallback baris disimpan di AMP lain.
Bawah Jurnal Pemulihan AMP
Jurnal pemulihan AMP Bawah diaktifkan saat AMP gagal dan tabel dilindungi fallback. Jurnal ini melacak semua perubahan pada data AMP yang gagal. Jurnal diaktifkan di AMP yang tersisa di cluster. Ini adalah proses otomatis dan tidak dapat dinonaktifkan. Setelah AMP yang gagal ditayangkan, data dari jurnal pemulihan AMP Bawah disinkronkan dengan AMP. Setelah ini selesai, jurnal tersebut akan dibuang.
Klik
Clique adalah mekanisme yang digunakan oleh Teradata untuk melindungi data dari kegagalan Node. Sebuah klik tidak lain adalah kumpulan node Teradata yang berbagi kumpulan Disk Array yang sama. Ketika sebuah node gagal, maka vprocs dari node yang gagal akan bermigrasi ke node lain dalam klik dan terus mengakses array disk mereka.
Hot Standby Node
Hot Standby Node adalah node yang tidak berpartisipasi dalam lingkungan produksi. Jika sebuah node gagal maka vprocs dari node yang gagal akan bermigrasi ke node siaga panas. Setelah simpul yang gagal dipulihkan, itu menjadi simpul siaga panas. Node Hot Standby digunakan untuk mempertahankan kinerja jika terjadi kegagalan node.
SERANGAN
Redundant Array of Independent Disks (RAID) adalah mekanisme yang digunakan untuk melindungi data dari Kegagalan Disk. Disk Array terdiri dari sekumpulan disk yang dikelompokkan sebagai unit logis. Unit ini mungkin terlihat seperti satu unit bagi pengguna tetapi mereka mungkin tersebar di beberapa disk.
RAID 1 biasanya digunakan di Teradata. Dalam RAID 1, setiap disk dikaitkan dengan disk cermin. Setiap perubahan pada data di disk utama juga tercermin dalam salinan cermin. Jika disk utama gagal, maka data dari disk cermin dapat diakses.
Bab ini membahas berbagai strategi manajemen pengguna di Teradata.
Pengguna
Seorang pengguna dibuat menggunakan perintah CREATE USER. Di Teradata, pengguna juga mirip dengan database. Keduanya dapat diberi ruang dan berisi objek database kecuali bahwa pengguna diberi kata sandi.
Sintaksis
Berikut adalah sintaks untuk CREATE USER.
CREATE USER username
AS
[PERMANENT|PERM] = n BYTES
PASSWORD = password
TEMPORARY = n BYTES
SPOOL = n BYTES;
Saat membuat pengguna, nilai untuk nama pengguna, spasi permanen, dan Kata Sandi wajib diisi. Bidang lain bersifat opsional.
Contoh
Berikut adalah contoh untuk membuat pengguna TD01.
CREATE USER TD01
AS
PERMANENT = 1000000 BYTES
PASSWORD = ABC$124
TEMPORARY = 1000000 BYTES
SPOOL = 1000000 BYTES;
Akun
Saat membuat pengguna baru, pengguna mungkin ditugaskan ke sebuah akun. Opsi AKUN di CREATE USER digunakan untuk menetapkan akun. Seorang pengguna dapat ditetapkan ke beberapa akun.
Sintaksis
Berikut adalah sintaks untuk CREATE USER dengan opsi akun.
CREATE USER username
PERM = n BYTES
PASSWORD = password
ACCOUNT = accountid
Contoh
Contoh berikut membuat pengguna TD02 dan menetapkan akun sebagai TI dan Admin.
CREATE USER TD02
AS
PERMANENT = 1000000 BYTES
PASSWORD = abc$123
TEMPORARY = 1000000 BYTES
SPOOL = 1000000 BYTES
ACCOUNT = (‘IT’,’Admin’);
Pengguna dapat menentukan id akun saat masuk ke sistem Teradata atau setelah masuk ke sistem menggunakan perintah SET SESSION.
.LOGON username, passowrd,accountid
OR
SET SESSION ACCOUNT = accountid
Berikan Hak Istimewa
Perintah GRANT digunakan untuk menetapkan satu atau lebih hak istimewa pada objek database ke pengguna atau database.
Sintaksis
Berikut ini adalah sintaks dari perintah GRANT.
GRANT privileges ON objectname TO username;
Hak istimewa bisa SISIPKAN, PILIH, PEMBARUAN, REFERENSI.
Contoh
Berikut adalah contoh pernyataan GRANT.
GRANT SELECT,INSERT,UPDATE ON Employee TO TD01;
Cabut Hak Istimewa
Perintah REVOKE menghapus hak istimewa dari pengguna atau database. Perintah REVOKE hanya dapat menghapus hak khusus.
Sintaksis
Berikut ini adalah sintaks dasar untuk perintah REVOKE.
REVOKE [ALL|privileges] ON objectname FROM username;
Contoh
Berikut adalah contoh perintah REVOKE.
REVOKE INSERT,SELECT ON Employee FROM TD01;
Bab ini membahas prosedur penyetelan kinerja di Teradata.
Menjelaskan
Langkah pertama dalam penyesuaian kinerja adalah penggunaan JELASKAN pada kueri Anda. JELASKAN rencana memberikan detail tentang bagaimana pengoptimal akan menjalankan kueri Anda. Dalam paket Jelaskan, periksa kata kunci seperti tingkat kepercayaan, strategi penggabungan yang digunakan, ukuran file spool, distribusi ulang, dll.
Kumpulkan Statistik
Pengoptimal menggunakan demografi Data untuk menghasilkan strategi eksekusi yang efektif. Perintah KUMPULKAN STATISTIK digunakan untuk mengumpulkan data demografi dari tabel. Pastikan statistik yang dikumpulkan di kolom adalah yang terbaru.
Kumpulkan statistik pada kolom yang digunakan dalam klausa WHERE dan pada kolom yang digunakan dalam kondisi penggabungan.
Kumpulkan statistik di kolom Indeks Utama Unik.
Kumpulkan statistik pada kolom Indeks Sekunder Non Unik. Pengoptimal akan memutuskan apakah dapat menggunakan NUSI atau Full Table Scan.
Kumpulkan statistik pada Indeks Bergabung meskipun statistik pada tabel dasar dikumpulkan.
Kumpulkan statistik pada kolom partisi.
Jenis Data
Pastikan bahwa tipe data yang tepat digunakan. Ini akan menghindari penggunaan penyimpanan yang berlebihan dari yang dibutuhkan.
Konversi
Pastikan bahwa tipe data dari kolom yang digunakan dalam kondisi gabungan kompatibel untuk menghindari konversi data eksplisit.
Menyortir
Hapus klausa ORDER BY yang tidak perlu kecuali diperlukan.
Masalah Spul Space
Error ruang spool dibuat jika kueri melebihi batas ruang spool per AMP untuk pengguna tersebut. Verifikasi rencana penjelasan dan identifikasi langkah yang menghabiskan lebih banyak ruang spool. Kueri perantara ini dapat dipisahkan dan diletakkan secara terpisah untuk membuat tabel sementara.
Indeks Utama
Pastikan bahwa Indeks Utama ditentukan dengan benar untuk tabel. Kolom indeks utama harus mendistribusikan data secara merata dan harus sering digunakan untuk mengakses data.
SET Tabel
Jika Anda mendefinisikan tabel SET, maka pengoptimal akan memeriksa apakah record tersebut duplikat untuk setiap record yang dimasukkan. Untuk menghapus kondisi pemeriksaan duplikat, Anda dapat menentukan Indeks Sekunder Unik untuk tabel.
UPDATE di Meja Besar
Memperbarui tabel besar akan memakan waktu. Alih-alih memperbarui tabel, Anda bisa menghapus rekaman dan menyisipkan rekaman dengan baris yang dimodifikasi.
Menjatuhkan Tabel Sementara
Jatuhkan tabel sementara (tabel pementasan) dan volatile jika tidak lagi diperlukan. Ini akan membebaskan ruang permanen dan ruang spool.
Tabel MULTISET
Jika Anda yakin bahwa record input tidak akan memiliki record duplikat, maka Anda dapat menentukan tabel target sebagai tabel MULTISET untuk menghindari pemeriksaan baris duplikat yang digunakan oleh tabel SET.
Utilitas FastLoad digunakan untuk memuat data ke dalam tabel kosong. Karena tidak menggunakan jurnal transien, data dapat dimuat dengan cepat. Itu tidak memuat baris duplikat bahkan jika tabel target adalah tabel MULTISET.
Keterbatasan
Tabel target tidak boleh memiliki indeks sekunder, indeks gabungan, dan referensi kunci asing.
Bagaimana FastLoad Bekerja
FastLoad dijalankan dalam dua fase.
Tahap 1
Mesin Parsing membaca catatan dari file input dan mengirim blok ke setiap AMP.
Setiap AMP menyimpan blok catatan.
Kemudian AMP mencirikan setiap catatan dan mendistribusikannya kembali ke AMP yang benar.
Di akhir Tahap 1, setiap AMP memiliki barisnya sendiri tetapi tidak dalam urutan hash baris.
Tahap 2
Fase 2 dimulai ketika FastLoad menerima pernyataan END LOADING.
Setiap AMP mengurutkan record pada hash baris dan menulisnya ke disk.
Kunci pada tabel target dilepaskan dan tabel kesalahan dijatuhkan.
Contoh
Buat file teks dengan record berikut dan beri nama file sebagai employee.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
Berikut ini contoh script FastLoad untuk memuat file di atas ke dalam tabel 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;
Menjalankan FastLoad Script
Setelah file input employee.txt dibuat dan skrip FastLoad dinamai EmployeeLoad.fl, Anda dapat menjalankan skrip FastLoad menggunakan perintah berikut di UNIX dan Windows.
FastLoad < EmployeeLoad.fl;
Setelah perintah di atas dijalankan, script FastLoad akan berjalan dan menghasilkan log. Di log, Anda dapat melihat jumlah catatan yang diproses oleh FastLoad dan kode status.
**** 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
Persyaratan FastLoad
Berikut adalah daftar istilah umum yang digunakan dalam skrip FastLoad.
LOGON - Masuk ke Teradata dan memulai satu atau lebih sesi.
DATABASE - Mengatur database default.
BEGIN LOADING - Mengidentifikasi tabel yang akan dimuat.
ERRORFILES - Mengidentifikasi 2 tabel kesalahan yang perlu dibuat / diperbarui.
CHECKPOINT - Mendefinisikan kapan harus mengambil pos pemeriksaan.
SET RECORD - Menentukan apakah format file input diformat, biner, teks atau tidak diformat.
DEFINE - Mendefinisikan tata letak file input.
FILE - Menentukan nama file input dan jalur.
INSERT - Menyisipkan record dari file input ke dalam tabel target.
END LOADING- Memulai fase 2 FastLoad. Mendistribusikan catatan ke dalam tabel target.
LOGOFF - Mengakhiri semua sesi dan mengakhiri FastLoad.
MultiLoad dapat memuat banyak tabel sekaligus dan juga dapat melakukan berbagai jenis tugas seperti INSERT, DELETE, UPDATE dan UPSERT. Itu dapat memuat hingga 5 tabel sekaligus dan melakukan hingga 20 operasi DML dalam sebuah skrip. Tabel target tidak diperlukan untuk MultiLoad.
MultiLoad mendukung dua mode -
- IMPORT
- DELETE
MultiLoad membutuhkan meja kerja, tabel log dan dua tabel kesalahan di samping tabel target.
Log Table - Digunakan untuk menjaga pos pemeriksaan yang diambil selama pemuatan yang akan digunakan untuk memulai kembali.
Error Tables- Tabel ini dimasukkan selama pemuatan ketika terjadi kesalahan. Tabel kesalahan pertama menyimpan kesalahan konversi sedangkan tabel kesalahan kedua menyimpan catatan duplikat.
Log Table - Mempertahankan hasil dari setiap fase MultiLoad untuk tujuan restart.
Work table- Skrip MultiLoad membuat satu meja kerja per tabel target. Meja kerja digunakan untuk menyimpan tugas-tugas DML dan data masukan.
Keterbatasan
MultiLoad memiliki beberapa batasan.
- Indeks Sekunder Unik tidak didukung pada tabel target.
- Integritas referensial tidak didukung.
- Pemicu tidak didukung.
Bagaimana MultiLoad Bekerja
Impor MultiLoad memiliki lima fase -
Phase 1 - Tahap Awal - Melakukan aktivitas pengaturan dasar.
Phase 2 - Fase Transaksi DML - Memverifikasi sintaks pernyataan DML dan membawanya ke sistem Teradata.
Phase 3 - Tahap Akuisisi - Membawa data input ke dalam tabel kerja dan mengunci tabel.
Phase 4 - Tahap Aplikasi - Menerapkan semua operasi DML.
Phase 5 - Fase Pembersihan - Melepaskan kunci meja.
Langkah-langkah yang terlibat dalam skrip MultiLoad adalah -
Step 1 - Siapkan tabel log.
Step 2 - Masuk ke Teradata.
Step 3 - Tentukan tabel Target, Work dan Error.
Step 4 - Tentukan tata letak file INPUT.
Step 5 - Tentukan kueri DML.
Step 6 - Beri nama file IMPOR.
Step 7 - Tentukan LAYOUT yang akan digunakan.
Step 8 - Mulai Load.
Step 9 - Selesaikan pemuatan dan akhiri sesi.
Contoh
Buat file teks dengan record berikut dan beri nama file sebagai employee.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
Contoh berikut adalah skrip MultiLoad yang membaca catatan dari tabel karyawan dan memuat ke tabel 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;
Mengeksekusi MultiLoad Script
Setelah file input employee.txt dibuat dan skrip multiload dinamai EmployeeLoad.ml, Anda dapat menjalankan skrip Multiload menggunakan perintah berikut di UNIX dan Windows.
Multiload < EmployeeLoad.ml;
Utilitas FastExport digunakan untuk mengekspor data dari tabel Teradata menjadi file datar. Itu juga dapat menghasilkan data dalam format laporan. Data dapat diekstraksi dari satu atau beberapa tabel menggunakan Gabung. Karena FastExport mengekspor data dalam 64K blok, ini berguna untuk mengekstrak data dalam jumlah besar.
Contoh
Perhatikan tabel Karyawan berikut.
KaryawanNo | Nama depan | Nama keluarga | Tanggal lahir |
---|---|---|---|
101 | Mike | James | 1/5/1980 |
104 | Alex | Stuart | 6/11/1984 |
102 | Robert | Williams | 3/5/1983 |
105 | Robert | James | 1/12/1984 |
103 | Peter | Paul | 1/4/1983 |
Berikut adalah contoh skrip FastExport. Ini mengekspor data dari tabel karyawan dan menulis ke dalam file 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;
Menjalankan FastExport Script
Setelah skrip ditulis dan dinamai sebagai employee.fx, Anda dapat menggunakan perintah berikut untuk menjalankan skrip.
fexp < employee.fx
Setelah menjalankan perintah di atas, Anda akan menerima output berikut di file 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
Ketentuan FastExport
Berikut adalah daftar istilah yang biasa digunakan dalam skrip FastExport.
LOGTABLE - Menentukan tabel log untuk tujuan restart.
LOGON - Masuk ke Teradata dan memulai satu atau lebih sesi.
DATABASE - Mengatur database default.
BEGIN EXPORT - Menunjukkan awal ekspor.
EXPORT - Menentukan file target dan format ekspor.
SELECT - Menentukan kueri pemilihan untuk mengekspor data.
END EXPORT - Menentukan akhir FastExport.
LOGOFF - Mengakhiri semua sesi dan mengakhiri FastExport.
Utilitas BTEQ adalah utilitas yang kuat di Teradata yang dapat digunakan dalam mode batch dan interaktif. Ini dapat digunakan untuk menjalankan pernyataan DDL, pernyataan DML, membuat Makro, dan prosedur tersimpan. BTEQ dapat digunakan untuk mengimpor data ke tabel Teradata dari file datar dan juga dapat digunakan untuk mengekstrak data dari tabel menjadi file atau laporan.
Persyaratan BTEQ
Berikut adalah daftar istilah yang biasa digunakan dalam skrip BTEQ.
LOGON - Digunakan untuk masuk ke sistem Teradata.
ACTIVITYCOUNT - Mengembalikan jumlah baris yang dipengaruhi oleh kueri sebelumnya.
ERRORCODE - Mengembalikan kode status dari kueri sebelumnya.
DATABASE - Mengatur database default.
LABEL - Menetapkan label ke sekumpulan perintah SQL.
RUN FILE - Menjalankan kueri yang ada dalam file.
GOTO - Mentransfer kontrol ke label.
LOGOFF - Keluar dari database dan mengakhiri semua sesi.
IMPORT - Menentukan jalur file input.
EXPORT - Menentukan jalur file keluaran dan memulai ekspor.
Contoh
Berikut ini adalah contoh skrip BTEQ.
.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;
Skrip di atas melakukan tugas-tugas berikut.
Masuk ke Sistem Teradata.
Mengatur Basis Data Default.
Membuat tabel yang disebut employee_bkup.
Memilih satu catatan dari tabel Karyawan untuk memeriksa apakah tabel memiliki catatan.
Menurunkan tabel employee_bkup, jika tabel kosong.
Mentransfer kontrol ke Label InsertEmployee yang menyisipkan catatan ke tabel employee_bkup
Periksa ERRORCODE untuk memastikan bahwa pernyataan tersebut berhasil, mengikuti setiap pernyataan SQL.
ACTIVITYCOUNT mengembalikan jumlah catatan yang dipilih / dipengaruhi oleh kueri SQL sebelumnya.