全部产品
Search
文档中心

AnalyticDB:Migrasi data dari database Teradata ke instance AnalyticDB for PostgreSQL

更新时间:Jun 26, 2025

Topik ini menjelaskan cara memigrasikan data dari database Teradata ke instance AnalyticDB for PostgreSQL.

Persyaratan migrasi

  • Lakukan migrasi menyeluruh untuk platform data dasar gudang data.
  • Lakukan migrasi yang mulus untuk aplikasi yang telah diterapkan pada sistem gudang data.
  • Lakukan migrasi tanpa gangguan terhadap pengguna bisnis untuk memastikan operasi tetap konsisten di kedua sistem.
  • Pastikan performa optimal dari gudang data setelah migrasi.
  • Tentukan durasi dan rencana migrasi yang efisien dan menguntungkan.
  • Manfaatkan sepenuhnya arsitektur sistem asli, proses Extract-Transform-Load (ETL), struktur data, serta alat manajemen.
  1. Untuk migrasi data historis, ekspor terlebih dahulu data ke file teks menggunakan pemisah yang ditentukan dan metode pengkodean karakter. Simpan file yang diekspor di disk lokal instance ECS atau bucket OSS, yang harus berada dalam jaringan yang sama dengan instance AnalyticDB for PostgreSQL. Hal ini memastikan bahwa instance AnalyticDB for PostgreSQL dapat membaca file dari tabel eksternal OSS melalui protokol gpfdist. Selanjutnya, ekspor skrip DDL dari database Teradata dan modifikasi skrip secara batch sesuai sintaksis AnalyticDB for PostgreSQL untuk membuat semua tabel pengguna di instance AnalyticDB for PostgreSQL.
  2. Untuk migrasi proses ETL rutin, konversikan pernyataan ETL berdasarkan sintaksis Data Manipulation Language (DML) AnalyticDB for PostgreSQL. AnalyticDB for PostgreSQL menyediakan alat berbasis skrip untuk pemetaan sintaksis secara otomatis. Ganti fungsi terkait berdasarkan pemetaan antara fungsi Teradata dan AnalyticDB for PostgreSQL untuk mentransformasi cara mengakses database melalui operasi ETL. Setelah migrasi data historis berhasil, konfigurasikan ulang dan jalankan operasi ETL rutin.
  3. Instance AnalyticDB for PostgreSQL mendukung protokol JDBC dan ODBC. Alat frontend Business Intelligence (BI) dapat mengakses gudang data melalui protokol tersebut. Untuk migrasi API, cukup modifikasi alamat IP instance.
  4. Untuk migrasi alat manajemen, terapkan alat cadangan dan pemulihan untuk instance AnalyticDB for PostgreSQL guna mencadangkan data dan melakukan latihan pemulihan secara berkala.

Tipe data inti dari AnalyticDB for PostgreSQL dan Teradata saling kompatibel satu sama lain. Hanya beberapa tipe data yang perlu dimodifikasi. Pernyataan DDL untuk pembuatan tabel dikonversi secara otomatis dalam batch menggunakan alat berbasis skrip di AnalyticDB for PostgreSQL. Tabel berikut mencantumkan tipe data di AnalyticDB for PostgreSQL dan Teradata.

TeradataADB PG
CHARCHAR
VARCHARVARCHAR
LONG VARCHARVARCHAR(64000)
VARBYTE(size)BYTEA
BYTEINTBYTEA
SMALLINTSMALLINT
INTEGERINTEGER
DECIMAL(size,dec)DECIMAL(size,dec)
NUMERIC(presisi,dec)NUMERIC(presisi,dec)
FLOATFLOAT
REALREAL
DOUBLE PRECISIONDOUBLE PRECISION
DATEDATE
TIMETIME
TIMESTAMPTIMESTAMP

Pernyataan pembuatan tabel

Bagian ini menggunakan contoh untuk menjelaskan perbedaan antara AnalyticDB for PostgreSQL dan Teradata.

Untuk membuat tabel di Teradata, jalankan pernyataan berikut:

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;

Untuk membuat tabel di AnalyticDB for PostgreSQL, jalankan pernyataan berikut:

CREATE TABLE test_table
     (
      first_column DATE NOT NULL,
      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 )
PARTITION BY RANGE(first_column) 
(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);

