Teradata - Hızlı Kılavuz

Teradata nedir?

Teradata, popüler İlişkisel Veritabanı Yönetim Sistemlerinden biridir. Esas olarak büyük ölçekli veri depolama uygulamaları oluşturmak için uygundur. Teradata bunu paralellik kavramıyla başarır. Teradata adlı şirket tarafından geliştirilmiştir.

Teradata Tarihi

Aşağıda, önemli kilometre taşlarını listeleyen Teradata tarihinin hızlı bir özeti bulunmaktadır.

  • 1979 - Teradata kuruldu.

  • 1984 - İlk veritabanı bilgisayarı DBC / 1012'nin piyasaya sürülmesi.

  • 1986- Fortune dergisi, Teradata'yı 'Yılın Ürünü' olarak adlandırıyor.

  • 1999 - 130 Terabaytlık Teradata kullanan dünyanın en büyük veritabanı.

  • 2002 - Partition Primary Index ve sıkıştırma ile piyasaya çıkan Teradata V2R5.

  • 2006 - Teradata Master Data Management çözümünün piyasaya sürülmesi.

  • 2008 - Teradata 13.0, Active Data Warehousing ile yayınlandı.

  • 2011 - Teradata Aster'ı satın alır ve Advanced Analytics Space'e girer.

  • 2012 - Teradata 14.0 tanıtıldı.

  • 2014 - Teradata 15.0 tanıtıldı.

Teradata'nın Özellikleri

Aşağıda Teradata'nın bazı özellikleri verilmiştir -

  • Unlimited Parallelism- Teradata veritabanı sistemi, Massively Parallel Processing (MPP) Mimarisine dayanmaktadır. MPP mimarisi, iş yükünü tüm sisteme eşit olarak böler. Teradata sistemi, görevi süreçleri arasında böler ve görevin hızlı bir şekilde tamamlanmasını sağlamak için paralel olarak çalıştırır.

  • Shared Nothing Architecture- Teradata'nın mimarisi Paylaşılan Hiçbir Şey Mimarisi olarak adlandırılır. Teradata Düğümleri, Erişim Modülü İşlemcileri (AMP'ler) ve AMP'lerle ilişkili diskler bağımsız olarak çalışır. Başkalarıyla paylaşılmazlar.

  • Linear Scalability- Teradata sistemleri yüksek oranda ölçeklenebilir. 2048 Düğüme kadar ölçeklenebilirler. Örneğin, AMP sayısını ikiye katlayarak sistemin kapasitesini ikiye katlayabilirsiniz.

  • Connectivity - Teradata, Mainframe veya Ağa bağlı sistemler gibi Kanala bağlı sistemlere bağlanabilir.

  • Mature Optimizer- Teradata optimizer, piyasadaki olgunlaşmış optimize edicilerden biridir. Başlangıcından itibaren paralel olacak şekilde tasarlanmıştır. Her sürümde iyileştirildi.

  • SQL- Teradata, tablolarda depolanan verilerle etkileşim kurmak için endüstri standardı SQL'i destekler. Buna ek olarak kendi uzantısını da sağlar.

  • Robust Utilities - Teradata, FastLoad, MultiLoad, FastExport ve TPT gibi verileri Teradata sistemine / sisteminden içe / dışa aktarmak için güçlü yardımcı programlar sağlar.

  • Automatic Distribution - Teradata, herhangi bir manuel müdahale olmaksızın verileri otomatik olarak eşit bir şekilde disklere dağıtır.

Teradata, tamamen işlevsel bir Teradata sanal makinesi olan VMWARE için Teradata express sağlar. 1 terabayta kadar depolama alanı sağlar. Teradata, VMware'in hem 40GB hem de 1TB sürümünü sağlar.

Önkoşullar

VM 64 bit olduğundan, CPU'nuzun 64-bit'i desteklemesi gerekir.

Windows için Kurulum Adımları

Step 1 - Gerekli VM versiyonunu linkten indirin, https://downloads.teradata.com/download/database/teradata-express-for-vmware-player

Step 2 - Dosyayı çıkarın ve hedef klasörü belirtin.

Step 3 - VMWare Workstation oynatıcısını bağlantıdan indirin, https://my.vmware.com/web/vmware/downloads. Hem Windows hem de Linux için mevcuttur. Windows için VMWARE iş istasyonu oynatıcısını indirin.

Step 4 - İndirme işlemi tamamlandıktan sonra yazılımı kurun.

Step 5 - Kurulum tamamlandıktan sonra, VMWARE istemcisini çalıştırın.

Step 6- 'Bir Sanal Makine Aç'ı seçin. Çıkarılan Teradata VMWare klasöründe gezinin ve .vmdk uzantılı dosyayı seçin.

Step 7- Teradata VMWare, VMWare istemcisine eklenir. Eklenen Teradata VMware'i seçin ve 'Sanal Makineyi Oynat'ı tıklayın.

Step 8 - Yazılım güncellemelerinde bir açılır pencere görürseniz, "Daha Sonra Hatırlat" ı seçebilirsiniz.

Step 9 - Kullanıcı adını root olarak girin, sekmeye basın ve şifreyi root olarak girin ve tekrar Enter tuşuna basın.

Step 10- Masaüstünde aşağıdaki ekran göründüğünde, 'kök ana sayfası'na çift tıklayın. Ardından 'Genome's Terminal' üzerine çift tıklayın. Bu, Kabuğu açacaktır.

Step 11- Aşağıdaki kabuktan /etc/init.d/tpa start komutunu girin. Bu, Teradata sunucusunu başlatacaktır.

BTEQ başlatılıyor

BTEQ yardımcı programı, SQL sorgularını etkileşimli olarak göndermek için kullanılır. BTEQ yardımcı programını başlatma adımları aşağıdadır.

Step 1 - / sbin / ifconfig komutunu girin ve VMWare'in IP adresini not edin.

Step 2- bteq komutunu çalıştırın. Oturum açma isteminde komutu girin.

Oturum açma <ipaddress> / dbc, dbc; ve girin Parola isteminde, parolayı dbc olarak girin;

BTEQ kullanarak Teradata sisteminde oturum açabilir ve herhangi bir SQL sorgusu çalıştırabilirsiniz.

Teradata mimarisi, Massively Parallel Processing (MPP) mimarisine dayanmaktadır. Teradata'nın ana bileşenleri Ayrıştırma Motoru, BYNET ve Erişim Modülü İşlemcileridir (AMP'ler). Aşağıdaki diyagram, bir Teradata Düğümünün yüksek seviyeli mimarisini göstermektedir.

Teradata Bileşenleri

Teradata'nın temel bileşenleri aşağıdaki gibidir -

  • Node- Teradata Sistemindeki temel birimdir. Bir Teradata sistemindeki her bir sunucuya bir Düğüm denir. Bir düğüm, kendi işletim sistemi, CPU, bellek, kendi Teradata RDBMS yazılımı kopyası ve disk alanından oluşur. Bir kabin, bir veya daha fazla Düğümden oluşur.

  • Parsing Engine- Ayrıştırma Motoru, istemciden sorgu almaktan ve verimli bir yürütme planı hazırlamaktan sorumludur. Ayrıştırma motorunun sorumlulukları şunlardır:

    • İstemciden SQL sorgusunu alın

    • Sözdizimi hataları için SQL sorgu denetimini ayrıştırın

    • Kullanıcının SQL sorgusunda kullanılan nesnelere karşı gerekli ayrıcalığa sahip olup olmadığını kontrol edin

    • SQL'de kullanılan nesnelerin gerçekten var olup olmadığını kontrol edin

    • SQL sorgusunu yürütmek ve BYNET'e geçirmek için yürütme planını hazırlayın

    • Sonuçları AMP'lerden alır ve müşteriye gönderir

  • Message Passing Layer- BYNET olarak adlandırılan Mesaj Geçiş Katmanı, Teradata sistemindeki ağ katmanıdır. PE ve AMP arasında ve ayrıca düğümler arasında iletişime izin verir. Yürütme planını Ayrıştırma Motorundan alır ve AMP'ye gönderir. Benzer şekilde AMP'lerden sonuçları alır ve Ayrıştırma Motoruna gönderir.

  • Access Module Processor (AMP)- Sanal İşlemciler (vprocs) olarak adlandırılan AMP'ler, verileri gerçekten depolayan ve alanlardır. AMP'ler, Ayrıştırma Motorundan veri ve yürütme planını alır, herhangi bir veri türü dönüştürme, toplama, filtreleme, sıralama yapar ve verileri kendileriyle ilişkili disklerde depolar. Tablolardaki kayıtlar, sistemdeki AMP'ler arasında eşit olarak dağıtılır. Her AMP, verilerin depolandığı bir disk setiyle ilişkilendirilir. Yalnızca bu AMP disklerden veri okuyabilir / yazabilir.

Depolama Mimarisi

İstemci kayıt eklemek için sorgu çalıştırdığında, Ayrıştırma motoru kayıtları BYNET'e gönderir. BYNET, kayıtları alır ve satırı hedef AMP'ye gönderir. AMP bu kayıtları disklerinde depolar. Aşağıdaki şema Teradata'nın depolama mimarisini göstermektedir.

Erişim Mimarisi

İstemci kayıtları almak için sorgular çalıştırdığında, Ayrıştırma motoru BYNET'e bir istek gönderir. BYNET, alma talebini uygun AMP'lere gönderir. Ardından AMP'ler disklerini paralel olarak arar ve gerekli kayıtları belirleyerek BYNET'e gönderir. BYNET daha sonra kayıtları Ayrıştırma Motoruna gönderir ve bu da istemciye gönderilir. Aşağıda Teradata'nın kurtarma mimarisi verilmiştir.

İlişkisel Veritabanı Yönetim Sistemi (RDBMS), veritabanları ile etkileşim kurmaya yardımcı olan bir DBMS yazılımıdır. Tablolarda depolanan verilerle etkileşim kurmak için Yapılandırılmış Sorgu Dili'ni (SQL) kullanırlar.

Veri tabanı

Veritabanı, mantıksal olarak ilişkili verilerin bir koleksiyonudur. Birçok kullanıcı tarafından farklı amaçlarla erişilir. Örneğin, bir satış veritabanı, birçok tabloda depolanan satışlarla ilgili tüm bilgileri içerir.

Tablolar

Tablolar, RDBMS'de verilerin depolandığı temel birimdir. Tablo, satır ve sütunlardan oluşan bir koleksiyondur. Aşağıda bir çalışan tablosu örneği verilmiştir.

Çalışan Hayır İsim Soyadı Doğum günü
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

Sütunlar

Bir sütun benzer veriler içerir. Örneğin, Çalışan tablosundaki Doğum Tarihi sütunu, tüm çalışanlar için doğum_tarihi bilgilerini içerir.

Doğum günü
1/5/1980
11/6/1984
3/5/1983
12/1/1984
4/1/1983

Kürek çekmek

Satır, tüm sütunların bir örneğidir. Örneğin, çalışan tablosunda bir satır, tek bir çalışan hakkında bilgi içerir.

Çalışan Hayır İsim Soyadı Doğum günü
101 Mike James 1/5/1980

Birincil anahtar

Birincil anahtar, bir tablodaki bir satırı benzersiz şekilde tanımlamak için kullanılır. Birincil anahtar sütununda yinelenen değerlere izin verilmez ve NULL değerleri kabul edemezler. Tablodaki zorunlu bir alandır.

Yabancı anahtar

Tablolar arasında ilişki kurmak için yabancı anahtarlar kullanılır. Alt tablodaki yabancı anahtar, üst tablodaki birincil anahtar olarak tanımlanır. Bir tablonun birden fazla yabancı anahtarı olabilir. Yinelenen değerleri ve ayrıca boş değerleri kabul edebilir. Tabloda yabancı anahtarlar isteğe bağlıdır.

Tablodaki her sütun bir veri türüyle ilişkilendirilir. Veri türleri, sütunda ne tür değerlerin depolanacağını belirtir. Teradata birkaç veri türünü destekler. Aşağıda sık kullanılan veri türlerinden bazıları verilmiştir.

Veri tipleri Uzunluk (Bayt) Değer aralığı
BYTEINT 1 -128 ila +127
SMALLINT 2 -32768 ila +32767
TAM 4 -2.147.483.648 ile +2147.483.647
BÜYÜK 8 -9,233,372,036,854,775,80 8 ile +9,233,372,036,854,775,8 07
ONDALIK 1-16  
SAYISAL 1-16  
YÜZER 8 IEEE biçimi
CHAR Sabit Format 1-64.000
VARCHAR Değişken 1-64.000
TARİH 4 YYYYYAAGG
ZAMAN 6 veya 8 HHMMSS.nnnnnn or HHMMSS.nnnnnn + HHMM
TIMESTAMP 10 veya 12 YYAAGGDHHMMSS.nnnnnn or YYAAGGSHMMSS.nnnnnn + HHMM

İlişkisel modeldeki tablolar veri koleksiyonu olarak tanımlanır. Satırlar ve sütunlar olarak temsil edilirler.

Tablo Türleri

