全部产品
Search
文档中心

AnalyticDB:Gunakan tabel eksternal untuk analitik federasi sumber data Hadoop

更新时间:Jul 02, 2025

AnalyticDB for PostgreSQL memungkinkan Anda menanyakan sumber data Hadoop eksternal seperti Hadoop Distributed File System (HDFS) dan data Hive menggunakan tabel eksternal.

Catatan penggunaan

  • Fitur ini hanya tersedia untuk instance AnalyticDB for PostgreSQL dalam mode penyimpanan elastis. Instance yang digunakan untuk kueri harus berada di virtual private cloud (VPC) yang sama dengan sumber data eksternal.

  • Fitur ini tidak tersedia untuk instance AnalyticDB for PostgreSQL dalam mode penyimpanan elastis yang dibuat sebelum 6 September 2020 karena kendala arsitektur jaringan. Untuk menggunakan fitur ini pada instance yang ada, hubungi dukungan teknis Alibaba Cloud untuk pengajuan instance baru dan migrasi data.

Konfigurasikan server

Konfigurasi server dapat bervariasi sesuai kebutuhan pengguna. Untuk menanyakan sumber data Hadoop eksternal melalui analitik federasi, ajukan tiket untuk mendapatkan dukungan teknis dalam mengonfigurasi server. Tabel berikut menjelaskan informasi yang diperlukan saat mengajukan tiket.

Sumber data eksternal

Informasi yang diperlukan

Hadoop (HDFS, Hive, dan HBase)

core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml, dan hive-site.xml

Catatan

Profil seperti keytab dan krb5.conf juga diperlukan untuk otentikasi Kerberos.

Sintaksis

  • Buat Ekstensi

    CREATE extension pxf; 
  • Buat Tabel Eksternal

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

Untuk detail lebih lanjut tentang sintaksis pembuatan tabel eksternal, lihat bagian "CREATE EXTERNAL TABLE" dari topik sintaksis SQL.

Kueri data HDFS

Tabel berikut menjelaskan format data yang didukung.

Format data

Profil

text

hdfs:text

csv

hdfs:text:multi dan hdfs:text

Avro

hdfs:avro

JSON

hdfs:json

Parquet

hdfs:parquet

AvroSequenceFile

hdfs:AvroSequenceFile

SequenceFile

hdfs:SequenceFile

