すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:Hadoopデータソースのフェデレーション分析に外部テーブルを使用する

最終更新日:Sep 27, 2024

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

FORMATformatting-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ステートメントを実行するには、上記のディレクトリに対する書き込み権限が必要です。

      1. 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. 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プロファイルの使用

    1. データを生成します。

      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. 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. 外部テーブルを作成し、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プロファイルの使用

    1. 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;
    2. 外部テーブルを作成し、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テーブルを照会できます。

    1. 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. 外部テーブルを作成し、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テーブルの照会

    1. 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. 外部テーブルを作成し、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
       ......