Türler Teradata farklı tablo türlerini destekler.

  • Permanent Table - Bu varsayılan tablodur ve kullanıcı tarafından eklenen verileri içerir ve verileri kalıcı olarak depolar.

  • Volatile Table- Uçucu bir tabloya eklenen veriler yalnızca kullanıcı oturumu sırasında saklanır. Tablo ve veriler oturumun sonunda bırakılır. Bu tablolar çoğunlukla veri dönüşümü sırasında ara verileri tutmak için kullanılır.

  • Global Temporary Table - Global Geçici tablonun tanımı kalıcıdır ancak tablodaki veriler kullanıcı oturumunun sonunda silinir.

  • Derived Table- Türetilmiş tablo, bir sorgudaki ara sonuçları tutar. Yaşam süreleri, oluşturuldukları, kullanıldığı ve bırakıldıkları sorgu dahilindedir.

Çoklu Küme Karşı Ayarla

Teradata, yinelenen kayıtların nasıl işlendiğine bağlı olarak tabloları SET veya MULTISET tabloları olarak sınıflandırır. SET tablosu olarak tanımlanan bir tablo yinelenen kayıtları saklamaz, oysa MULTISET tablosu yinelenen kayıtları depolayabilir.

Sr.No Tablo Komutları ve Açıklama
1 Tablo Oluştur

CREATE TABLE komutu Teradata'da tablolar oluşturmak için kullanılır.

2 Tabloyu değiştir

ALTER TABLE komutu, mevcut bir tablodan sütun eklemek veya çıkarmak için kullanılır.

3 Bırak Tablo

DROP TABLE komutu bir tabloyu düşürmek için kullanılır.

Bu bölüm, Teradata tablolarında depolanan verileri işlemek için kullanılan SQL komutlarını tanıtır.

Kayıt Ekle

INSERT INTO deyimi, tabloya kayıt eklemek için kullanılır.

Sözdizimi

INSERT INTO için genel sözdizimi aşağıdadır.

INSERT INTO <tablename> 
(column1, column2, column3,…) 
VALUES 
(value1, value2, value3 …);

Misal

Aşağıdaki örnek, kayıtları çalışan tablosuna ekler.

INSERT INTO Employee (
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate, 
   DepartmentNo 
)
VALUES ( 
   101, 
   'Mike', 
   'James', 
   '1980-01-05', 
   '2005-03-27', 
   01
);

Yukarıdaki sorgu eklendikten sonra, tablodaki kayıtları görüntülemek için SELECT deyimini kullanabilirsiniz.

Çalışan Hayır İsim Soyadı JoinedDate Bölüm No Doğum günü
101 Mike James 27.3.2005 1 1/5/1980

Başka Bir Tablodan Ekle

INSERT SELECT deyimi, başka bir tablodan kayıt eklemek için kullanılır.

Sözdizimi

INSERT INTO için genel sözdizimi aşağıdadır.

INSERT INTO <tablename> 
(column1, column2, column3,…) 
SELECT 
column1, column2, column3… 
FROM  
<source table>;

Misal

Aşağıdaki örnek, kayıtları çalışan tablosuna ekler. Aşağıdaki ekleme sorgusunu çalıştırmadan önce, çalışan tablosu ile aynı sütun tanımına sahip Employee_Bkup adlı bir tablo oluşturun.

INSERT INTO Employee_Bkup ( 
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate, 
   DepartmentNo 
) 
SELECT 
   EmployeeNo, 
   FirstName, 
   LastName, 
   BirthDate, 
   JoinedDate,
   DepartmentNo 
FROM  
   Employee;

Yukarıdaki sorgu yürütüldüğünde, çalışan tablosundaki tüm kayıtları staff_bkup tablosuna ekler.

Kurallar

  • VALUES listesinde belirtilen sütun sayısı, INSERT INTO yan tümcesinde belirtilen sütunlarla eşleşmelidir.

  • NOT NULL sütunları için değerler zorunludur.

  • Değer belirtilmezse, null yapılabilir alanlar için NULL eklenir.

  • VALUES yan tümcesinde belirtilen sütunların veri türleri, INSERT yan tümcesindeki sütunların veri türleri ile uyumlu olmalıdır.

Kayıtları Güncelle

UPDATE deyimi, tablodaki kayıtları güncellemek için kullanılır.

Sözdizimi

UPDATE için genel sözdizimi aşağıdadır.

UPDATE <tablename> 
SET <columnnamme> = <new value> 
[WHERE condition];

Misal

Aşağıdaki örnek, çalışan birimini 101 çalışan için 03 olarak güncellemektedir.

UPDATE Employee 
SET DepartmentNo = 03 
WHERE EmployeeNo = 101;

Aşağıdaki çıktıda, DepartmentNo'nun Çalışan 101 için 1'den 3'e güncellendiğini görebilirsiniz.

SELECT Employeeno, DepartmentNo FROM Employee; 
*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.  
EmployeeNo    DepartmentNo 
-----------  ------------- 
   101             3

Kurallar

  • Tablonun bir veya daha fazla değerini güncelleyebilirsiniz.

  • WHERE koşulu belirtilmezse, tablonun tüm satırları etkilenir.

  • Bir tabloyu başka bir tablodaki değerlerle güncelleyebilirsiniz.

Kayıtları Sil

DELETE FROM deyimi tablodaki kayıtları güncellemek için kullanılır.

Sözdizimi

DELETE FROM için genel sözdizimi aşağıdadır.

DELETE FROM  <tablename> 
[WHERE condition];

Misal

Aşağıdaki örnek, çalışan 101'i masa çalışanından siler.

DELETE FROM Employee 
WHERE EmployeeNo = 101;

Aşağıdaki çıktıda çalışan 101'in tablodan silindiğini görebilirsiniz.

SELECT EmployeeNo FROM Employee;  
*** Query completed. No rows found. 
*** Total elapsed time was 1 second.

Kurallar

  • Tablonun bir veya daha fazla kaydını güncelleyebilirsiniz.

  • WHERE koşulu belirtilmezse, tablonun tüm satırları silinir.

  • Bir tabloyu başka bir tablodaki değerlerle güncelleyebilirsiniz.

SELECT deyimi, bir tablodan kayıtları almak için kullanılır.

Sözdizimi

Aşağıda, SELECT ifadesinin temel sözdizimi verilmiştir.

SELECT 
column 1, column 2, ..... 
FROM  
tablename;

Misal

Aşağıdaki çalışan tablosunu düşünün.

Çalışan Hayır İsim Soyadı JoinedDate Bölüm No Doğum günü
101 Mike James 27.3.2005 1 1/5/1980
102 Robert Williams 25.4.2007 2 3/5/1983
103 Peter Paul 21.3.2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

Aşağıda bir SELECT ifadesi örneği verilmiştir.

SELECT EmployeeNo,FirstName,LastName 
FROM Employee;

Bu sorgu yürütüldüğünde, çalışan tablosundan EmployeeNo, FirstName ve LastName sütunlarını alır.

EmployeeNo            FirstName                       LastName 
-----------  ------------------------------  --------------------------- 
   101                   Mike                            James 
   104                   Alex                            Stuart 
   102                   Robert                          Williams 
   105                   Robert                          James 
   103                   Peter                           Paul

Bir tablodan tüm sütunları getirmek istiyorsanız, tüm sütunları listelemek yerine aşağıdaki komutu kullanabilirsiniz.

SELECT * FROM Employee;

Yukarıdaki sorgu, çalışan tablosundaki tüm kayıtları getirecektir.

NEREDE Fıkra

WHERE yan tümcesi, SELECT deyimi tarafından döndürülen kayıtları filtrelemek için kullanılır. Bir koşul, WHERE cümlesiyle ilişkilidir. Yalnızca, WHERE yan tümcesindeki koşulu karşılayan kayıtlar döndürülür.

Sözdizimi

Aşağıda, WHERE yan tümcesine sahip SELECT ifadesinin sözdizimi verilmiştir.

SELECT * FROM tablename 
WHERE[condition];

Misal

Aşağıdaki sorgu, EmployeeNo'nun 101 olduğu kayıtları getirir.

SELECT * FROM Employee 
WHERE EmployeeNo = 101;

Bu sorgu yürütüldüğünde aşağıdaki kayıtları döndürür.

EmployeeNo          FirstName                      LastName 
----------- ------------------------------ ----------------------------- 
   101                 Mike                           James

TARAFINDAN SİPARİŞ

SELECT ifadesi yürütüldüğünde, döndürülen satırlar belirli bir sırada değildir. ORDER BY yan tümcesi, kayıtları herhangi bir sütunda artan / azalan sırada düzenlemek için kullanılır.

Sözdizimi

Aşağıda, SELECT ifadesinin ORDER BY yan tümcesine sahip sözdizimi verilmiştir.

SELECT * FROM tablename 
ORDER BY column 1, column 2..;

Misal

Aşağıdaki sorgu, çalışan tablosundan kayıtları alır ve sonuçları Ad'a göre sıralar.

SELECT * FROM Employee 
ORDER BY FirstName;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

EmployeeNo         FirstName                      LastName 
----------- ------------------------------ ----------------------------- 
    104               Alex                           Stuart 
    101               Mike                           James 
    103               Peter                          Paul 
    102               Robert                         Williams 
    105               Robert                         James

GRUPLAMA

GROUP BY yan tümcesi, SELECT deyimi ile kullanılır ve benzer kayıtları gruplar halinde düzenler.

Sözdizimi

Aşağıda, SELECT ifadesinin GROUP BY yan tümcesine sahip sözdizimi verilmiştir.

SELECT column 1, column2 …. FROM tablename 
GROUP BY column 1, column 2..;

Misal

Aşağıdaki örnek, kayıtları DepartmentNo sütununa göre gruplandırır ve her departmanın toplam sayısını tanımlar.

SELECT DepartmentNo,Count(*) FROM   
Employee 
GROUP BY DepartmentNo;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

DepartmentNo    Count(*) 
------------  ----------- 
     3             1 
     1             1 
     2             3

Teradata, aşağıdaki mantıksal ve koşullu operatörleri destekler. Bu operatörler, karşılaştırma yapmak ve birden çok koşulu birleştirmek için kullanılır.

Sözdizimi Anlam
> Büyüktür
< Daha az
>= Büyük veya eşit
<= Küçüktür veya eşittir
= Eşittir
BETWEEN Aralık dahilindeki değerler
IN <İfade> içindeki değerler
NOT IN Değerler <ifade> içinde değilse
IS NULL Değer NULL ise
IS NOT NULL Değer NULL DEĞİLSE
AND Birden çok koşulu birleştirin. Yalnızca tüm koşullar karşılanırsa doğru olarak değerlendirilir
OR Birden çok koşulu birleştirin. Yalnızca koşullardan biri karşılanırsa doğru olarak değerlendirilir.
NOT Koşulun anlamını tersine çevirir

ARASINDA

BETWEEN komutu, bir değerin bir değer aralığı içinde olup olmadığını kontrol etmek için kullanılır.

Misal

Aşağıdaki çalışan tablosunu düşünün.

Çalışan Hayır İsim Soyadı JoinedDate Bölüm No Doğum günü
101 Mike James 27.3.2005 1 1/5/1980
102 Robert Williams 25.4.2007 2 3/5/1983
103 Peter Paul 21.3.2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

Aşağıdaki örnek, 101.102 ile 103 arasında çalışan sayılarına sahip kayıtları getirir.

SELECT EmployeeNo, FirstName FROM  
Employee 
WHERE EmployeeNo BETWEEN 101 AND 103;

Yukarıdaki sorgu yürütüldüğünde, 101 ile 103 arasında çalışan numarası olan çalışan kayıtlarını döndürür.

*** Query completed. 3 rows found. 2 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo            FirstName 
-----------  ------------------------------ 
   101                   Mike 
   102                   Robert 
   103                   Peter

İÇİNDE

IN komutu, değeri belirli bir değerler listesiyle karşılaştırmak için kullanılır.

Misal

Aşağıdaki örnek, 101, 102 ve 103'te çalışan numaraları olan kayıtları getirir.

SELECT EmployeeNo, FirstName FROM  
Employee 
WHERE EmployeeNo in (101,102,103);

Yukarıdaki sorgu aşağıdaki kayıtları döndürür.

*** Query completed. 3 rows found. 2 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo            FirstName 
-----------  ------------------------------ 
   101                   Mike 
   102                   Robert 
   103                   Peter

DEĞİL

NOT IN komutu IN komutunun sonucunu tersine çevirir. Verilen listeyle eşleşmeyen değerlere sahip kayıtları getirir.

Misal

Aşağıdaki örnek, çalışan numaraları 101, 102 ve 103'te olmayan kayıtları getirir.

SELECT * FROM  
Employee 
WHERE EmployeeNo not in (101,102,103);

Yukarıdaki sorgu aşağıdaki kayıtları döndürür.

*** Query completed. 2 rows found. 6 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo          FirstName                      LastName 
----------- ------------------------------ -----------------------------    
    104                Alex                          Stuart 
    105                Robert                        James