Untuk informasi tentang FORMAT dan formatting-properties, lihat bagian "Buat Tabel Eksternal" dari topik ini.

  • Contoh: Kueri File HDFS

    • Buat file data uji bernama pxf_hdfs_simple.txt 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.
      hdfs dfs -mkdir -p /data/pxf_examples
      # Masukkan file ke dalam direktori di HDFS.
      hdfs dfs -put /tmp/pxf_hdfs_simple.txt /data/pxf_examples/
      
      # Lihat file.
      hdfs dfs -cat /data/pxf_examples/pxf_hdfs_simple.txt

      Buat tabel eksternal dan lakukan kueri di instance AnalyticDB for PostgreSQL.

      postgres=# 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',');
      
      postgres=# select * from pxf_hdfs_textsimple;
       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)

      Berikut adalah penjelasan parameter dalam klausa LOCATION:

      • pxf://: Protokol PXF, tidak dapat diubah.

      • data/pxf_examples/pxf_hdfs_simple.txt: Lokasi file pxf_hdfs_simple.txt di HDFS.

      • PROFILE=hdfs:text: Profil untuk menanyakan data HDFS. Dalam contoh ini, hdfs:text digunakan.

      • SERVER=hdp3: Lokasi profil PXF untuk menanyakan data HDFS. Dalam contoh ini, profil berada di direktori PXF_SERVER/hdp3/. Nilai ini disediakan oleh dukungan teknis AnalyticDB for PostgreSQL.

      • FORMAT 'TEXT' (delimiter=E','): Format file dan opsi pemformatan sumber data eksternal. Dalam contoh ini, format file diatur ke TEXT, dan pembatas diatur ke koma (,).

      Untuk deskripsi parameter lebih lanjut, lihat bagian "Sintaksis" dari topik ini.

  • Contoh: Tulis Data ke HDFS dalam Format TEXT atau CSV

    • Prasyarat: Direktori /data/pxf_examples/pxfwritable_hdfs_textsimple1 telah dibuat di HDFS menggunakan perintah berikut:

      hdfs dfs -mkdir -p /data/pxf_examples/pxfwritable_hdfs_textsimple1
      Catatan

      Untuk mengeksekusi pernyataan INSERT pada AnalyticDB for PostgreSQL, pastikan Anda memiliki izin tulis pada direktori tersebut.

      1. Buat tabel eksternal yang dapat ditulis di instance AnalyticDB for PostgreSQL.

        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 );
      2. Lihat informasi di HDFS.

        # Lihat direktori.
        hdfs dfs -ls /data/pxf_examples/pxfwritable_hdfs_textsimple1
        
        # Lihat data di direktori.
        hdfs dfs -cat /data/pxf_examples/pxfwritable_hdfs_textsimple1/*
        Frankfurt,Mar,777,3956.98
        Cleveland,Oct,3812,96645.37

Kueri data Hive

Format data

Profil

TextFile

Hive, HiveText

SequenceFile

Hive

RCFile

Hive, HiveRC

ORC

Hive, HiveORC, HiveVectorizedORC

Parquet

Hive

Untuk informasi tentang FORMAT dan formatting-properties, lihat bagian "Buat Tabel Eksternal" dari topik ini.

  • Contoh: Gunakan Profil Hive

    1. Hasilkan data.

      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
    2. Buat tabel Hive.

      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;
      
      hive> LOAD DATA LOCAL INPATH '/tmp/pxf_hive_datafile.txt'
              INTO TABLE sales_info;
      hive> SELECT * FROM sales_info;
    3. Buat tabel eksternal dan lakukan kueri di instance AnalyticDB for PostgreSQL.

      postgres=# create extension pxf;
      
      postgres=# 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');
      
      postgres=# SELECT * FROM salesinfo_hiveprofile;
         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
      ......

      Berikut adalah penjelasan parameter dalam klausa LOCATION:

      • pxf://: Protokol PXF, tidak dapat diubah.

      • default.sales_info: Tabel sales_info yang disimpan di database default di Hive.

      • PROFILE=Hive: Profil untuk menanyakan data Hive. Dalam contoh ini, Hive digunakan.

      • SERVER=hdp3: Lokasi profil PXF untuk menanyakan data Hive. Dalam contoh ini, profil berada di direktori PXF_SERVER/hdp3/. Nilai ini disediakan oleh dukungan teknis AnalyticDB for PostgreSQL.

      • FORMAT 'custom' (formatter='pxfwritable_import'): Format file dan opsi pemformatan sumber data eksternal. Dalam contoh ini, format file diatur ke custom, dan formatter diatur ke pxfwritable_import.

      Untuk deskripsi parameter lebih lanjut, lihat bagian "Sintaksis" dari topik ini.

  • Contoh: Gunakan Profil HiveText

    postgres=# 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',');
    postgres=# select * from salesinfo_hivetextprofile;
       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.

      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;
      OK
      ## Impor data.
      hive> INSERT INTO TABLE sales_info_rcfile SELECT * FROM sales_info;
      ## Lihat data.
      hive> SELECT * FROM sales_info_rcfile;
    2. Buat tabel eksternal dan lakukan kueri di instance AnalyticDB for PostgreSQL.

      postgres=# 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',');
      postgres=# SELECT location, total_sales FROM salesinfo_hivercprofile;
         location    | total_sales
      ---------------+-------------
       Prague        |     4875.33
       Rome          |     1557.39
       Bangalore     |     8936.99
       ......
  • Contoh: Gunakan Profil HiveORC

    Profil yang mendukung ORC, HiveORC, dan HiveVectorizedORC menyediakan fitur berikut:

    • Membaca satu baris data pada satu waktu.

    • Dukungan proyeksi kolom.

    • Dukungan tipe kompleks dan memungkinkan Anda menanyakan tabel Hive yang terdiri dari array, map, struct, dan tipe data union.

    1. Buat tabel Hive.

      hive> CREATE TABLE sales_info_ORC (location string, month string,
              number_of_orders int, total_sales double)
            STORED AS ORC;
      hive> INSERT INTO TABLE sales_info_ORC SELECT * FROM sales_info;
      hive> SELECT * FROM sales_info_ORC;
    2. Buat tabel eksternal dan lakukan kueri di instance AnalyticDB for PostgreSQL.

      postgres=# 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');
                   
      postgres=# SELECT * FROM salesinfo_hiveORCprofile;
      ......
       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

    • Profil ini menyediakan fitur berikut: Membaca hingga 1.024 baris data pada satu waktu.

    • Tidak mendukung proyeksi kolom.

    • Tidak mendukung tipe kompleks atau tipe data timestamp.

    Buat tabel eksternal dan lakukan kueri di instance AnalyticDB for PostgreSQL.

    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;
       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: Kueri Tabel Hive dalam Format Parquet

    1. Buat tabel Hive.

      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 dan lakukan kueri di instance AnalyticDB for PostgreSQL.

      postgres=# 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');
      postgres=# SELECT month, number_of_orders FROM pxf_parquet_table;
       month | number_of_orders
      -------+------------------
       Jan   |              101
       Mar   |               87
       May   |              317
       Jul   |              411
       Sept  |              156
       Nov   |              159
       ......