All Products
Search
Document Center

AnalyticDB:Gunakan tabel eksternal untuk analitik federasi sumber data Hadoop

Last Updated:Mar 29, 2026

AnalyticDB for PostgreSQL memungkinkan Anda menjalankan kueri terhadap data Hadoop—termasuk file Hadoop Distributed File System (HDFS) dan tabel Hive—langsung dari SQL menggunakan tabel eksternal yang didukung protokol PXF, sehingga memungkinkan analitik federasi terhadap kluster Hadoop yang sudah ada tanpa perlu memindahkan data.

Batasan

KendalaDetail
Mode instansHanya mode elastic storage
JaringanInstans AnalyticDB for PostgreSQL dan kluster Hadoop harus berada dalam virtual private cloud (VPC) yang sama
Usia instansInstans mode elastic storage yang dibuat sebelum 6 September 2020 tidak dapat terhubung ke kluster Hadoop eksternal karena arsitektur jaringan yang tidak kompatibel. Hubungi dukungan teknis Alibaba Cloud untuk menyediakan instans baru dan migrasikan data Anda.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • Instans AnalyticDB for PostgreSQL dalam mode elastic storage yang dibuat pada atau setelah 6 September 2020

  • Kluster Hadoop yang sedang berjalan dalam VPC yang sama dengan instans tersebut

  • Server PXF yang dikonfigurasi oleh dukungan teknis Alibaba Cloud

Konfigurasi server

Konfigurasi server memerlukan bantuan dari dukungan teknis Alibaba Cloud. Kirim tiket dan lampirkan file konfigurasi berikut.

Sumber data eksternalFile yang diperlukan
Hadoop (HDFS, Hive, dan HBase)core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml, hive-site.xml
Untuk kluster dengan otentikasi Kerberos, sertakan juga keytab dan krb5.conf.

Dukungan teknis akan mengembalikan nilai SERVER (misalnya, hdp3) yang mengidentifikasi direktori konfigurasi server PXF (PXF_SERVER/hdp3/). Gunakan nilai ini dalam semua klausa LOCATION.

Sintaksis

Aktifkan ekstensi PXF satu kali per database:

CREATE EXTENSION pxf;

Buat tabel eksternal:

CREATE EXTERNAL TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION('pxf://<path-to-data>?PROFILE=<profile>[&<custom-option>=<value>[...]][&SERVER=<server_name>]')
FORMAT '[TEXT|CSV|CUSTOM]' (<formatting-properties>);

Untuk sintaksis lengkap CREATE EXTERNAL TABLE, lihat Sintaksis SQL.

Parameter klausa LOCATION

ParameterDeskripsi
pxf://Awalan protokol PXF. Jangan ubah.
<path-to-data>Untuk HDFS: jalur mutlak ke file atau direktori. Untuk Hive: <database>.<table> (misalnya, default.sales_info).
PROFILE=<profile>Profil PXF yang sesuai dengan sumber data dan format Anda. Lihat Profil HDFS yang didukung dan Profil Hive yang didukung.
SERVER=<server_name>Identifier konfigurasi server PXF. Disediakan oleh dukungan teknis Alibaba Cloud.

Kueri data HDFS

Profil HDFS yang didukung

FormatProfil
Texthdfs:text
CSVhdfs:text:multi, hdfs:text
Avrohdfs:avro
JSONhdfs:json
Parquethdfs:parquet
AvroSequenceFilehdfs:AvroSequenceFile
SequenceFilehdfs:SequenceFile

Contoh: Baca file teks HDFS

  1. Buat file uji di HDFS.

    echo 'Prague,Jan,101,4875.33
    Rome,Mar,87,1557.39
    Bangalore,May,317,8936.99
    Beijing,Jul,411,11600.67' > /tmp/pxf_hdfs_simple.txt
    
    # Buat direktori target
    hdfs dfs -mkdir -p /data/pxf_examples
    
    # Unggah file
    hdfs dfs -put /tmp/pxf_hdfs_simple.txt /data/pxf_examples/
    
    # Verifikasi unggahan
    hdfs dfs -cat /data/pxf_examples/pxf_hdfs_simple.txt
  2. Di AnalyticDB for PostgreSQL, buat tabel eksternal yang mengarah ke file tersebut.

    CREATE EXTERNAL TABLE pxf_hdfs_textsimple (
        location    text,
        month       text,
        num_orders  int,
        total_sales float8
    )
    LOCATION ('pxf://data/pxf_examples/pxf_hdfs_simple.txt?PROFILE=hdfs:text&SERVER=hdp3')
    FORMAT 'TEXT' (delimiter=E',');
  3. Jalankan kueri terhadap tabel tersebut.

    SELECT * FROM pxf_hdfs_textsimple;

    Output yang diharapkan:

     location  | month | num_orders |    total_sales
    -----------+-------+------------+--------------------
     Prague    | Jan   |        101 | 4875.3299999999999
     Rome      | Mar   |         87 | 1557.3900000000001
     Bangalore | May   |        317 | 8936.9899999999998
     Beijing   | Jul   |        411 |           11600.67
    (4 rows)