SET operatörleri, birden çok SELECT ifadesinden gelen sonuçları birleştirir. Bu, Joins'e benzer görünebilir, ancak birleşimler birden çok tablodan sütunları birleştirirken SET operatörleri birden çok satırdaki satırları birleştirir.

Kurallar

  • Her SELECT ifadesindeki sütun sayısı aynı olmalıdır.

  • Her SELECT'ten gelen veri türleri uyumlu olmalıdır.

  • ORDER BY yalnızca son SELECT deyimine dahil edilmelidir.

BİRLİK

UNION ifadesi, birden çok SELECT deyiminden gelen sonuçları birleştirmek için kullanılır. Yinelemeleri yok sayar.

Sözdizimi

UNION bildiriminin temel sözdizimi aşağıdadır.

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
UNION  

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

Misal

Aşağıdaki çalışan tablosu ve maaş tablosunu düşünün.

Çalışan Hayır İsim Soyadı JoinedDate Bölüm No Doğum günü
101 Mike James 27.3.2005 1 1/5/1980
102 Robert Williams 25.4.2007 2 3/5/1983
103 Peter Paul 21.3.2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984
Çalışan Hayır Brüt Kesinti Net ödeme
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

Aşağıdaki UNION sorgusu, Employee ve Maaş tablosundaki EmployeeNo değerini birleştirir.

SELECT EmployeeNo 
FROM  
Employee 
UNION 

SELECT EmployeeNo 
FROM  
Salary;

Sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

EmployeeNo 
----------- 
   101 
   102 
   103 
   104 
   105

BİRLİĞİ TÜMÜ

UNION ALL ifadesi UNION'a benzer, yinelenen satırlar dahil olmak üzere birden çok tablodan sonuçları birleştirir.

Sözdizimi

UNION ALL ifadesinin temel sözdizimi aşağıdadır.

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
UNION ALL 

SELECT col1, col2, col3…
FROM  
<table 2> 
[WHERE condition];

Misal

Aşağıda UNION ALL bildirisine bir örnek verilmiştir.

SELECT EmployeeNo 
FROM  
Employee 
UNION ALL 

SELECT EmployeeNo 
FROM  
Salary;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Yinelenenleri de döndürdüğünü görebilirsiniz.

EmployeeNo 
----------- 
    101 
    104 
    102 
    105 
    103 
    101 
    104 
    102 
    103

INTERSECT

INTERSECT komutu, birden çok SELECT deyiminden gelen sonuçları birleştirmek için de kullanılır. İkinci SELECT deyiminde karşılık gelen eşleşmeye sahip olan ilk SELECT deyiminden satırları döndürür. Başka bir deyişle, her iki SELECT deyiminde bulunan satırları döndürür.

Sözdizimi

INTERSECT ifadesinin temel sözdizimi aşağıdadır.

SELECT col1, col2, col3… 
FROM  
<table 1>
[WHERE condition] 
INTERSECT 

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

Misal

Aşağıda INTERSECT ifadesine bir örnek verilmiştir. Her iki tabloda da bulunan EmployeeNo değerlerini döndürür.

SELECT EmployeeNo 
FROM  
Employee 
INTERSECT 

SELECT EmployeeNo 
FROM  
Salary;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki kayıtları döndürür. EmployeeNo 105, MAAŞ tablosunda bulunmadığı için hariç tutulmuştur.

EmployeeNo 
----------- 
   101 
   104 
   102 
   103

EKSİ / HARİÇ

MINUS / EXCEPT komutları, birden çok tablodan satırları birleştirir ve ilk SELECT'te olan ancak ikinci SELECT'te olmayan satırları döndürür. İkisi de aynı sonuçları verir.

Sözdizimi

MINUS ifadesinin temel sözdizimi aşağıdadır.

SELECT col1, col2, col3… 
FROM  
<table 1> 
[WHERE condition] 
MINUS 

SELECT col1, col2, col3… 
FROM  
<table 2> 
[WHERE condition];

Misal

Aşağıda bir MINUS ifadesi örneği verilmiştir.

SELECT EmployeeNo 
FROM  
Employee 
MINUS 

SELECT EmployeeNo 
FROM  
Salary;

Bu sorgu yürütüldüğünde aşağıdaki kaydı döndürür.

EmployeeNo 
----------- 
   105

Teradata, dizeleri değiştirmek için çeşitli işlevler sağlar. Bu işlevler ANSI standardıyla uyumludur.

Sr.No Dize İşlevi ve Açıklaması
1 ||

Dizeleri birlikte birleştirir

2 SUBSTR

Bir dizenin bir kısmını çıkarır (Teradata uzantısı)

3 SUBSTRING

Bir dizenin bir bölümünü çıkarır (ANSI standardı)

4 INDEX

Bir dizedeki bir karakterin konumunu bulur (Teradata uzantısı)

5 POSITION

Bir dizedeki bir karakterin konumunu bulur (ANSI standardı)

6 TRIM

Bir dizeden boşlukları kırpar

7 UPPER

Bir dizeyi büyük harfe dönüştürür

8 LOWER

Bir dizeyi küçük harfe dönüştürür

Misal

Aşağıdaki tablo sonuçlarla birlikte bazı dizi işlevlerini listeler.

String Fonksiyonu Sonuç
ALT DİZGİ SEÇİN (4 İÇİN 1'DEN 'depo') eşya
SUBSTR ('depo', 1,4) SEÇİN eşya
'Veri' SEÇİN || '' || 'depo' Veri deposu
ÜST SEÇİN ('veri') VERİ
DÜŞÜK SEÇİN ('VERİ') veri

Bu bölüm, Teradata'da bulunan tarih / saat işlevlerini tartışır.

Tarih Saklama

Tarihler, aşağıdaki formül kullanılarak dahili olarak tamsayı olarak saklanır.

((YEAR - 1900) * 10000) + (MONTH * 100) + DAY

Tarihlerin nasıl saklandığını kontrol etmek için aşağıdaki sorguyu kullanabilirsiniz.

SELECT CAST(CURRENT_DATE AS INTEGER);

Tarihler tamsayı olarak saklandığı için üzerlerinde bazı aritmetik işlemler gerçekleştirebilirsiniz. Teradata, bu işlemleri gerçekleştirmek için işlevler sağlar.

AYIKLA

EXTRACT işlevi, DATE değerinden gün, ay ve yıl bölümlerini çıkarır. Bu fonksiyon aynı zamanda TIME / TIMESTAMP değerinden saat, dakika ve saniyeyi çıkarmak için kullanılır.

Misal

Aşağıdaki örnekler, Tarih ve Zaman Damgası değerlerinden Yıl, Ay, Tarih, Saat, Dakika ve saniye değerlerinin nasıl çıkarılacağını gösterir.

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

ARALIK

Teradata, DATE ve TIME değerleri üzerinde aritmetik işlemler gerçekleştirmek için INTERVAL işlevi sağlar. İki tür INTERVAL işlevi vardır.

Yıl-Ay Aralığı

  • YEAR
  • YILDAN AYA
  • MONTH

Gün-Saat Aralığı

  • DAY
  • GÜN-SAAT
  • DAKİKA GÜN
  • İKİNCİYE GÜN
  • HOUR
  • SAAT - DAKİKA
  • İKİNCİYE SAAT
  • MINUTE
  • İKİNCİYE DAKİKA
  • SECOND

Misal

Aşağıdaki örnek, geçerli tarihe 3 yıl ekler.

SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03' YEAR; 
  Date    (Date+ 3) 
--------  --------- 
16/01/01   19/01/01

Aşağıdaki örnek, geçerli tarihe 3 yıl ve 01 ay ekler.

SELECT CURRENT_DATE, CURRENT_DATE + INTERVAL '03-01' YEAR TO MONTH; 
 Date     (Date+ 3-01) 
--------  ------------ 
16/01/01    19/02/01

Aşağıdaki örnek, geçerli zaman damgasına 01 gün, 05 saat ve 10 dakika ekler.

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, SQL'in uzantıları olan yerleşik işlevler sağlar. Yaygın yerleşik işlevler aşağıdadır.

Fonksiyon Sonuç
TARİH SEÇ; Tarih
--------
16/01/01
CURRENT_DATE SEÇİN; Tarih
--------
16/01/01
ZAMAN SEÇ; Zaman
--------
04:50:29
CURRENT_TIME SEÇİN; Zaman
--------
04:50:29
CURRENT_TIMESTAMP SEÇİN; Geçerli Zaman Damgası (6)
--------------------------------
2016-01-01 04: 51: 06.990000 + 00: 00
VERİTABANI SEÇİN; Veritabanı
------------------------------
TDUSER

Teradata, ortak toplama işlevlerini destekler. SELECT ifadesiyle birlikte kullanılabilirler.

  • COUNT - Satırları sayar

  • SUM - Belirtilen sütun (lar) ın değerlerini özetler

  • MAX - Belirtilen sütunun büyük değerini verir

  • MIN - Belirtilen sütunun minimum değerini verir

  • AVG - Belirtilen sütunun ortalama değerini verir

Misal

Aşağıdaki Maaş Tablosunu düşünün.

Çalışan Hayır Brüt Kesinti Net ödeme
101 40.000 4.000 36.000
104 75.000 5.000 70.000
102 80.000 6.000 74.000
105 70.000 4.000 66.000
103 90.000 7.000 83.000

MİKTAR

Aşağıdaki örnek, Maaş tablosundaki kayıtların sayısını sayar.

SELECT count(*) from Salary;  

  Count(*) 
----------- 
    5

MAX

Aşağıdaki örnek, maksimum çalışan net maaş değerini döndürür.

SELECT max(NetPay) from Salary;   
   Maximum(NetPay) 
--------------------- 
       83000

MIN

Aşağıdaki örnek, Maaş tablosundan minimum çalışan net maaş değerini döndürür.

SELECT min(NetPay) from Salary;   

   Minimum(NetPay) 
--------------------- 
        36000

AVG

Aşağıdaki örnek, tablodan çalışanların ortalama net maaş değerini döndürür.

SELECT avg(NetPay) from Salary; 
  
   Average(NetPay) 
--------------------- 
       65800

SUM

Aşağıdaki örnek, Maaş tablosunun tüm kayıtlarından çalışanların net maaşının toplamını hesaplar.

SELECT sum(NetPay) from Salary;
  
   Sum(NetPay) 
----------------- 
     329000

Bu bölüm, Teradata'nın CASE ve COALESCE işlevlerini açıklamaktadır.

CASE İfadesi

CASE ifadesi, her satırı bir koşula veya WHEN yan tümcesine göre değerlendirir ve ilk eşleşmenin sonucunu döndürür. Eşleşme yoksa, ELSE kısmının sonucu döndürülür.

Sözdizimi

Aşağıda CASE ifadesinin sözdizimi verilmiştir.

CASE <expression> 
WHEN <expression> THEN result-1 
WHEN <expression> THEN result-2 

ELSE  
   Result-n 
END

Misal

Aşağıdaki Çalışan tablosunu düşünün.

Çalışan Hayır İsim Soyadı JoinedDate Bölüm No Doğum günü
101 Mike James 27.3.2005 1 1/5/1980
102 Robert Williams 25.4.2007 2 3/5/1983
103 Peter Paul 21.3.2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

Aşağıdaki örnek, DepartmentNo sütununu değerlendirir ve bölüm numarası 1 ise 1 değerini döndürür; bölüm numarası 3 ise 2 döndürür; aksi takdirde değeri geçersiz departman olarak döndürür.

SELECT 
   EmployeeNo, 
CASE DepartmentNo 
   WHEN 1 THEN 'Admin' 
   WHEN 2 THEN 'IT' 
ELSE 'Invalid Dept'
   END AS Department 
FROM Employee;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

*** 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

Yukarıdaki CASE ifadesi, yukarıdaki ile aynı sonucu verecek şekilde aşağıdaki biçimde de yazılabilir.

SELECT 
   EmployeeNo, 
CASE  
   WHEN DepartmentNo = 1 THEN 'Admin' 
   WHEN  DepartmentNo = 2 THEN 'IT' 
ELSE 'Invalid Dept' 
   END AS Department  
FROM Employee;

KÖMÜR

COALESCE, ifadenin ilk boş olmayan değerini döndüren bir ifadedir. İfadenin tüm bağımsız değişkenleri NULL olarak değerlendirilirse NULL döndürür. Sözdizimi aşağıdadır.

Sözdizimi

COALESCE(expression 1, expression 2, ....)

Misal

SELECT 
   EmployeeNo, 
   COALESCE(dept_no, 'Department not found') 
FROM  
   employee;

NULLIF

NULLIF deyimi, bağımsız değişkenler eşitse NULL döndürür.

Sözdizimi

NULLIF ifadesinin sözdizimi aşağıdadır.

NULLIF(expression 1, expression 2)

Misal

Aşağıdaki örnek, DepartmentNo 3'e eşitse NULL döndürür. Aksi takdirde, DepartmentNo değerini döndürür.

SELECT 
   EmployeeNo,  
   NULLIF(DepartmentNo,3) AS department 
FROM Employee;

Yukarıdaki sorgu aşağıdaki kayıtları döndürür. 105 numaralı çalışanın departman numarasına sahip olduğunu görebilirsiniz. NULL olarak.

*** 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

Birincil dizin, verilerin Teradata'da nerede bulunduğunu belirtmek için kullanılır. Hangi AMP'nin veri satırını alacağını belirtmek için kullanılır. Teradata'daki her tablonun tanımlanmış bir birincil dizine sahip olması gerekir. Birincil dizin tanımlanmamışsa, Teradata otomatik olarak birincil dizini atar. Birincil dizin, verilere erişmenin en hızlı yolunu sağlar. Bir birincil maksimum 64 sütuna sahip olabilir.

Bir tablo oluşturulurken birincil dizin tanımlanır. 2 tür Birincil Dizin vardır.

  • Benzersiz Birincil İndeks (UPI)
  • Benzersiz Olmayan Birincil Endeks (NUPI)

Benzersiz Birincil İndeks (UPI)

Tablo UPI'ye sahip olarak tanımlanmışsa, UPI olarak kabul edilen sütunun herhangi bir yinelenen değeri olmamalıdır. Yinelenen değerler girilirse reddedilecektir.

Benzersiz Birincil Dizin Oluşturun

Aşağıdaki örnek, EmployeeNo sütununu Benzersiz Birincil Dizin olarak içeren Maaş tablosunu oluşturur.

CREATE SET TABLE Salary ( 
   EmployeeNo INTEGER, 
   Gross INTEGER,  
   Deduction INTEGER, 
   NetPay INTEGER 
) 
UNIQUE PRIMARY INDEX(EmployeeNo);

Benzersiz Olmayan Birincil Endeks (NUPI)

Tablonun NUPI'ye sahip olduğu tanımlanmışsa, UPI olarak kabul edilen sütun yinelenen değerleri kabul edebilir.

Benzersiz Olmayan Birincil Dizin Oluşturun

Aşağıdaki örnek, Benzersiz Olmayan Birincil Dizin olarak EmployeeNo sütunuyla çalışan hesapları tablosunu oluşturur. EmployeeNo, bir çalışanın tabloda birden çok hesabı olabileceğinden, Benzersiz Olmayan Birincil Dizin olarak tanımlanır; biri maaş hesabı için diğeri geri ödeme hesabı için.

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);

