All Products
Search
Document Center

AnalyticDB:Migrasi aplikasi Teradata ke AnalyticDB for PostgreSQL

Last Updated:Mar 29, 2026

AnalyticDB for PostgreSQL kompatibel dengan sintaksis Teradata. Panduan ini mencakup perbedaan sintaksis, pemetaan tipe data, dan padanan fungsi yang diperlukan untuk merencanakan migrasi dari Teradata ke AnalyticDB for PostgreSQL.

Persyaratan migrasi

Migrasi yang sukses dari Teradata ke AnalyticDB for PostgreSQL dirancang untuk memenuhi tujuan berikut:

  • Melakukan migrasi lengkap platform data dasar gudang data.

  • Melakukan migrasi lancar untuk aplikasi yang telah dideploy pada sistem gudang data.

  • Lakukan migrasi platform dan data bisnis tanpa sepengetahuan pengguna bisnis.

  • Memastikan performa gudang data tetap optimal setelah migrasi.

  • Menetapkan durasi dan rencana migrasi yang efisien.

  • Memanfaatkan kembali sepenuhnya arsitektur sistem asli, proses ETL, struktur data, dan alat manajemen.

Lingkup migrasi

Migrasi Teradata lengkap mencakup empat area:

  1. Data historis: Ekspor data sebagai file teks menggunakan delimiter dan pengkodean karakter yang ditentukan, simpan di disk lokal instans Elastic Compute Service (ECS) atau di bucket Object Storage Service (OSS) pada jaringan yang sama dengan instans AnalyticDB for PostgreSQL, lalu muat file tersebut melalui tabel eksternal OSS menggunakan protokol gpfdist. Ekspor skrip DDL dari Teradata dan konversi secara batch menggunakan sintaksis AnalyticDB for PostgreSQL.

  2. Proses Extract-Transform-Load (ETL): Konversi pernyataan ETL ke sintaksis Data Manipulation Language (DML) AnalyticDB for PostgreSQL menggunakan alat konversi berbasis skrip. Ganti fungsi Teradata dengan padanan AnalyticDB for PostgreSQL berdasarkan tabel pemetaan fungsi dalam dokumen ini. Atur ulang dan jalankan kembali pekerjaan ETL setelah migrasi data historis selesai.

  3. Koneksi API: AnalyticDB for PostgreSQL mendukung protokol JDBC dan ODBC, sehingga alat antarmuka depan Business Intelligence (BI) dapat terhubung dengan cara yang sama. Perbarui alamat IP instans untuk menyelesaikan migrasi API.

  4. Alat manajemen: Deploy alat backup dan recovery untuk instans AnalyticDB for PostgreSQL serta jadwalkan simulasi recovery secara berkala.

Pemetaan tipe data

Sebagian besar tipe data inti memiliki pemetaan langsung antara Teradata dan AnalyticDB for PostgreSQL. Alat konversi Data Definition Language (DDL) berbasis skrip menangani konversi batch secara otomatis.

TeradataAnalyticDB for PostgreSQLCatatan
CHARCHARPemetaan langsung
VARCHARVARCHARPemetaan langsung
LONG VARCHARVARCHAR(64000)Panjang maksimum tetap
VARBYTE(size)BYTEATipe data biner
BYTEINTBYTEATipe data biner
SMALLINTSMALLINTPemetaan langsung
INTEGERINTEGERPemetaan langsung
DECIMAL(size,dec)DECIMAL(size,dec)Pemetaan langsung
NUMERIC(precision,dec)NUMERIC(precision,dec)Pemetaan langsung
FLOATFLOATPemetaan langsung
REALREALPemetaan langsung
DOUBLE PRECISIONDOUBLE PRECISIONPemetaan langsung
DATEDATEPemetaan langsung
TIMETIMEPemetaan langsung
TIMESTAMPTIMESTAMPPemetaan langsung

Pernyataan pembuatan tabel

Contoh berikut menunjukkan bagaimana pernyataan DDL Teradata dipetakan ke AnalyticDB for PostgreSQL. Perbedaan utama dianotasi dalam pernyataan yang telah dikonversi.

Teradata:

CREATE MULTISET TABLE test_table,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      first_column DATE FORMAT 'YYYYMMDD' TITLE 'COLUMN 1' NOT NULL,
      second_column INTEGER TITLE 'COLUMN 2' NOT NULL ,
      third_column CHAR(6) CHARACTER SET LATIN CASESPECIFIC TITLE 'COLUMN 3' NOT NULL ,
      fourth_column CHAR(20) CHARACTER SET LATIN CASESPECIFIC TITLE 'COLUMN 4' NOT NULL,
      fifth_column CHAR(1) CHARACTER SET LATIN CASESPECIFIC TITLE 'COLUMN 5' NOT NULL,
      sixth_column CHAR(24) CHARACTER SET LATIN CASESPECIFIC TITLE 'COLUMN 6' NOT NULL,
      seventh_column VARCHAR(18) CHARACTER SET LATIN CASESPECIFIC TITLE 'COLUMN 7' NOT NULL,
      eighth_column DECIMAL(18,0) TITLE 'COLUMN 8' NOT NULL ,
      nineth_column DECIMAL(18,6) TITLE 'COLUMN 9' NOT NULL )
PRIMARY INDEX ( first_column ,fourth_column )
PARTITION BY RANGE_N(first_column  BETWEEN DATE '1999-01-01' AND DATE '2050-12-31' EACH INTERVAL '1' DAY );

CREATE INDEX test_index (first_column, fourth_column) ON test_table;

AnalyticDB for PostgreSQL:

-- MULTISET TABLE, NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL,
-- CHECKSUM, DEFAULT MERGEBLOCKRATIO: klausa khusus Teradata dihapus
-- FORMAT 'YYYYMMDD', TITLE, CHARACTER SET, CASESPECIFIC: atribut kolom dihapus
CREATE TABLE test_table
     (
      first_column DATE NOT NULL,           -- FORMAT 'YYYYMMDD' dihapus; gunakan SET client_encoding untuk pengkodean
      second_column INTEGER NOT NULL ,
      third_column CHAR(6) NOT NULL ,
      fourth_column CHAR(20) NOT NULL,
      fifth_column CHAR(1) NOT NULL,
      sixth_column CHAR(24) NOT NULL,
      seventh_column VARCHAR(18) NOT NULL,
      eighth_column DECIMAL(18,0) NOT NULL ,
      nineth_column DECIMAL(18,6) NOT NULL )
DISTRIBUTED BY ( first_column ,fourth_column )   -- PRIMARY INDEX -> DISTRIBUTED BY
PARTITION BY RANGE(first_column)                  -- sintaksis RANGE_N dikonversi ke RANGE standar
(START (DATE '1999-01-01')  INCLUSIVE
END (DATE '2050-12-31')  INCLUSIVE
EVERY (INTERVAL '1 DAY' ) );

create index test_index on test_table(first_column, fourth_column);  -- sintaksis indeks tidak berubah

Rangkuman perbedaan DDL

AreaTeradataAnalyticDB for PostgreSQL
Kunci distribusiPRIMARY INDEX (col1, col2)DISTRIBUTED BY (col1, col2)
PartisiPARTITION BY RANGE_N(...)PARTITION BY RANGE(...) dengan START/END/EVERY
Pembuatan indeksCREATE INDEX idx (cols) ON tableCREATE INDEX idx ON table(cols)
Judul kolomTITLE 'label'COMMENT ON COLUMN table.col IS 'label';
Pengkodean kolomCHARACTER SET LATIN CASESPECIFICSET client_encoding = latin1; (tingkat session)
Atribut tabelMULTISET, NO FALLBACK, CHECKSUM, dll.Tidak didukung; hapus klausa ini

Format impor dan ekspor data

Baik Teradata maupun AnalyticDB for PostgreSQL mendukung format file TXT dan CSV. Perbedaan utamanya terletak pada separator:

  • Teradata: Separator dua karakter

  • AnalyticDB for PostgreSQL: Separator satu karakter

Konversi separator dalam file data Anda sebelum memuat.

Perbedaan pernyataan SQL