Contoh: Tulis data ke HDFS

Untuk menulis data dari AnalyticDB for PostgreSQL ke HDFS, buat tabel eksternal yang dapat ditulis.

  1. Buat direktori target di HDFS.

    Anda harus memiliki izin menulis pada direktori ini untuk menjalankan pernyataan INSERT dari AnalyticDB for PostgreSQL.
    hdfs dfs -mkdir -p /data/pxf_examples/pxfwritable_hdfs_textsimple1
  2. Buat tabel eksternal yang dapat ditulis dan masukkan data.

    CREATE WRITABLE EXTERNAL TABLE pxf_hdfs_writabletbl_1 (
        location    text,
        month       text,
        num_orders  int,
        total_sales float8
    )
    LOCATION ('pxf://data/pxf_examples/pxfwritable_hdfs_textsimple1?PROFILE=hdfs:text&SERVER=hdp3')
    FORMAT 'TEXT' (delimiter=',');
    
    INSERT INTO pxf_hdfs_writabletbl_1 VALUES ('Frankfurt', 'Mar', 777, 3956.98);
    INSERT INTO pxf_hdfs_writabletbl_1 VALUES ('Cleveland', 'Oct', 3812, 96645.37);
  3. Verifikasi bahwa data telah ditulis ke HDFS.

    # Daftar file dalam direktori
    hdfs dfs -ls /data/pxf_examples/pxfwritable_hdfs_textsimple1
    
    # Cetak isi file
    hdfs dfs -cat /data/pxf_examples/pxfwritable_hdfs_textsimple1/*

    Output yang diharapkan:

    Frankfurt,Mar,777,3956.98
    Cleveland,Oct,3812,96645.37

Kueri data Hive

Profil Hive yang didukung

FormatProfil yang didukung
TextFileHive, HiveText
SequenceFileHive
RCFileHive, HiveRC
ORCHive, HiveORC, HiveVectorizedORC
ParquetHive

Profil Hive mendukung semua format penyimpanan yang tercantum di atas. Gunakan sub-profil spesifik (HiveText, HiveRC, HiveORC, HiveVectorizedORC) sesuai kebutuhan fungsionalitas tertentu.

Pilih antara HiveORC dan HiveVectorizedORC

Kedua profil membaca tabel Hive berformat ORC. Pilih berdasarkan kebutuhan kueri Anda:

KemampuanHiveORCHiveVectorizedORC
Baris yang dibaca per batch1Hingga 1.024
Proyeksi kolomYaTidak
Tipe kompleks (array, map, struct, union)YaTidak
timestamp tipe dataYaTidak

Contoh: Gunakan profil Hive

Profil Hive kompatibel dengan semua format penyimpanan Hive.

  1. Hasilkan data sampel dan muat ke Hive.

    echo 'Prague,Jan,101,4875.33
    Rome,Mar,87,1557.39
    Bangalore,May,317,8936.99
    Beijing,Jul,411,11600.67
    San Francisco,Sept,156,6846.34
    Paris,Nov,159,7134.56
    San Francisco,Jan,113,5397.89
    Prague,Dec,333,9894.77
    Bangalore,Jul,271,8320.55
    Beijing,Dec,100,4248.41' > /tmp/pxf_hive_datafile.txt
    -- Di Hive
    CREATE TABLE sales_info (
        location         string,
        month            string,
        number_of_orders int,
        total_sales      double
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    STORED AS textfile;
    
    LOAD DATA LOCAL INPATH '/tmp/pxf_hive_datafile.txt' INTO TABLE sales_info;
    SELECT * FROM sales_info;
  2. Di AnalyticDB for PostgreSQL, aktifkan ekstensi PXF dan buat tabel eksternal.

    CREATE EXTENSION pxf;
    
    CREATE EXTERNAL TABLE salesinfo_hiveprofile (
        location    text,
        month       text,
        num_orders  int,
        total_sales float8
    )
    LOCATION ('pxf://default.sales_info?PROFILE=Hive&SERVER=hdp3')
    FORMAT 'custom' (formatter='pxfwritable_import');
  3. Jalankan kueri terhadap tabel tersebut.

    SELECT * FROM salesinfo_hiveprofile;

    Output yang diharapkan:

       location    | month | num_orders | total_sales
    ---------------+-------+------------+-------------
     Prague        | Jan   |        101 |     4875.33
     Rome          | Mar   |         87 |     1557.39
     Bangalore     | May   |        317 |     8936.99
     Beijing       | Jul   |        411 |    11600.67
     San Francisco | Sept  |        156 |     6846.34
     Paris         | Nov   |        159 |     7134.56
    ......

Contoh: Gunakan profil HiveText

HiveText membaca tabel Hive berformat TextFile dan menggunakan delimiter teks alih-alih formatter pxfwritable_import.

CREATE EXTERNAL TABLE salesinfo_hivetextprofile (
    location    text,
    month       text,
    num_orders  int,
    total_sales float8
)
LOCATION ('pxf://default.sales_info?PROFILE=HiveText&SERVER=hdp3')
FORMAT 'TEXT' (delimiter=E',');

SELECT * FROM salesinfo_hivetextprofile;

Output yang diharapkan:

   location    | month | num_orders | total_sales
---------------+-------+------------+-------------
 Prague        | Jan   |        101 |     4875.33
 Rome          | Mar   |         87 |     1557.39
 Bangalore     | May   |        317 |     8936.99
 ......

Contoh: Gunakan profil HiveRC

  1. Buat tabel Hive berformat RCFile.

    -- Di Hive
    CREATE TABLE sales_info_rcfile (
        location         string,
        month            string,
        number_of_orders int,
        total_sales      double
    )
    ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
    STORED AS rcfile;
    
    -- Impor data dari tabel yang sudah ada
    INSERT INTO TABLE sales_info_rcfile SELECT * FROM sales_info;
    
    -- Verifikasi data
    SELECT * FROM sales_info_rcfile;
  2. Buat tabel eksternal di AnalyticDB for PostgreSQL dan jalankan kueri terhadapnya.

    CREATE EXTERNAL TABLE salesinfo_hivercprofile (
        location    text,
        month       text,
        num_orders  int,
        total_sales float8
    )
    LOCATION ('pxf://default.sales_info_rcfile?PROFILE=HiveRC&SERVER=hdp3')
    FORMAT 'TEXT' (delimiter=E',');
    
    SELECT location, total_sales FROM salesinfo_hivercprofile;

    Output yang diharapkan:

       location    | total_sales
    ---------------+-------------
     Prague        |     4875.33
     Rome          |     1557.39
     Bangalore     |     8936.99
     ......

Contoh: Gunakan profil HiveORC

Gunakan HiveORC ketika Anda memerlukan proyeksi kolom atau perlu menjalankan kueri terhadap tabel yang memiliki tipe kompleks (array, map, struct, union).

  1. Buat tabel Hive berformat ORC.

    -- Di Hive
    CREATE TABLE sales_info_ORC (
        location         string,
        month            string,
        number_of_orders int,
        total_sales      double
    )
    STORED AS ORC;
    
    INSERT INTO TABLE sales_info_ORC SELECT * FROM sales_info;
    
    -- Verifikasi data
    SELECT * FROM sales_info_ORC;
  2. Buat tabel eksternal di AnalyticDB for PostgreSQL dan jalankan kueri terhadapnya.

    CREATE EXTERNAL TABLE salesinfo_hiveORCprofile (
        location    text,
        month       text,
        num_orders  int,
        total_sales float8
    )
    LOCATION ('pxf://default.sales_info_ORC?PROFILE=HiveORC&SERVER=hdp3')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
    
    SELECT * FROM salesinfo_hiveORCprofile;

    Output yang diharapkan:

     ......
     Prague        | Dec   |        333 |     9894.77
     Bangalore     | Jul   |        271 |     8320.55
     Beijing       | Dec   |        100 |     4248.41
    (60 rows)
    Time: 420.920 ms

Contoh: Gunakan profil HiveVectorizedORC

Gunakan HiveVectorizedORC untuk kueri sederhana pada tabel ORC besar yang tidak memerlukan proyeksi kolom, dukungan tipe kompleks, atau tipe data timestamp.

CREATE EXTERNAL TABLE salesinfo_hiveVectORC (
    location    text,
    month       text,
    num_orders  int,
    total_sales float8
)
LOCATION ('pxf://default.sales_info_ORC?PROFILE=HiveVectorizedORC&SERVER=hdp3')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');

SELECT * FROM salesinfo_hiveVectORC;

Output yang diharapkan:

   location    | month | num_orders | total_sales
---------------+-------+------------+-------------
 Prague        | Jan   |        101 |     4875.33
 Rome          | Mar   |         87 |     1557.39
 Bangalore     | May   |        317 |     8936.99
 Beijing       | Jul   |        411 |    11600.67
 San Francisco | Sept  |        156 |     6846.34
 ......

Contoh: Jalankan kueri terhadap tabel Hive berformat Parquet

  1. Buat tabel Hive berformat Parquet.

    -- Di Hive
    CREATE TABLE hive_parquet_table (
        location         string,
        month            string,
        number_of_orders int,
        total_sales      double
    )
    STORED AS parquet;
    
    INSERT INTO TABLE hive_parquet_table SELECT * FROM sales_info;
    
    SELECT * FROM hive_parquet_table;
  2. Buat tabel eksternal di AnalyticDB for PostgreSQL dan jalankan kueri terhadapnya.

    CREATE EXTERNAL TABLE pxf_parquet_table (
        location         text,
        month            text,
        number_of_orders int,
        total_sales      double precision
    )
    LOCATION ('pxf://default.hive_parquet_table?profile=Hive&SERVER=hdp3')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
    
    SELECT month, number_of_orders FROM pxf_parquet_table;

    Output yang diharapkan:

     month | number_of_orders
    -------+------------------
     Jan   |              101
     Mar   |               87
     May   |              317
     Jul   |              411
     Sept  |              156
     Nov   |              159
     ......