Birleştirme, birden fazla tablodaki kayıtları birleştirmek için kullanılır. Tablolar, bu tablolardaki ortak sütunlara / değerlere göre birleştirilir.

Farklı Birleştirme türleri mevcuttur.

  • İç birleşim
  • Sol dış katılma
  • Sağ Dış Birleştirme
  • Tam Dış Birleştirme
  • Kendinden Katılma
  • Çapraz Birleşim
  • Kartezyen Üretim Birleşimi

İÇ BİRLEŞİM

Inner Join, birden çok tablodaki kayıtları birleştirir ve her iki tabloda da bulunan değerleri döndürür.

Sözdizimi

INNER JOIN deyiminin sözdizimi aşağıdadır.

SELECT col1, col2, col3…. 
FROM  
Table-1 
INNER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

Misal

Aşağıdaki çalışan tablosu ve maaş tablosunu düşünün.

Çalışan Hayır İsim Soyadı JoinedDate Bölüm No Doğum günü
101 Mike James 27.3.2005 1 1/5/1980
102 Robert Williams 25.4.2007 2 3/5/1983
103 Peter Paul 21.3.2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984
Çalışan Hayır Brüt Kesinti Net ödeme
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

Aşağıdaki sorgu, EmployeeNo ortak sütunundaki Çalışan tablosu ve Maaş tablosunu birleştirir. Her tabloya bir takma ad A & B atanır ve sütunlara doğru takma adla başvurulur.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
INNER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo);

Yukarıdaki sorgu yürütüldüğünde aşağıdaki kayıtları döndürür. Çalışan 105, Maaş tablosunda eşleşen kayıtlara sahip olmadığı için sonuca dahil edilmemiştir.

*** 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

DIŞ BİRLEŞTİRME

LEFT OUTER JOIN ve RIGHT OUTER JOIN de birden çok tablodan sonuçları birleştirir.

  • LEFT OUTER JOIN soldaki tablodaki tüm kayıtları döndürür ve yalnızca sağ tablodaki eşleşen kayıtları döndürür.

  • RIGHT OUTER JOIN sağ tablodaki tüm kayıtları döndürür ve yalnızca soldaki tablodaki eşleşen satırları döndürür.

  • FULL OUTER JOINSOL DIŞ ve SAĞ DIŞ BİRLEŞTİRMELERDEN elde edilen sonuçları birleştirir. Birleştirilen tablolardan hem eşleşen hem de eşleşmeyen satırları döndürür.

Sözdizimi

OUTER JOIN deyiminin sözdizimi aşağıdadır. LEFT OUTER JOIN, RIGHT OUTER JOIN veya FULL OUTER JOIN seçeneklerinden birini kullanmanız gerekir.

SELECT col1, col2, col3…. 
FROM  
Table-1 
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

Misal

LEFT OUTER JOIN sorgusunun aşağıdaki örneğini düşünün. Çalışan tablosundaki tüm kayıtları ve Maaş tablosundaki eşleşen kayıtları döndürür.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
LEFT OUTER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo) 
ORDER BY A.EmployeeNo;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Çalışan 105 için NetPay değeri, Maaş tablosunda eşleşen kayıtlara sahip olmadığından NULL'dur.

*** 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

Çapraz Birleştirme, sol tablodan her satıra sağ tablodan her satıra katılır.

Sözdizimi

CROSS JOIN deyiminin sözdizimi aşağıdadır.

SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay 
FROM  
Employee A 
CROSS JOIN 
Salary B 
WHERE A.EmployeeNo = 101 
ORDER BY B.EmployeeNo;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Çalışan tablosundan 101 No'lu Çalışan, Maaş Tablosundaki her kayıt ile birleştirilir.

*** 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

Bir alt sorgu, başka bir tablodaki değerleri temel alarak bir tablodaki kayıtları döndürür. Başka bir sorgu içindeki bir SELECT sorgusudur. İlk olarak iç sorgu olarak adlandırılan SELECT sorgusu çalıştırılır ve sonuç dış sorgu tarafından kullanılır. Göze çarpan özelliklerinden bazıları -

  • Bir sorgu birden çok alt sorguya sahip olabilir ve alt sorgular başka bir alt sorgu içerebilir.

  • Alt sorgular, yinelenen kayıtlar döndürmez.

  • Alt sorgu yalnızca bir değer döndürürse, bunu dış sorgu ile kullanmak için = işlecini kullanabilirsiniz. Birden fazla değer döndürürse, IN veya NOT IN kullanabilirsiniz.

Sözdizimi

Aşağıda, alt sorguların genel sözdizimi verilmiştir.

SELECT col1, col2, col3,… 
FROM  
Outer Table 
WHERE col1 OPERATOR ( Inner SELECT Query);

Misal

Aşağıdaki Maaş tablosunu düşünün.

Çalışan Hayır Brüt Kesinti Net ödeme
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

Aşağıdaki sorgu, en yüksek maaşı alan çalışan numarasını tanımlar. İçteki SELECT, maksimum NetPay değerini döndürmek için toplama işlevini gerçekleştirir ve dış SELECT sorgusu bu değeri çalışan kaydını bu değerle döndürmek için kullanır.

SELECT EmployeeNo, NetPay 
FROM Salary 
WHERE NetPay =  
(SELECT MAX(NetPay)  
FROM Salary);

Bu sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.  
 EmployeeNo     NetPay 
-----------  ----------- 
    103         83000

Teradata, geçici verileri tutmak için aşağıdaki tablo türlerini destekler.

  • Türetilmiş Tablo
  • Uçucu Tablo
  • Global Geçici Tablo

Türetilmiş Tablo

Türetilmiş tablolar oluşturulur, kullanılır ve bir sorgu içinde bırakılır. Bunlar, ara sonuçları bir sorgu içinde depolamak için kullanılır.

Misal

Aşağıdaki örnek, maaşı 75000'den fazla olan çalışanların kayıtlarıyla türetilmiş bir EmpSal tablosu oluşturur.

SELECT 
Emp.EmployeeNo, 
Emp.FirstName, 
Empsal.NetPay 
FROM 
Employee Emp, 
(select EmployeeNo , NetPay 
from Salary
where NetPay >= 75000) Empsal 
where Emp.EmployeeNo = Empsal.EmployeeNo;

Yukarıdaki sorgu yürütüldüğünde, maaşı 75000'den fazla olan çalışanları döndürür.

*** Query completed. One row found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo            FirstName               NetPay 
-----------  ------------------------------  ----------- 
    103                  Peter                 83000

Uçucu Tablo

Bir kullanıcı oturumu içinde geçici tablolar oluşturulur, kullanılır ve bırakılır. Tanımları veri sözlüğünde saklanmaz. Sık kullanılan sorgunun ara verilerini tutarlar. Sözdizimi aşağıdadır.

Sözdizimi

CREATE [SET|MULTISET] VOALTILE TABLE tablename 
<table definitions> 
<column definitions> 
<index definitions> 
ON COMMIT [DELETE|PRESERVE] ROWS

Misal

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;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

*** Table has been created. 
*** Total elapsed time was 1 second.

Global Geçici Tablo

Global Geçici tablonun tanımı veri sözlüğünde saklanır ve birçok kullanıcı / oturum tarafından kullanılabilir. Ancak genel geçici tabloya yüklenen veriler yalnızca oturum sırasında tutulur. Oturum başına 2000 adede kadar genel geçici tablo gerçekleştirebilirsiniz. Sözdizimi aşağıdadır.

Sözdizimi

CREATE [SET|MULTISET] GLOBAL TEMPORARY TABLE tablename 
<table definitions> 
<column definitions> 
<index definitions>

Misal

CREATE SET GLOBAL TEMPORARY TABLE dept_stat ( 
   dept_no INTEGER, 
   avg_salary INTEGER, 
   max_salary INTEGER, 
   min_salary INTEGER 
) 
PRIMARY INDEX(dept_no);

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

*** Table has been created. 
*** Total elapsed time was 1 second.

Teradata'da kullanılabilen üç tür alan vardır.

Kalıcı Alan

Kalıcı alan, kullanıcının / veritabanının veri satırlarını tutabileceği maksimum alan miktarıdır. Kalıcı tablolar, günlükler, geri dönüş tabloları ve ikincil dizin alt tabloları kalıcı alan kullanır.

Kalıcı alan, veritabanı / kullanıcı için önceden tahsis edilmemiştir. Veritabanının / kullanıcının kullanabileceği maksimum alan miktarı olarak tanımlanırlar. Kalıcı alan miktarı, AMP sayısına bölünür. AMP sınırı başına her aşıldığında, bir hata mesajı oluşturulur.

Biriktirme Alanı

Biriktirme alanı, SQL sorgusunun ara sonuçlarını tutmak için sistem tarafından kullanılan kullanılmayan kalıcı alandır. Biriktirme alanı olmayan kullanıcılar herhangi bir sorgu yürütemez.

Kalıcı alana benzer şekilde, biriktirme alanı, kullanıcının kullanabileceği maksimum alan miktarını tanımlar. Biriktirme alanı, AMP sayısına bölünür. AMP sınırı başına her aşıldığında, kullanıcı bir biriktirme alanı hatası alır.

Sıcaklık Alanı

Geçici alan, Global Geçici tablolar tarafından kullanılan kullanılmayan kalıcı alandır. Geçici alan ayrıca AMP sayısına bölünür.

Bir tablo yalnızca bir birincil dizin içerebilir. Daha sık olarak, tablonun diğer sütunları içerdiği ve bunları kullanarak verilere sıklıkla erişilen senaryolarla karşılaşırsınız. Teradata, bu sorgular için tam tablo taraması gerçekleştirecektir. İkincil dizinler bu sorunu çözer.

İkincil dizinler, verilere erişmek için alternatif bir yoldur. Birincil dizin ile ikincil dizin arasında bazı farklılıklar vardır.

  • İkincil dizin, veri dağıtımına dahil değildir.

  • İkincil indeks değerleri alt tablolarda saklanır. Bu tablolar tüm AMP'lerde oluşturulmuştur.

  • İkincil dizinler isteğe bağlıdır.

  • Tablo oluşturma sırasında veya bir tablo oluşturulduktan sonra oluşturulabilirler.

  • Alt tablo oluşturdukları için ek alan kaplarlar ve ayrıca her yeni satır için alt tabloların güncellenmesi gerektiğinden bakım gerektirirler.

İki tür ikincil dizin vardır -

  • Benzersiz İkincil Endeks (USI)
  • Benzersiz Olmayan İkincil Endeks (NUSI)

Benzersiz İkincil Endeks (USI)

Benzersiz İkincil Dizin, USI olarak tanımlanan sütunlar için yalnızca benzersiz değerlere izin verir. Sıraya USI ile erişim iki amperlik bir işlemdir.

Benzersiz İkincil Dizin Oluşturun

Aşağıdaki örnek, çalışan tablosunun EmployeeNo sütununda USI oluşturur.

CREATE UNIQUE INDEX(EmployeeNo) on employee;