AnalyticDB for PostgreSQL mendukung sebagian besar sintaksis SQL Teradata. Pernyataan berikut memerlukan konversi.

CAST

Pernyataan CAST Teradata mendukung spesifikasi format; AnalyticDB for PostgreSQL tidak.

PernyataanTeradataAnalyticDB for PostgreSQL
Konversi integerCAST(x AS INT FORMAT '999999')Tulis fungsi kustom sebagai pengganti
Tanggal TayangCAST(x AS DATE FORMAT 'YYYYMMDD')CAST(x AS DATE) — tidak perlu perubahan; format YYYY-MM-DD didukung secara native

QUALIFY

Kata kunci QUALIFY milik Teradata menyaring hasil fungsi jendela secara inline. AnalyticDB for PostgreSQL tidak mendukung QUALIFY; tulis ulang sebagai subkueri.

Teradata:

SELECT itemid, sumprice, RANK() OVER (ORDER BY sumprice DESC)
     FROM (SELECT a1.item_id, SUM(a1.sale)
           FROM sales AS a1
           GROUP BY a1.itemID) AS t1 (itemid, sumprice)
     QUALIFY RANK() OVER (ORDER BY sum_price DESC) <=100;

AnalyticDB for PostgreSQL:

-- Bungkus fungsi jendela dalam subkueri, lalu saring di klausa WHERE luar
SELECT itemid, sumprice, rank FROM
(SELECT itemid, sumprice, RANK() OVER (ORDER BY sumprice DESC) AS rank
     FROM (SELECT a1.item_id, SUM(a1.sale)
           FROM sales AS a1
           GROUP BY a1.itemID) AS t1 (itemid, sumprice)
)  AS a
WHERE rank <=100;

MACRO

Macro Teradata mengeksekusi sekelompok pernyataan SQL sebagai unit bernama. AnalyticDB for PostgreSQL tidak mendukung macro; gunakan FUNCTION sebagai gantinya.

Teradata:

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

AnalyticDB for PostgreSQL:

CREATE OR REPLACE FUNCTION Get_Emp_Salary(
        EmployeeNo INTEGER,
        OUT EmployeeNo INTEGER,
        OUT NetPay FLOAT
) RETURNS SETOF RECORD AS
$$
        SELECT EmployeeNo, NetPay
        FROM Salary
        WHERE EmployeeNo = $1
$$
 LANGUAGE SQL;

Pemetaan fungsi

Tabel berikut memetakan fungsi Teradata ke padanan AnalyticDB for PostgreSQL. Untuk fungsi yang tidak memiliki padanan langsung, tabel menyediakan ekspresi SQL yang dapat digunakan.

TeradataAnalyticDB for PostgreSQLDeskripsi
ZEROIFNULL(x)COALESCE(x, 0)Mengonversi NULL menjadi 0 untuk perhitungan kumulatif
NULLIFZERO(x)COALESCEMengganti nilai 0 dengan NULL untuk data kumulatif
INDEX(str, substr)POSITION(substr IN str)Mengembalikan posisi substring dalam string
ADD_MONTHS(date, n)TO_DATEMenambah atau mengurangi jumlah bulan tertentu ke/dari tanggal input
FORMATTO_CHAR / TO_DATEMemformat data sebagai string atau tanggal
CSUM(col, order_col)SubkueriMengembalikan jumlah kumulatif dari ekspresi nilai untuk setiap baris dalam partisi
MAVG(col, n, order_col)SubkueriMenghitung rata-rata bergerak dari kolom tertentu berdasarkan jumlah baris yang ditentukan (lebar kueri)
MSUM(col, n, order_col)SubkueriMenghitung jumlah bergerak dari kolom tertentu berdasarkan lebar kueri yang ditentukan
MDIFF(col, n, order_col)SubkueriMenghitung selisih bergerak dari kolom tertentu berdasarkan lebar kueri yang ditentukan
QUALIFYSubkueri dengan WHERE pada hasil fungsi jendelaMenyaring hasil fungsi jendela; lihat bagian QUALIFY di atas
CHAR(str) / CHARACTERS(str)LENGTH(str)Mengembalikan jumlah karakter dalam string