Berdasarkan contoh-contoh di atas, kesamaan dan perbedaan antara pernyataan pembuatan tabel di AnalyticDB for PostgreSQL dan Teradata adalah sebagai berikut:

  • Tipe data inti kompatibel satu sama lain dan tidak memerlukan modifikasi.
  • Kedua-duanya, AnalyticDB for PostgreSQL dan Teradata mendukung kolom distribusi, tetapi sintaksisnya berbeda. Klausul PRIMARY INDEX digunakan di Teradata, sedangkan DISTRIBUTED BY digunakan di AnalyticDB for PostgreSQL.
  • Kedua-duanya, AnalyticDB for PostgreSQL dan Teradata mendukung klausa PARTITION BY. Klausul tersebut memiliki semantik yang sama tetapi sintaksis yang berbeda di AnalyticDB for PostgreSQL dan Teradata.
  • Kedua-duanya, AnalyticDB for PostgreSQL dan Teradata memungkinkan Anda membuat indeks pada tabel, tetapi sintaksis yang digunakan berbeda.
  • AnalyticDB for PostgreSQL tidak mendukung kata kunci TITLE, tetapi memungkinkan Anda menambahkan komentar pada kolom tertentu dengan menjalankan pernyataan berikut: COMMENT ON COLUMN table_name.column_name IS 'XXX';.
  • AnalyticDB for PostgreSQL tidak dapat mendeklarasikan jenis pengkodean saat Anda mendefinisikan tipe data CHAR atau VARCHAR. Anda dapat menggunakan pernyataan SET client_encoding = latin1; untuk mendeklarasikan jenis pengkodean.

Format data impor dan ekspor

Baik AnalyticDB for PostgreSQL maupun Teradata memungkinkan Anda mengimpor atau mengekspor data dalam format TXT atau CSV. Perbedaan utama terletak pada pemisah yang digunakan dalam file data.
  • Teradata menggunakan pemisah dua karakter.
  • AnalyticDB for PostgreSQL menggunakan pemisah satu karakter.

Pernyataan SQL

AnalyticDB for PostgreSQL kompatibel dengan sintaksis sebagian besar pernyataan SQL di Teradata. Anda hanya perlu memodifikasi sintaksis berikut:

  • CAST

    Di Teradata:

    cast(XXX as int format '999999')
    cast(XXX as date format 'YYYYMMDD')

    Di AnalyticDB for PostgreSQL:

    cast(XXX as int)
    cast(XXX as date)

    AnalyticDB for PostgreSQL tidak mendeklarasikan format dalam pernyataan CAST.

    • Untuk pernyataan cast(XXX as int format '999999'), Anda harus menulis fungsi untuk penggantian.
    • Anda tidak perlu memodifikasi pernyataan cast(XXX as date format 'YYYYMMDD') karena AnalyticDB for PostgreSQL mendukung format 'YYYY-MM-DD' untuk tanggal.
  • QUALIFY

    Kata kunci QUALIFY di Teradata digunakan untuk menyaring lebih lanjut hasil fungsi pengurutan berdasarkan kondisi yang ditentukan pengguna.

    Contoh:

    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 tidak mendukung kata kunci QUALIFY. Anda harus mengubah pernyataan SQL dengan kata kunci ini menjadi subquery bersarang.

    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

    Teradata menggunakan MACRO untuk menjalankan sekelompok pernyataan SQL. Contoh:

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

    AnalyticDB for PostgreSQL tidak mendukung makro, tetapi Anda dapat menggunakan pernyataan FUNCTION untuk mengimplementasikan fungsi MACRO dari Teradata. Contoh:

    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

Pemetaan antara fungsi Teradata dan fungsi AnalyticDB for PostgreSQL
Fungsi TeradataFungsi AnalyticDB for PostgreSQL Deskripsi
ZEROIFNULLCOALESCEMenangani nilai null dengan mengubahnya menjadi nol untuk data kumulatif.
NULLIFZEROCOALESCEMengganti nilai 0 dengan NULL untuk data kumulatif.
INDEXPOSITIONMengembalikan posisi (bilangan bulat) substring dalam string.
ADD_MONTHSTO_DATEMenambahkan atau mengurangi jumlah bulan tertentu ke atau dari tanggal input.
FORMATTO_CHAR/TO_DATEMenentukan format data.
CSUMSubqueryMengembalikan jumlah kumulatif dari ekspresi nilai untuk setiap baris dalam partisi.
MAVGSubqueryMenghitung rata-rata bergerak dari kolom tertentu berdasarkan sejumlah baris yang ditentukan, juga dikenal sebagai lebar kueri.
MSUMSubqueryMenghitung jumlah bergerak dari kolom tertentu berdasarkan lebar kueri yang ditentukan.
MDIFFSubqueryMenghitung selisih bergerak dari kolom tertentu berdasarkan lebar kueri yang ditentukan.
QUALIFYSubqueryMenyaring hasil fungsi pengurutan berdasarkan kondisi yang ditentukan pengguna.
CHAR/CHARACTERSLENGTHMenentukan jumlah karakter.