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.txtdi 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.txtBuat 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_textsimple1CatatanUntuk mengeksekusi pernyataan INSERT pada AnalyticDB for PostgreSQL, pastikan Anda memiliki izin tulis pada direktori tersebut.
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 );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
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.txtBuat 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;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
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;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.
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;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
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;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 ......