Benzersiz Olmayan İkincil Endeks (NUSI)

Benzersiz Olmayan İkincil Dizin, NUSI olarak tanımlanan sütunlar için yinelenen değerlere izin verir. Sıraya NUSI ile erişmek, tamamen amfi işlemidir.

Benzersiz Olmayan İkincil Dizin Oluşturun

Aşağıdaki örnek, çalışan tablosunun FirstName sütununda NUSI oluşturur.

CREATE INDEX(FirstName) on Employee;

Teradata optimizer, her SQL sorgusu için bir yürütme stratejisi ile gelir. Bu yürütme stratejisi, SQL sorgusu içinde kullanılan tablolarda toplanan istatistiklere dayanmaktadır. Tablo üzerindeki istatistikler COLLECT STATISTICS komutu kullanılarak toplanır. Optimize edici, optimum yürütme stratejisi bulmak için ortam bilgilerine ve veri demografisine ihtiyaç duyar.

Çevre Bilgileri

  • Düğüm, AMP ve CPU Sayısı
  • Bellek miktarı

Veri Demografisi

  • Satır sayısı
  • Satır boyutu
  • Tablodaki değer aralığı
  • Değer başına satır sayısı
  • Null Sayısı

Tabloda istatistik toplamak için üç yaklaşım vardır.

  • Rastgele AMP Örneklemesi
  • Tam istatistik koleksiyonu
  • ÖRNEK seçeneğini kullanma

İstatistik Toplama

COLLECT STATISTICS komutu, bir tablo üzerinde istatistik toplamak için kullanılır.

Sözdizimi

Aşağıda, bir tabloda istatistik toplamak için temel sözdizimi verilmiştir.

COLLECT [SUMMARY] STATISTICS   
INDEX (indexname) COLUMN (columnname) 
ON <tablename>;

Misal

Aşağıdaki örnek, Employee tablosunun EmployeeNo sütununda istatistikleri toplar.

COLLECT STATISTICS COLUMN(EmployeeNo) ON Employee;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

*** Update completed. 2 rows changed. 
*** Total elapsed time was 1 second.

İstatistikleri Görüntüleme

HELP STATISTICS komutunu kullanarak toplanan istatistikleri görüntüleyebilirsiniz.

Sözdizimi

Toplanan istatistikleri görüntülemek için sözdizimi aşağıdadır.

HELP STATISTICS <tablename>;

Misal

Çalışan tablosunda toplanan istatistikleri görüntülemek için bir örnek aşağıdadır.

HELP STATISTICS employee;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki sonucu verir.

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

Tablolar tarafından kullanılan depolamayı azaltmak için sıkıştırma kullanılır. Teradata'da sıkıştırma, NULL dahil 255'e kadar farklı değeri sıkıştırabilir. Depolama azaldığından, Teradata bir blokta daha fazla kayıt depolayabilir. Bu, herhangi bir G / Ç işlemi blok başına daha fazla satır işleyebileceğinden, iyileştirilmiş sorgu yanıt süresi ile sonuçlanır. Sıkıştırma, CREATE TABLE kullanılarak tablo oluştururken veya ALTER TABLE komutu kullanılarak tablo oluşturulduktan sonra eklenebilir.

Sınırlamalar

  • Sütun başına yalnızca 255 değer sıkıştırılabilir.
  • Birincil Dizin sütunu sıkıştırılamaz.
  • Uçucu tablolar sıkıştırılamaz.

Çok Değerli Sıkıştırma (MVC)

Aşağıdaki tablo, DepatmentNo alanını 1, 2 ve 3 değerleri için sıkıştırır. Bir sütuna sıkıştırma uygulandığında, bu sütunun değerleri satırla birlikte depolanmaz. Bunun yerine, değerler her AMP'deki Tablo başlığında saklanır ve değeri belirtmek için satıra yalnızca varlık bitleri eklenir.

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);

Çok Değerli sıkıştırma, sonlu değerlere sahip büyük bir tabloda bir sütununuz olduğunda kullanılabilir.

EXPLAIN komutu, ayrıştırma motorunun yürütme planını İngilizce olarak döndürür. Başka bir EXPLAIN komutu dışında herhangi bir SQL ifadesiyle kullanılabilir. Bir sorgudan önce EXPLAIN komutu geldiğinde, Ayrıştırma Motorunun yürütme planı AMP'ler yerine kullanıcıya döndürülür.

EXPLAIN örnekleri

Aşağıdaki tanıma sahip Çalışan tablosunu düşünün.

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 );

EXPLAIN planının bazı örnekleri aşağıda verilmiştir.

Tam Tablo Tarama (FTS)

SELECT deyiminde hiçbir koşul belirtilmediğinde, optimize edici tablonun her satırına erişilen Tam Tablo Taramasını kullanmayı seçebilir.

Misal

Aşağıda, optimize edicinin FTS'yi seçebileceği örnek bir sorgu verilmiştir.

EXPLAIN SELECT * FROM employee;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Görüldüğü gibi, optimize edici tüm AMP'lere ve AMP içindeki tüm satırlara erişmeyi seçer.

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.

Benzersiz Birincil Dizin

Satırlara Benzersiz Birincil Dizin kullanılarak erişildiğinde, bu bir AMP işlemidir.

EXPLAIN SELECT * FROM employee WHERE EmployeeNo = 101;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Görüldüğü gibi, bu tek bir AMP alımıdır ve optimize edici, satıra erişmek için benzersiz birincil dizini kullanıyor.

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.

Benzersiz İkincil Endeks

Sıralara Unique Secondary Index kullanılarak erişildiğinde, bu iki amperlik bir işlemdir.

Misal

Aşağıdaki tanıma sahip Maaş tablosunu düşünün.

CREATE SET TABLE SALARY,FALLBACK ( 
   EmployeeNo INTEGER, 
   Gross INTEGER, 
   Deduction INTEGER, 
   NetPay INTEGER 
)
PRIMARY INDEX ( EmployeeNo ) 
UNIQUE INDEX (EmployeeNo);

Aşağıdaki SELECT ifadesini düşünün.

EXPLAIN SELECT * FROM Salary WHERE EmployeeNo = 101;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Görülebileceği gibi, optimize edici, benzersiz ikincil indeks kullanarak iki amper işleminde satırı alır.

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.

Ek koşullar

EXPLAIN planında yaygın olarak görülen terimlerin listesi aşağıdadır.

... (Last Use) …

Bir biriktirme dosyası artık gerekli değildir ve bu adım tamamlandığında serbest bırakılacaktır.

... with no residual conditions …

Satırlara tüm uygulanabilir koşullar uygulanmıştır.

... END TRANSACTION …

İşlem kilitleri serbest bırakılır ve değişiklikler yapılır.

... eliminating duplicate rows ...

Yinelenen satırlar ayar tablolarında değil, yalnızca biriktirme dosyalarında bulunur. DISTINCT işlemi yapmak.

... by way of a traversal of index #n extracting row ids only …

İkincil bir dizinde bulunan Satır Kimliklerini içeren bir biriktirme dosyası oluşturulur (dizin #n)

... we do a SMS (set manipulation step) …

Bir UNION, MINUS veya INTERSECT operatörü kullanarak satırları birleştirmek.

... which is redistributed by hash code to all AMPs.

Bir birleştirme hazırlığında verileri yeniden dağıtma.

... which is duplicated on all AMPs.

Bir birleştirmeye hazırlık olarak daha küçük tablodan (SPOOL açısından) verilerin çoğaltılması.

... (one_AMP) or (group_AMPs)

Tüm AMP'ler yerine bir AMP veya AMP alt kümesinin kullanılacağını belirtir.

Bir satır, birincil dizin değerine göre belirli bir AMP'ye atanır. Teradata, satırı hangi AMP'nin alacağını belirlemek için karma algoritma kullanır.

Aşağıda, karma algoritma hakkında yüksek seviyeli bir diyagram bulunmaktadır.

Verileri eklemek için adımlar aşağıdadır.

  • İstemci bir sorgu gönderir.

  • Ayrıştırıcı sorguyu alır ve kaydın PI değerini karma algoritmaya iletir.

  • Karma algoritması, birincil dizin değerini hash eder ve Satır Karma adı verilen 32 bitlik bir sayı döndürür.

  • Satır özetinin yüksek dereceli bitleri (ilk 16 bit), karma harita girişini tanımlamak için kullanılır. Karma harita bir AMP # içerir. Karma harita, belirli AMP # içeren bir grup dizisidir.

  • BYNET, verileri tanımlanan AMP'ye gönderir.

  • AMP, diski içindeki satırı bulmak için 32 bit Satır hashini kullanır.

  • Aynı satır özetine sahip herhangi bir kayıt varsa, 32 bitlik bir sayı olan benzersizlik kimliğini artırır. Yeni satır karması için, benzersizlik kimliği 1 olarak atanır ve aynı satır özetine sahip bir kayıt eklendiğinde artırılır.

  • Satır hash ve Benzersizlik Kimliği kombinasyonu, Satır Kimliği olarak adlandırılır.

  • Satır kimliği, diskteki her kaydın ön ekini oluşturur.

  • AMP'deki her tablo satırı mantıksal olarak Satır Kimliklerine göre sıralanır.

Tablolar Nasıl Saklanır

Tablolar, Satır Kimliğine (Satır karması + benzersizlik kimliği) göre sıralanır ve ardından AMP'lerde saklanır. Satır kimliği, her veri satırıyla birlikte saklanır.

Satır Hash Benzersizlik kimliği Çalışan Hayır İsim Soyadı
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, somutlaştırılmış bir görünümdür. Tanımı kalıcı olarak saklanır ve birleştirme indeksinde belirtilen temel tablolar her güncellendiğinde veriler güncellenir. JOIN INDEX, bir veya daha fazla tablo içerebilir ve ayrıca önceden toplanmış veriler içerebilir. Birleştirme dizinleri esas olarak performansı artırmak için kullanılır.

Farklı tipte birleştirme indeksleri mevcuttur.

  • Tek Tablo Birleştirme Dizini (STJI)
  • Çoklu Masa Birleştirme Endeksi (MTJI)
  • Toplu Katılım Dizini (AJI)

Tek Tablo Birleştirme Dizini

Tek Tablo Birleştirme indeksi, büyük bir tabloyu temel tablodakinden farklı birincil indeks sütunlarına göre bölümlemeye izin verir.

Sözdizimi

Bir JOIN INDEX'in sözdizimi aşağıdadır.

CREATE JOIN INDEX <index name> 
AS 
<SELECT Query> 
<Index Definition>;

Misal

Aşağıdaki Çalışan ve Maaş tablolarını düşünün.

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);

Aşağıda, Employee tablosunda Employee_JI adlı bir Join dizini oluşturan bir örnek verilmiştir.

CREATE JOIN INDEX Employee_JI 
AS 
SELECT EmployeeNo,FirstName,LastName, 
BirthDate,JoinedDate,DepartmentNo 
FROM Employee 
PRIMARY INDEX(FirstName);

Kullanıcı EmployeeNo'da WHERE yan tümcesi içeren bir sorgu gönderirse, sistem benzersiz birincil dizini kullanarak Çalışan tablosunu sorgulayacaktır. Kullanıcı, çalışan_adı kullanarak çalışan tablosunu sorgularsa, sistem çalışan_adı kullanarak Employee_JI katılma dizinine erişebilir. Birleştirme dizininin satırları, çalışan_adı sütununda karma hale getirilmiştir. Birleştirme dizini tanımlanmamışsa ve çalışan_adı ikincil dizin olarak tanımlanmamışsa, sistem, zaman alan satırlara erişmek için tam tablo taraması gerçekleştirecektir.

Aşağıdaki EXPLAIN planını çalıştırabilir ve optimize edici planını doğrulayabilirsiniz. Aşağıdaki örnekte, tablo Employee_Name sütununu kullanarak sorguladığında, optimize edicinin temel Çalışan tablosu yerine Katılma Dizini kullandığını görebilirsiniz.

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.

Çoklu Masa Birleştirme Dizini

Birden fazla tablonun birleştirilmesiyle çoklu tablo birleştirme indeksi oluşturulur. Çoklu tablo birleştirme indeksi, performansı artırmak için sık birleştirilmiş tabloların sonuç kümesini depolamak için kullanılabilir.

Misal

Aşağıdaki örnek, Employee ve Salary tablolarına katılarak Employee_Salary_JI adlı bir JOIN INDEX oluşturur.

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);

Çalışan veya Maaş temel tabloları güncellendiğinde, Katılma indeksi Employee_Salary_JI da otomatik olarak güncellenir. Çalışan ve Maaş tablolarını birleştiren bir sorgu çalıştırıyorsanız, optimize edici, tabloları birleştirmek yerine Employee_Salary_JI'deki verilere doğrudan erişmeyi seçebilir. Sorgudaki EXPLAIN planı, optimize edicinin temel tabloyu veya Birleştirme dizini seçip seçmeyeceğini doğrulamak için kullanılabilir.

Toplu Katılma Dizini

