AnalyticDB for PostgreSQLでは、外部テーブルを使用して、Hadoop分散ファイルシステム (HDFS) やHiveデータなどの外部Hadoopデータソースをクエリできます。
使用上の注意
この機能は、エラスティックストレージモードのAnalyticDB for PostgreSQLインスタンスでのみ使用できます。 クエリに使用するAnalyticDB for PostgreSQLインスタンスは、外部データソースと同じ仮想プライベートクラウド (VPC) にある必要があります。
この機能は、2020年9月6日より前に作成されたエラスティックストレージモードのAnalyticDB for PostgreSQLインスタンスでは使用できません。 これは、これらのインスタンスを異なるネットワークアーキテクチャを介して外部Hadoopデータソースに接続できないためです。 既存のインスタンスでこの機能を使用する場合は、Alibaba Cloudテクニカルサポートに連絡して新しいインスタンスを申請し、データを移行することを推奨します。
サーバーの構成
サーバーの構成は、ユーザーの要件によって異なります。 フェデレーション分析のために外部Hadoopデータソースを照会する場合は、チケットを起票して、サーバーを構成するためのテクニカルサポートを取得します。 次の表に、チケットを起票する際に必要な情報を示します。
外部データソース | 必須情報 |
Hadoop (HDFS、Hive、およびHBase) | core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、hive-site.xml 説明 keytabやkrb5.confなどのプロファイルもKerberos認証に必要です。 |
構文
拡張機能の作成
CREATE extension pxf;
外部テーブルの作成
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>);
外部テーブルの作成に使用される構文の詳細については、SQL構文トピックの「create external table」を参照してください。
HDFSデータの照会
サポートされているデータ形式を次の表に示します。
データ形式 | プロフィール |
text | hdfs: テキスト |
csv | hdfs:text: マルチとhdfs:text |
アヴロ | hdfs:avro |
JSON | hdfs:json |
Parquet | hdfs: 寄木細工 |
AvroSequenceFile | hdfs:AvroSequenceFile |
SequenceFile | hdfs:SequenceFile |
FORMAT
とformatting-properties
の詳細については、このトピックの「外部テーブルの作成」を参照してください。
例: HDFSファイルのクエリ
HDFSに
pxf_hdfs_simple.txt
という名前のテストデータファイルを作成します。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 # Create a directory. hdfs dfs -mkdir -p /data/pxf_examples # Put the file into the directory on HDFS. hdfs dfs -put /tmp/pxf_hdfs_simple.txt /data/pxf_examples/ # View the file. hdfs dfs -cat /data/pxf_examples/pxf_hdfs_simple.txt
外部テーブルを作成し、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)
LOCATION句のパラメーターを次に示します。
pxf://: pxfプロトコル。 変更できません。
data/pxf_examples/pxf_hdfs_simple.txt: HDFS上のpxf_hdfs_simple.txtファイル。
PROFILE=hdfs:text: HDFSデータのクエリに使用されるプロファイル。 この例では、hdfs:textが使用されています。
SERVER=hdp3: PXFに基づくHDFSデータのクエリに使用されるプロファイルの場所。 この例では、プロファイルはPXF_SERVER/hdp3/ ディレクトリにあります。 この値は、AnalyticDB for PostgreSQLのテクニカルサポートによって提供されます。
FORMAT 'TEXT' (delimiter=E','): 外部データソースのファイル形式と書式設定オプション。 この例では、ファイル形式は
TEXT
に設定され、区切り文字はコンマ (,
) に設定されています。
パラメーターの説明については、このトピックの「構文」を参照してください。
例: HDFSにTEXTまたはCSV形式でデータを書き込む
前提条件: /data/pxf_examples/pxfwritable_hdfs_textsimple1ディレクトリは、次のコマンドを使用してHDFS上に作成されます。
hdfs dfs -mkdir -p /data/pxf_examples/pxfwritable_hdfs_textsimple1
説明AnalyticDB for PostgreSQLでINSERTステートメントを実行するには、上記のディレクトリに対する書き込み権限が必要です。
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 );
HDFSに関する情報を表示します。
# View the directory. hdfs dfs -ls /data/pxf_examples/pxfwritable_hdfs_textsimple1 # View data in the directory. hdfs dfs -cat /data/pxf_examples/pxfwritable_hdfs_textsimple1/* Frankfurt,Mar,777,3956.98 Cleveland,Oct,3812,96645.37
Hiveデータの照会
データ形式 | プロフィール |
TextFile | Hive, HiveText |
SequenceFile | Hive |
RCFile | ハイブ、HiveRC |
ORC | Hive, HiveORC, HiveVectorizedORC |
Parquet | Hive |
FORMATとformatting-properties
の詳細については、このトピックの「外部テーブルの作成」を参照してください。
例: 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
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;
外部テーブルを作成し、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 ......
LOCATION句のパラメーターを次に示します。
pxf://: pxfプロトコル。 変更できません。
default.sales_info: Hiveのデフォルトデータベースに格納されているsales_infoテーブル。
PROFILE=Hive: Hiveデータのクエリに使用されるプロファイル。 この例では、Hiveが使用されています。
SERVER=hdp3: PXFに基づいてHiveデータを照会するために使用されるプロファイルの場所。 この例では、プロファイルはPXF_SERVER/hdp3/ ディレクトリにあります。 この値は、AnalyticDB for PostgreSQLのテクニカルサポートによって提供されます。
FORMAT 'custom' (formatter='pxfwritable_import'): 外部データソースのファイル形式と書式設定オプション。 この例では、ファイル形式はcustomに設定され、フォーマッタはpxfwritable_importに設定されています。
パラメーターの説明については、このトピックの「構文」を参照してください。
例: 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 ......
例: HiveRCプロファイルの使用
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 ## Import data. hive> INSERT INTO TABLE sales_info_rcfile SELECT * FROM sales_info; ## View data. hive> SELECT * FROM sales_info_rcfile;
外部テーブルを作成し、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 ......
例: HiveORCプロファイルの使用
ORCをサポートするプロファイルであるHiveORCおよびHiveVectorizedORCは、次の機能を提供します。
一度に1行のデータを読み取ります。
サポートコラムの投射。
複雑な型をサポートし、配列、マップ、構造体、および和集合のデータ型で構成されるHiveテーブルを照会できます。
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;
外部テーブルを作成し、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
例: HiveVectorizedORCプロファイルの使用
このプロファイルは、次の機能を提供します。一度に最大1,024行のデータを読み取ります。
コラムの投射を支えません。
複合型またはtimestampデータ型をサポートしていません。
外部テーブルを作成し、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 ......
例: Parquet形式のHiveテーブルの照会
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;
外部テーブルを作成し、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 ......