Bir tablo belirli sütunlarda tutarlı bir şekilde toplanmışsa, performansı artırmak için toplu birleştirme indeksi tabloda tanımlanabilir. Toplam birleştirme dizininin bir sınırlaması, yalnızca SUM ve COUNT işlevlerini desteklemesidir.

Misal

Aşağıdaki örnekte Çalışan ve Maaş, Departman başına toplam maaşı belirlemek için birleştirilmiştir.

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);

Görünümler, sorgu tarafından oluşturulan veritabanı nesneleridir. Görünümler, tek bir tablo veya birleştirme yoluyla birden çok tablo kullanılarak oluşturulabilir. Tanımları veri sözlüğünde kalıcı olarak saklanır, ancak verilerin kopyasını saklamazlar. Görünüm için veriler dinamik olarak oluşturulur.

Bir görünüm, tablonun satırlarının bir alt kümesini veya tablonun sütunlarının bir alt kümesini içerebilir.

Görünüm Oluşturun

Görünümler, CREATE VIEW deyimi kullanılarak oluşturulur.

Sözdizimi

Görünüm oluşturmak için sözdizimi aşağıdadır.

CREATE/REPLACE VIEW <viewname> 
AS  
<select query>;

Misal

Aşağıdaki Çalışan tablosunu düşünün.

Çalışan Hayır İsim Soyadı Doğum günü
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

Aşağıdaki örnek, Çalışan tablosunda bir görünüm oluşturur.

CREATE VIEW Employee_View 
AS 
SELECT 
EmployeeNo, 
FirstName, 
LastName, 
FROM  
Employee;

Görünümleri Kullanma

Görünümlerden veri almak için normal SELECT deyimini kullanabilirsiniz.

Misal

Aşağıdaki örnek, kayıtları Employee_View'dan alır;

SELECT EmployeeNo, FirstName, LastName FROM Employee_View;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

*** 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

Görünümleri Değiştirme

Mevcut bir görünüm REPLACE VIEW deyimi kullanılarak değiştirilebilir.

Bir görünümü değiştirmek için sözdizimi aşağıdadır.

REPLACE VIEW <viewname> 
AS  
<select query>;

Misal

Aşağıdaki örnek, ek sütunlar eklemek için Employee_View görünümünü değiştirir.

REPLACE VIEW Employee_View 
AS 
SELECT 
EmployeeNo, 
FirstName, 
BirthDate,
JoinedDate 
DepartmentNo 
FROM  
Employee;

Görünümü Bırak

DROP VIEW deyimi kullanılarak mevcut bir görünüm bırakılabilir.

Sözdizimi

DROP VIEW sözdizimi aşağıdadır.

DROP VIEW <viewname>;

Misal

Aşağıda Employee_View görünümünü düşürmek için bir örnek verilmiştir.

DROP VIEW Employee_View;

Görünümlerin Avantajları

  • Görünümler, bir tablonun satırlarını veya sütunlarını kısıtlayarak ek güvenlik düzeyi sağlar.

  • Kullanıcılara temel tablolar yerine yalnızca görünümlere erişim verilebilir.

  • Görünümler kullanarak bunları önceden birleştirerek birden çok tablonun kullanımını basitleştirir.

Makro, Makro adını çağırarak saklanan ve çalıştırılan bir SQL deyimleri kümesidir. Makroların tanımı Veri Sözlüğü'nde saklanır. Kullanıcılar, Makroyu yürütmek için yalnızca EXEC ayrıcalığına ihtiyaç duyar. Kullanıcılar, Makro içinde kullanılan veritabanı nesneleri üzerinde ayrı ayrıcalıklara ihtiyaç duymazlar. Makro ifadeleri tek bir işlem olarak yürütülür. Makrodaki SQL ifadelerinden biri başarısız olursa, tüm ifadeler geri alınır. Makrolar parametreleri kabul edebilir. Makrolar DDL ifadeleri içerebilir, ancak bu Makrodaki son ifade olmalıdır.

Makrolar Oluşturun

Makrolar, CREATE MACRO deyimi kullanılarak oluşturulur.

Sözdizimi

Aşağıda CREATE MACRO komutunun genel sözdizimi verilmiştir.

CREATE MACRO <macroname> [(parameter1, parameter2,...)] ( 
   <sql statements> 
);

Misal

Aşağıdaki Çalışan tablosunu düşünün.

Çalışan Hayır İsim Soyadı Doğum günü
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

Aşağıdaki örnek, Get_Emp adlı bir Makro oluşturur. Çalışan tablosundan kayıtları almak için bir seçme ifadesi içerir.

CREATE MACRO Get_Emp AS ( 
   SELECT 
   EmployeeNo, 
   FirstName, 
   LastName 
   FROM  
   employee 
   ORDER BY EmployeeNo; 
);

Makroları Yürütme

Makrolar, EXEC komutu kullanılarak yürütülür.

Sözdizimi

Aşağıdaki EXECUTE MACRO komutunun sözdizimidir.

EXEC <macroname>;

Misal

Aşağıdaki örnek, Get_Emp Makro adlarını çalıştırır; Aşağıdaki komut yürütüldüğünde, tüm kayıtları çalışan tablosundan alır.

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

Parametreli Makrolar

Teradata Makroları parametreleri kabul edebilir. Bir Makro içinde bu parametrelere; (noktalı virgül).

Aşağıda, parametreleri kabul eden bir Makro örneği verilmiştir.

CREATE MACRO Get_Emp_Salary(EmployeeNo INTEGER) AS ( 
   SELECT 
   EmployeeNo, 
   NetPay 
   FROM  
   Salary 
   WHERE EmployeeNo = :EmployeeNo; 
);

Parametreli Makroları Yürütme

Makrolar, EXEC komutu kullanılarak yürütülür. Makroları yürütmek için EXEC ayrıcalığına ihtiyacınız var.

Sözdizimi

EXECUTE MACRO ifadesinin sözdizimi aşağıdadır.

EXEC <macroname>(value);

Misal

Aşağıdaki örnek, Get_Emp Makro adlarını çalıştırır; Çalışan numarasını parametre olarak kabul eder ve o çalışan için çalışan tablosundan kayıtları çıkarır.

EXEC Get_Emp_Salary(101); 
*** Query completed. One row found. 2 columns returned. 
*** Total elapsed time was 1 second.
 
EmployeeNo      NetPay 
-----------  ------------ 
   101           36000

Bir saklı yordam, bir dizi SQL deyimi ve yordamsal deyim içerir. Yalnızca usule ilişkin ifadeler içerebilirler. Depolanan prosedürün tanımı veritabanında saklanır ve parametreler veri sözlüğü tablolarında depolanır.

Avantajlar

  • Saklanan prosedürler, istemci ve sunucu arasındaki ağ yükünü azaltır.

  • Verilere doğrudan erişmek yerine depolanan prosedürler aracılığıyla erişildiği için daha iyi güvenlik sağlar.

  • İş mantığı test edilip sunucuda saklandığı için daha iyi bakım sağlar.

Prosedür Oluşturma

Depolanan Prosedürler, CREATE PROCEDURE deyimi kullanılarak oluşturulur.

Sözdizimi

Aşağıda, CREATE PROCEDURE ifadesinin genel sözdizimi verilmiştir.

CREATE PROCEDURE <procedurename> ( [parameter 1 data type, parameter 2 data type..] ) 
BEGIN 
   <SQL or SPL statements>; 
END;

Misal

Aşağıdaki Maaş Tablosunu düşünün.

Çalışan Hayır Brüt Kesinti Net ödeme
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

Aşağıdaki örnek, değerleri kabul etmek ve Maaş Tablosuna eklemek için InsertSalary adında bir saklı yordam oluşturur.

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;

Yürütme Prosedürleri

Depolanan Prosedürler, CALL deyimi kullanılarak yürütülür.

Sözdizimi

Aşağıda, CALL ifadesinin genel sözdizimi verilmiştir.

CALL <procedure name> [(parameter values)];

Misal

Aşağıdaki örnek, saklı yordamı InsertSalary çağırır ve kayıtları Maaş Tablosuna ekler.

CALL InsertSalary(105,20000,2000,18000);

Yukarıdaki sorgu yürütüldüğünde, aşağıdaki çıktıyı üretir ve eklenen satırı Maaş tablosunda görebilirsiniz.

Çalışan Hayır Brüt Kesinti Net ödeme
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

Bu bölüm, Teradata'da bulunan çeşitli JOIN stratejilerini tartışmaktadır.

Birleştirme Yöntemleri

Teradata, birleştirme işlemlerini gerçekleştirmek için farklı birleştirme yöntemleri kullanır. Yaygın olarak kullanılan Birleştirme yöntemlerinden bazıları şunlardır:

  • Birleştir Katıl
  • İç içe Birleştirme
  • Ürün Birleştirme

Birleştir Katıl

Birleştirme Birleştirme yöntemi, birleştirme eşitlik koşuluna dayandığında gerçekleşir. Birleştirme Birleştirme, birleştirme satırlarının aynı AMP'de olmasını gerektirir. Satırlar, satır karmalarına göre birleştirilir. Birleştirme Birleştirme, satırları aynı AMP'ye getirmek için farklı birleştirme stratejileri kullanır.

Strateji 1

Birleştirme sütunları, karşılık gelen tabloların birincil diziniyse, birleşen satırlar zaten aynı AMP üzerindedir. Bu durumda dağıtıma gerek yoktur.

Aşağıdaki Çalışan ve Maaş Tablolarını düşünün.

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);

Bu iki tablo EmployeeNo sütununda birleştirildiğinde, EmployeeNo birleştirilen her iki tablonun birincil indeksi olduğundan yeniden dağıtım gerçekleşmez.

Strateji 2

Aşağıdaki Çalışan ve Departman tablolarını inceleyin.

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 );

Bu iki tablo DeparmentNo sütununda birleştirilirse, DepartmentNo bir tablodaki birincil dizin ve başka bir tablodaki birincil olmayan dizin olduğundan satırların yeniden dağıtılması gerekir. Bu senaryoda, birleştirme satırları aynı AMP üzerinde olmayabilir. Böyle bir durumda Teradata, çalışan tablosunu DepartmentNo sütununda yeniden dağıtabilir.

Strateji 3

Yukarıdaki Çalışan ve Departman tabloları için Teradata, Departman tablosunun boyutu küçükse Departman tablosunu tüm AMP'lerde çoğaltabilir.

İç içe Birleştirme

İç İçe Birleştirme tüm AMP'leri kullanmaz. İç İçe Birleştirme işleminin gerçekleşmesi için koşullardan birinin, bir tablonun benzersiz birincil dizininde eşitlik olması ve ardından bu sütunun diğer tablodaki herhangi bir dizine katılması gerekir.

Bu senaryoda, sistem bir tablonun Benzersiz Birincil dizinini kullanarak bir satırı alır ve diğer tablodan eşleşen kayıtları almak için bu satır karmasını kullanır. İç içe birleştirme, tüm Birleştirme yöntemleri arasında en verimli olanıdır.

Ürün Birleştirme

Product Join, bir tablodaki her uygun satırı, diğer tablodaki her niteleyici satırla karşılaştırır. Ürün birleştirme, aşağıdaki faktörlerden bazıları nedeniyle gerçekleşebilir -

  • Koşulun eksik olduğu yer.
  • Birleştirme koşulu eşitlik koşuluna bağlı değildir.
  • Tablo takma adları doğru değil.
  • Çoklu katılma koşulları.

Partitioned Primary Index (ÜFE), belirli sorguların performansını iyileştirmede yararlı olan bir indeksleme mekanizmasıdır. Satırlar bir tabloya eklendiğinde, bir AMP'de depolanır ve satır karma sırasına göre düzenlenir. Bir tablo PPI ile tanımlandığında, satırlar bölüm numaralarına göre sıralanır. Her bölüm içinde, satır hashlerine göre düzenlenirler. Satırlar, tanımlanan bölüm ifadesine göre bir bölüme atanır.

Avantajlar

  • Belirli sorgular için tam tablo taramasından kaçının.

  • Ek fiziksel yapı ve ek G / Ç bakımı gerektiren ikincil dizini kullanmaktan kaçının.

  • Büyük bir tablonun bir alt kümesine hızla erişin.

  • Eski verileri hızlıca bırakın ve yeni veriler ekleyin.

Misal

SiparişNo'da Birincil Endeks içeren aşağıdaki Siparişler tablosunu göz önünde bulundurun.

MağazaNo Sipariş No Sipariş tarihi Sipariş toplamı
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

Aşağıdaki tablolarda gösterildiği gibi kayıtların AMP'ler arasında dağıtıldığını varsayın. Kaydedilenler, satır karmalarına göre sıralanan AMP'lerde saklanır.

AMP 1

RowHash Sipariş No Sipariş tarihi
1 7505 2015-10-03
2 7504 2015-10-03
3 7501 2015-10-01
4 7508 2015-10-05

AMP 2

RowHash Sipariş No Sipariş tarihi
1 7507 2015-10-05
2 7502 2015-10-02
3 7506 2015-10-04
4 7503 2015-10-02

Belirli bir tarihe ait siparişleri çıkarmak için bir sorgu çalıştırırsanız, optimize edici Tam Tablo Taramasını kullanmayı seçebilir, ardından AMP içindeki tüm kayıtlara erişilebilir. Bunu önlemek için sipariş tarihini Bölümlenmiş Birincil Dizin olarak tanımlayabilirsiniz. Siparişler tablosuna satırlar eklendiğinde, sipariş tarihine göre bölümlenirler. Her bölüm içinde satır hash'lerine göre sıralanacaklar.

Aşağıdaki veriler, Sipariş Tarihine göre bölümlenmişlerse kayıtların AMP'lerde nasıl depolanacağını gösterir. Kayıtlara Sipariş Tarihine göre erişmek için bir sorgu çalıştırılırsa, yalnızca söz konusu sipariş için kayıtları içeren bölüme erişilecektir.

AMP 1

Bölüm RowHash Sipariş No Sipariş tarihi
0 3 7501 2015-10-01
1 1 7505 2015-10-03
1 2 7504 2015-10-03
2 4 7508 2015-10-05

AMP 2

Bölüm RowHash Sipariş No Sipariş tarihi
0 2 7502 2015-10-02
0 4 7503 2015-10-02
1 3 7506 2015-10-04
2 1 7507 2015-10-05

Aşağıda, birincil Dizin bölümü içeren bir tablo oluşturmak için bir örnek verilmiştir. PARTITION BY yan tümcesi, bölümü tanımlamak için kullanılır.

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
);

Yukarıdaki örnekte, tablo SiparişTarihi sütununa göre bölümlenmiştir. Her gün için ayrı bir bölüm olacaktır.

OLAP işlevleri, toplama işlevlerinin yalnızca bir değer döndürmesi dışında, OLAP işlevinin toplamalara ek olarak tek tek satırları sağlaması dışında toplama işlevlerine benzer.

Sözdizimi

OLAP işlevinin genel sözdizimi aşağıdadır.

<aggregate function> OVER  
([PARTITION BY] [ORDER BY columnname][ROWS BETWEEN 
UNBOUDED PRECEDING AND UNBOUNDED FOLLOWING)

Toplama işlevleri SUM, COUNT, MAX, MIN, AVG olabilir.

Misal

Aşağıdaki Maaş tablosunu düşünün.

Çalışan Hayır Brüt Kesinti Net ödeme
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

Aşağıda, Maaş tablosunda NetPay'in kümülatif toplamını veya cari toplamını bulmak için bir örnek verilmiştir. Kayıtlar ÇalışanNo'ya göre sıralanır ve kümülatif toplam NetPay sütununda hesaplanır.

SELECT  
EmployeeNo, NetPay, 
SUM(Netpay) OVER(ORDER BY EmployeeNo ROWS  
UNBOUNDED PRECEDING) as TotalSalary 
FROM Salary;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

EmployeeNo     NetPay     TotalSalary 
-----------  -----------  ----------- 
   101         36000        36000 
   102         74000        110000 
   103         83000        193000 
   104         70000        263000 
   105         18000        281000

RANK

RANK işlevi, kayıtları sağlanan sütuna göre sıralar. RANK işlevi, sıralamaya göre döndürülen kayıtların sayısını da filtreleyebilir.

Sözdizimi

RANK işlevini kullanmak için genel sözdizimi aşağıdadır.

RANK() OVER 
([PARTITION BY columnnlist] [ORDER BY columnlist][DESC|ASC])

Misal

Aşağıdaki Çalışan tablosunu düşünün.

Çalışan Hayır İsim Soyadı JoinedDate Departman Kimliği Doğum günü
101 Mike James 27.3.2005 1 1/5/1980
102 Robert Williams 25.4.2007 2 3/5/1983
103 Peter Paul 21.3.2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Robert James 1/4/2008 3 12/1/1984

Sorguyu takiben, çalışan tablosu kayıtlarını Katılma Tarihine göre sıralar ve Katılma Tarihindeki sıralamayı belirler.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(ORDER BY JoinedDate) as Seniority 
FROM Employee;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir.

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

PARTITION BY yan tümcesi, verileri PARTITION BY yan tümcesinde tanımlanan sütunlara göre gruplandırır ve her grup içinde OLAP işlevini gerçekleştirir. Aşağıda PARTITION BY yan tümcesini kullanan sorguya bir örnek verilmiştir.

SELECT EmployeeNo, JoinedDate,RANK() 
OVER(PARTITION BY DeparmentNo ORDER BY JoinedDate) as Seniority 
FROM Employee;

Yukarıdaki sorgu yürütüldüğünde aşağıdaki çıktıyı üretir. Her Departman için Derecenin sıfırlandığını görebilirsiniz.

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

Bu bölümde, Teradata'da veri koruma için kullanılabilen özellikler anlatılmaktadır.

Geçici Dergisi

Teradata, verileri işlem hatalarından korumak için Transient Journal kullanır. Herhangi bir işlem çalıştırıldığında, Transient günlük, işlem başarılı olana veya başarıyla geri alınana kadar etkilenen satırların önceki görüntülerinin bir kopyasını tutar. Ardından önceki görüntüler atılır. Her AMP'de geçici günlük tutulur. Otomatik bir işlemdir ve devre dışı bırakılamaz.

Geri çekil

Fallback, bir tablonun satırlarının ikinci kopyasını Fallback AMP olarak adlandırılan başka bir AMP'de depolayarak tablo verilerini korur. Bir AMP başarısız olursa, yedek satırlara erişilir. Bununla, bir AMP başarısız olsa bile, yedek AMP aracılığıyla veriler yine de kullanılabilir. Geri dönüş seçeneği tablo oluştururken veya tablo oluşturduktan sonra kullanılabilir. Geri dönüş, verileri AMP hatasından korumak için tablonun satırlarının ikinci kopyasının her zaman başka bir AMP'de depolanmasını sağlar. Ancak, yedek, iki kat daha fazla depolama alanı ve Ekleme / Silme / Güncelleme için G / Ç'yi kaplar.

Aşağıdaki diyagram, satırların yedek kopyasının başka bir AMP'de nasıl saklandığını gösterir.

Aşağı AMP Kurtarma Günlüğü

Down AMP kurtarma günlüğü, AMP başarısız olduğunda ve tablo geri dönüş korumalı olduğunda etkinleştirilir. Bu günlük, başarısız AMP verilerindeki tüm değişikliklerin kaydını tutar. Günlük, kümedeki kalan AMP'lerde etkinleştirilir. Otomatik bir işlemdir ve devre dışı bırakılamaz. Başarısız AMP yayınlandığında, Down AMP kurtarma günlüğündeki veriler AMP ile senkronize edilir. Bu yapıldıktan sonra dergi atılır.

Cliques

Clique, verileri Düğüm hatalarından korumak için Teradata tarafından kullanılan bir mekanizmadır. Klik, ortak bir Disk Dizisi kümesini paylaşan bir dizi Teradata düğümünden başka bir şey değildir. Bir düğüm başarısız olduğunda, başarısız olan düğümden gelen vprocs, klikteki diğer düğümlere geçecek ve disk dizilerine erişmeye devam edecektir.

Çalışırken Bekleme Düğümü

Çalışırken Bekleme Düğümü, üretim ortamına katılmayan bir düğümdür. Bir düğüm başarısız olursa, başarısız olan düğümlerden gelen vprocs, çalışırken bekleme düğümüne geçecektir. Başarısız olan düğüm kurtarıldığında, etkin bekleme düğümü haline gelir. Düğüm arızaları durumunda performansı korumak için Hot Standby düğümleri kullanılır.

RAID

Yedekli Bağımsız Diskler Dizisi (RAID), verileri Disk Hatalarından korumak için kullanılan bir mekanizmadır. Disk Dizisi, mantıksal birim olarak gruplandırılmış bir dizi diskten oluşur. Bu birim kullanıcıya tek bir birim gibi görünebilir, ancak birkaç diske yayılmış olabilir.

RAID 1, Teradata'da yaygın olarak kullanılır. RAID 1'de her disk bir ayna disk ile ilişkilendirilir. Birincil diskteki verilerde yapılan herhangi bir değişiklik, ayna kopyasına da yansıtılır. Birincil disk arızalanırsa, ayna diskteki verilere erişilebilir.

Bu bölüm, Teradata'daki çeşitli kullanıcı yönetimi stratejilerini tartıştı.

Kullanıcılar

CREATE USER komutu kullanılarak bir kullanıcı oluşturulur. Teradata'da bir kullanıcı aynı zamanda bir veritabanına benzer. Her ikisine de alan atanabilir ve kullanıcıya bir parola atanması dışında veritabanı nesneleri içerebilir.

Sözdizimi

CREATE USER için sözdizimi aşağıdadır.

CREATE USER username 
AS  
[PERMANENT|PERM] = n BYTES 
PASSWORD = password 
TEMPORARY = n BYTES 
SPOOL = n BYTES;

Bir kullanıcı oluştururken, kullanıcı adı, Kalıcı alan ve Parola değerleri zorunludur. Diğer alanlar isteğe bağlıdır.

Misal

Aşağıda, TD01 kullanıcısını oluşturmak için bir örnek verilmiştir.

CREATE USER TD01 
AS  
PERMANENT = 1000000 BYTES 
PASSWORD = ABC$124 
TEMPORARY = 1000000 BYTES 
SPOOL = 1000000 BYTES;

Hesaplar

Yeni bir kullanıcı oluştururken, kullanıcı bir hesaba atanabilir. CREATE USER'deki HESAP seçeneği hesabı atamak için kullanılır. Bir kullanıcı birden fazla hesaba atanabilir.

Sözdizimi

Hesap seçeneğiyle KULLANICI CREATE için sözdizimi aşağıdadır.

CREATE USER username 
PERM = n BYTES 
PASSWORD = password 
ACCOUNT = accountid

Misal

Aşağıdaki örnek, TD02 kullanıcısını oluşturur ve hesabı BT ve Yönetici olarak atar.

CREATE USER TD02 
AS  
PERMANENT = 1000000 BYTES 
PASSWORD = abc$123 
TEMPORARY = 1000000 BYTES 
SPOOL = 1000000 BYTES 
ACCOUNT = (‘IT’,’Admin’);

Kullanıcı, Teradata sisteminde oturum açarken veya SET SESSION komutunu kullanarak sisteme giriş yaptıktan sonra hesap kimliğini belirleyebilir.

.LOGON username, passowrd,accountid 
OR 
SET SESSION ACCOUNT = accountid

Ayrıcalıklar Verin

GRANT komutu, veritabanı nesnelerinde kullanıcıya veya veritabanına bir veya daha fazla ayrıcalık atamak için kullanılır.

Sözdizimi

Aşağıda GRANT komutunun sözdizimi verilmiştir.

GRANT privileges ON objectname TO username;

Ayrıcalıklar INSERT, SELECT, UPDATE, REFERENCES olabilir.

Misal

Aşağıda bir GRANT ifadesi örneği verilmiştir.

GRANT SELECT,INSERT,UPDATE ON Employee TO TD01;

Ayrıcalıkları İptal Edin

REVOKE komutu, kullanıcılardan veya veritabanlarından ayrıcalıkları kaldırır. REVOKE komutu yalnızca açık ayrıcalıkları kaldırabilir.

Sözdizimi

REVOKE komutunun temel sözdizimi aşağıdadır.

REVOKE [ALL|privileges] ON objectname FROM username;

Misal

Aşağıda bir REVOKE komutu örneği verilmiştir.

REVOKE INSERT,SELECT ON Employee FROM TD01;

Bu bölümde, Teradata'da performans ayarlama prosedürü anlatılmaktadır.

Açıklamak

Performans ayarlamadaki ilk adım, sorgunuzda EXPLAIN kullanmaktır. EXPLAIN planı, optimize edicinin sorgunuzu nasıl yürüteceğinin ayrıntılarını verir. Açıklama planında, güven seviyesi, kullanılan birleştirme stratejisi, biriktirme dosyası boyutu, yeniden dağıtım vb. Gibi anahtar kelimeleri kontrol edin.

İstatistikleri Toplayın

Optimizer, etkili yürütme stratejisi oluşturmak için Veri demografisini kullanır. COLLECT STATISTICS komutu, tablonun demografik veri verilerini toplamak için kullanılır. Sütunlarda toplanan istatistiklerin güncel olduğundan emin olun.

  • WHERE yan tümcesinde kullanılan sütunlar ve birleştirme koşulunda kullanılan sütunlar hakkında istatistikler toplayın.

  • Benzersiz Birincil Dizin sütunlarıyla ilgili istatistikleri toplayın.

  • Benzersiz Olmayan İkincil Dizin sütunlarıyla ilgili istatistikleri toplayın. Optimizer, NUSI veya Tam Tablo Tarama kullanıp kullanamayacağına karar verecektir.

  • Temel tablodaki istatistikler toplansa da Katılım Dizini ile ilgili istatistikleri toplayın.

  • Bölümleme sütunlarıyla ilgili istatistikleri toplayın.

Veri tipleri

Uygun veri türlerinin kullanıldığından emin olun. Bu, gereğinden fazla depolama kullanımını önleyecektir.

Dönüştürmek

Açık veri dönüşümlerinden kaçınmak için birleştirme koşulunda kullanılan sütunların veri türlerinin uyumlu olduğundan emin olun.

Çeşit

Gerekmedikçe gereksiz ORDER BY cümlelerini kaldırın.

Biriktirme Alanı Sorunu

Biriktirme alanı hatası, sorgu o kullanıcı için her AMP biriktirme alanı sınırını aşarsa oluşturulur. Açıklama planını doğrulayın ve daha fazla biriktirme alanı tüketen adımı belirleyin. Bu ara sorgular bölünebilir ve geçici tablolar oluşturmak için ayrı ayrı yerleştirilebilir.

Birincil Dizin

Birincil Dizinin tablo için doğru şekilde tanımlandığından emin olun. Birincil dizin sütunu, verileri eşit olarak dağıtmalı ve verilere erişmek için sık sık kullanılmalıdır.

SET Tablosu

Bir SET tablosu tanımlarsanız, optimize edici, eklenen her kayıt için kaydın yinelenip yinelenmediğini kontrol eder. Yinelenen kontrol koşulunu kaldırmak için tablo için Benzersiz İkincil Dizin tanımlayabilirsiniz.

Büyük Masada GÜNCELLEME

Büyük tablonun güncellenmesi zaman alıcı olacaktır. Tabloyu güncellemek yerine kayıtları silebilir ve değiştirilmiş satırlara sahip kayıtları ekleyebilirsiniz.

Geçici Tabloları Kaldırmak

Artık gerekmiyorsa geçici tabloları (aşama tabloları) ve uçucuları bırakın. Bu kalıcı alan ve biriktirme alanı boşaltacaktır.

MULTISET Tablosu

Giriş kayıtlarının yinelenen kayıtları olmayacağından eminseniz, SET tablosu tarafından kullanılan yinelenen satır denetimini önlemek için hedef tabloyu MULTISET tablosu olarak tanımlayabilirsiniz.

FastLoad yardımcı programı, verileri boş tablolara yüklemek için kullanılır. Geçici günlükleri kullanmadığı için veriler hızlı bir şekilde yüklenebilir. Hedef tablo bir MULTISET tablosu olsa bile yinelenen satırları yüklemez.

Sınırlama

Hedef tabloda ikincil dizin, birleştirme dizini ve yabancı anahtar referansı olmamalıdır.

FastLoad Nasıl Çalışır?

FastLoad iki aşamada yürütülür.

Faz 1

  • Ayrıştırma motorları giriş dosyasındaki kayıtları okur ve her AMP'ye bir blok gönderir.

  • Her AMP, kayıt bloklarını depolar.

  • Daha sonra AMP'ler her bir kayda hashing uygular ve bunları doğru AMP'ye yeniden dağıtır.

  • 1. Aşamanın sonunda, her AMP'nin kendi satırları vardır, ancak bunlar satır hash dizisinde değildir.

Faz 2

  • FastLoad, END LOADING deyimini aldığında 2. aşama başlar.

  • Her AMP, satır karmasında kayıtları sıralar ve diske yazar.

  • Hedef tablodaki kilitler kaldırılır ve hata tabloları kaldırılır.

Misal

Aşağıdaki kayıtlarla bir metin dosyası oluşturun ve dosyayı Employee.txt olarak adlandırın.

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

Aşağıda, yukarıdaki dosyayı Employee_Stg tablosuna yüklemek için örnek bir FastLoad komut dosyası verilmiştir.

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;

FastLoad Komut Dosyasını Yürütme

EmployeeLoad.fl giriş dosyası oluşturulduğunda ve FastLoad komut dosyası EmployeeLoad.fl olarak adlandırıldığında, UNIX ve Windows'ta aşağıdaki komutu kullanarak FastLoad komut dosyasını çalıştırabilirsiniz.

FastLoad < EmployeeLoad.fl;

Yukarıdaki komut yürütüldüğünde, FastLoad betiği çalışacak ve günlüğü oluşturacaktır. Günlükte, FastLoad tarafından işlenen kayıtların sayısını ve durum kodunu görebilirsiniz.

**** 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

Hızlı Yükleme Koşulları

FastLoad komut dosyasında kullanılan genel terimlerin listesi aşağıdadır.

  • LOGON - Teradata'da oturum açar ve bir veya daha fazla oturum başlatır.

  • DATABASE - Varsayılan veritabanını ayarlar.

  • BEGIN LOADING - Yüklenecek tabloyu belirtir.

  • ERRORFILES - Oluşturulması / güncellenmesi gereken 2 hata tablosunu belirtir.

  • CHECKPOINT - Kontrol noktasının ne zaman alınacağını tanımlar.

  • SET RECORD - Girdi dosyası formatının formatlı mı, ikili mi, metin mi yoksa formatsız mı olduğunu belirtir.

  • DEFINE - Giriş dosyası düzenini tanımlar.

  • FILE - Girdi dosyası adını ve yolunu belirtir.

  • INSERT - Giriş dosyasındaki kayıtları hedef tabloya ekler.

  • END LOADING- FastLoad'un 2. aşamasını başlatır. Kayıtları hedef tabloya dağıtır.

  • LOGOFF - Tüm oturumları sonlandırır ve FastLoad'u sonlandırır.

MultiLoad bir seferde birden fazla tablo yükleyebilir ve ayrıca INSERT, DELETE, UPDATE ve UPSERT gibi farklı görev türlerini gerçekleştirebilir. Bir seferde en fazla 5 tablo yükleyebilir ve bir kodda en fazla 20 DML işlemi gerçekleştirebilir. MultiLoad için hedef tablo gerekli değildir.

MultiLoad iki modu destekler -

  • IMPORT
  • DELETE

MultiLoad, hedef tabloya ek olarak bir çalışma tablosu, bir günlük tablosu ve iki hata tablosu gerektirir.

  • Log Table - Yeniden başlatma için kullanılacak olan yükleme sırasında alınan kontrol noktalarını korumak için kullanılır.

  • Error Tables- Bu tablolar, bir hata oluştuğunda yükleme sırasında eklenir. İlk hata tablosu dönüştürme hatalarını saklarken, ikinci hata tablosu yinelenen kayıtları saklar.

  • Log Table - Yeniden başlatma amacıyla MultiLoad'un her aşamasından sonuçları korur.

  • Work table- MultiLoad komut dosyası, hedef tablo başına bir çalışma tablosu oluşturur. Çalışma tablosu, DML görevlerini ve giriş verilerini tutmak için kullanılır.

Sınırlama

MultiLoad'un bazı sınırlamaları vardır.

  • Benzersiz İkincil Dizin, hedef tabloda desteklenmiyor.
  • Bilgi tutarlılığı desteklenmiyor.
  • Tetikleyiciler desteklenmez.

MultiLoad Nasıl Çalışır?

MultiLoad içe aktarmanın beş aşaması vardır -

  • Phase 1 - Ön Aşama - Temel kurulum etkinliklerini gerçekleştirir.

  • Phase 2 - DML İşlem Aşaması - DML ifadelerinin sözdizimini doğrular ve bunları Teradata sistemine getirir.

  • Phase 3 - Edinme Aşaması - Giriş verilerini çalışma tablolarına getirir ve tabloyu kilitler.

  • Phase 4 - Uygulama Aşaması - Tüm DML işlemlerini uygular.

  • Phase 5 - Temizleme Aşaması - Masa kilidini kaldırır.

Bir MultiLoad betiğinde yer alan adımlar şunlardır:

  • Step 1 - Günlük tablosunu ayarlayın.

  • Step 2 - Teradata'da oturum açın.

  • Step 3 - Hedef, Çalışma ve Hata tablolarını belirtin.

  • Step 4 - INPUT dosya düzenini tanımlayın.

  • Step 5 - DML sorgularını tanımlayın.

  • Step 6 - İTHALAT dosyasını adlandırın.

  • Step 7 - Kullanılacak DÜZENİ belirtin.

  • Step 8 - Yükü başlatın.

  • Step 9 - Yüklemeyi bitirin ve seansları sonlandırın.

Misal

Aşağıdaki kayıtlarla bir metin dosyası oluşturun ve dosyayı Employee.txt olarak adlandırın.

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

Aşağıdaki örnek, çalışan tablosundaki kayıtları okuyan ve Employee_Stg tablosuna yükleyen bir MultiLoad betiğidir.

.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;

MultiLoad Komut Dosyasını Yürütme

EmployeeLoad.ml giriş dosyası oluşturulup multiload komut dosyası EmployeeLoad.ml olarak adlandırıldıktan sonra, UNIX ve Windows'ta aşağıdaki komutu kullanarak Multiload komut dosyasını çalıştırabilirsiniz.

Multiload < EmployeeLoad.ml;

FastExport yardımcı programı, verileri Teradata tablolarından düz dosyalara aktarmak için kullanılır. Ayrıca verileri rapor formatında da oluşturabilir. Birleştirme kullanılarak veriler bir veya daha fazla tablodan çıkarılabilir. FastExport, verileri 64K bloklar halinde dışa aktardığından, büyük hacimli verilerin çıkarılması için kullanışlıdır.

Misal

Aşağıdaki Çalışan tablosunu düşünün.

Çalışan Hayır İsim Soyadı Doğum günü
101 Mike James 1/5/1980
104 Alex Stuart 11/6/1984
102 Robert Williams 3/5/1983
105 Robert James 12/1/1984
103 Peter Paul 4/1/1983

Aşağıda bir FastExport komut dosyası örneği verilmiştir. Çalışan tablosundaki verileri dışa aktarır ve bir çalışanata.txt dosyasına yazar.

.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;

FastExport Komut Dosyasını Yürütme

Komut dosyası yazıldıktan ve çalışanı.fx olarak adlandırıldıktan sonra, komut dosyasını çalıştırmak için aşağıdaki komutu kullanabilirsiniz.

fexp < employee.fx

Yukarıdaki komutu yürüttükten sonra, aşağıdaki çıktıyı empendedata.txt dosyasında alacaksınız.

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

FastExport Koşulları

FastExport komut dosyasında yaygın olarak kullanılan terimlerin listesi aşağıdadır.

  • LOGTABLE - Yeniden başlatma amacıyla günlük tablosunu belirtir.

  • LOGON - Teradata'da oturum açar ve bir veya daha fazla oturum başlatır.

  • DATABASE - Varsayılan veritabanını ayarlar.

  • BEGIN EXPORT - Dışa aktarmanın başlangıcını gösterir.

  • EXPORT - Hedef dosyayı ve dışa aktarma formatını belirtir.

  • SELECT - Verilerin dışa aktarılacağı seçme sorgusunu belirtir.

  • END EXPORT - FastExport'un sonunu belirtir.

  • LOGOFF - Tüm oturumları sonlandırır ve FastExport'u sonlandırır.

BTEQ yardımcı programı, Teradata'da hem toplu hem de etkileşimli modda kullanılabilen güçlü bir yardımcı programdır. Herhangi bir DDL ifadesini, DML ifadesini çalıştırmak, Makrolar ve saklı prosedürler oluşturmak için kullanılabilir. BTEQ, verileri düz dosyadan Teradata tablolarına aktarmak için kullanılabilir ve ayrıca tablolardan dosyalara veya raporlara veri çıkarmak için de kullanılabilir.

BTEQ Şartları

BTEQ komut dosyalarında yaygın olarak kullanılan terimlerin listesi aşağıdadır.

  • LOGON - Teradata sistemine giriş yapmak için kullanılır.

  • ACTIVITYCOUNT - Önceki sorgudan etkilenen satır sayısını döndürür.

  • ERRORCODE - Önceki sorgunun durum kodunu döndürür.

  • DATABASE - Varsayılan veritabanını ayarlar.

  • LABEL - Bir dizi SQL komutuna bir etiket atar.

  • RUN FILE - Bir dosyada bulunan sorguyu yürütür.

  • GOTO - Kontrolü bir etikete aktarır.

  • LOGOFF - Veritabanından çıkış yapar ve tüm oturumları sonlandırır.

  • IMPORT - Girdi dosyası yolunu belirtir.

  • EXPORT - Çıktı dosyası yolunu belirtir ve dışa aktarmayı başlatır.

Misal

Aşağıda örnek bir BTEQ komut dosyası verilmiştir.

.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;

Yukarıdaki komut dosyası aşağıdaki görevleri gerçekleştirir.

  • Teradata Sisteminde oturum açar.

  • Varsayılan Veritabanını ayarlar.

  • Employee_bkup adlı bir tablo oluşturur.

  • Tabloda herhangi bir kayıt olup olmadığını kontrol etmek için Çalışan tablosundan bir kayıt seçer.

  • Tablo boşsa, employee_bkup tablosunu bırakır.

  • Denetimi, staff_bkup tablosuna kayıt ekleyen bir Label InsertEmployee'ye aktarır

  • Her SQL ifadesinin ardından, ifadenin başarılı olduğundan emin olmak için ERRORCODE öğesini kontrol eder.

  • ACTIVITYCOUNT, önceki SQL sorgusu tarafından seçilen / etkilenen kayıtların sayısını döndürür.