日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

異構數據源訪問

更新時間:

若您需要通過AnalyticDB PostgreSQL版訪問外部異構數據源(HDFS、Hive和JDBC)時,可以使用異構數據源訪問功能將外部數據轉換為AnalyticDB PostgreSQL版數據庫優化后的格式進行查詢和分析。

功能說明

外部數據源管理提供高性能的結構化和非結構化數據并行傳輸服務。其中,異構數據源訪問支持通過AnalyticDB PostgreSQL版數據庫以統一的SQL接口查詢和分析存儲在外部系統中的數據。提供以下功能:

  • 多種數據存儲訪問:支持多種數據存儲系統,允許AnalyticDB PostgreSQL版數據庫直接訪問存儲在HDFS、Hive、MySQL,PostgreSQL,PolarDB MySQL等多種外部系統中的數據。

  • 數據格式透明:支持常見的數據格式,如CSV、ORC、Parquet、JSON、Avro等。

  • 高效數據處理:可利用AnalyticDB PostgreSQL版數據庫的并行處理能力,實現高效的數據讀寫操作。

  • 簡化數據集成:可通過編寫SQL語句來訪問外部數據源,不必擔心不同數據源的連接細節。

版本限制

  • AnalyticDB PostgreSQL 6.0版實例需為v6.6.0.0及以上版本。

  • AnalyticDB PostgreSQL 7.0版實例需為v7.0.2.3及以上版本。

  • AnalyticDB PostgreSQL版Serverless模式實例需為v2.1.1.3及以上版本。

使用流程

  1. 步驟一:開啟外部數據服務。

  2. 步驟二:配置數據源。

  3. 步驟三:讀寫外表。

步驟一:開啟外部數據服務

  1. 登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺。
  2. 在控制臺左上角,選擇實例所在地域。
  3. 找到目標實例,單擊實例ID。
  4. 在左側導航欄,單擊外部數據源管理。

  5. 異構數據源訪問頁簽,單擊開啟外部數據服務

  6. 在彈窗中配置以下參數,并單擊確定。

    參數

    說明

    名稱

    外部數據服務名稱,支持任意字符。

    服務描述

    描述服務信息。

步驟二:配置數據源

異構數據源訪問支持配置HDFS、Hive和JDBC數據源。

配置HDFS數據源

前提條件

  • 自建Hadoop集群或具有Hadoop-Common、HDFS和YARN服務的E-MapReduce集群需與AnalyticDB PostgreSQL版實例在同一VPC。

  • 已將AnalyticDB PostgreSQL版實例的專有網絡交換機IP添加至Hadoop集群所在的安全組。為確保AnalyticDB PostgreSQL版與Hadoop間的網絡端口暢通,需將以下異構數據源訪問功能會用到的Hadoop服務默認的端口全部加入安全組。具體操作,請參見添加安全組規則。

    服務

    端口號

    Namenode IPC

    • Hadoop2.x版本:8020

    • Hadoop3.x版本:9820

    • E-MapReduce集群:9000

    具體端口號請參見配置文件hdfs-site.xml -> dfs.namenode.rpc-address中的端口號。

    DataNode IPC

    • Hadoop2.x版本:50020

    • Hadoop3.x版本:9867

    具體端口號請參見配置文件hdfs-site.xml -> dfs.datanode.ipc.address中的端口號。

    DataNode

    • Hadoop2.x版本:50010

    • Hadoop3.x版本:9866

    具體端口號請參見配置文件hdfs-site.xml -> dfs.datanode.address中的端口號。

    Hive metastore

    9083

    具體端口號請參見配置文件hive-site.xml -> hive.metastore.uris中的端口號。

    Hive HiveServer

    10000

    具體端口號請參見配置文件hive-site.xml -> hive.server2.thrift.port中的端口號。

    Zookeeper

    2181

    具體端口號請參見配置文件zoo.cfg ->

    clientPort=xxxx中的端口號。

    Kerberos Server

    88(傳輸加密和認證) 和749(kadmin)

    具體端口號請參見配置文kdc.conf ->

    kdc_ports和kdc.conf -> kadmind_port中的端口號。

    JDBC(MySQL或PostgreSQL)

    3306、1521、5432等

    ICMP協議

    用于網絡連通性校驗,在安全組規則的入方向與出方向放行ICMP協議。

    說明

    AnalyticDB PostgreSQL版實例的專有網絡交換機IP可在外部數據源管理頁面獲取。

準備測試數據集

準備測試數據集,并執行hadoop fs -put <本地文件名稱> <文件保存在Hadoop集群的路徑>命令將數據集保存在Hadoop集群路徑。

例如,將本地文件/home/user/file.txt上傳到HDFS的/tmp目錄下,執行hadoop fs -put /home/user/file.txt /tmp/file.tx即可。測試數據集內容如下:

1,test1,1,100
2,test2,2,90

操作步驟

  1. 異構數據源訪問頁簽,單擊新增數據源的下拉菜單,選擇Hadoop數據源。

  2. 新增Hadoop數據源頁面頁面依次配置網絡&安全組配置文件、初始化。

    1. 配置網絡&安全組。

      參數

      說明

      數據源名稱

      • 可包含英文大小寫字母、數字、中劃線(-)、下劃線(_)。

      • 以數字或者英文字母開始和結尾。

      • 長度不超過50字符。

      數據源描述

      數據源描述。

      數據源類型

      • 當目標數據源為E-MapReduce集群,選擇阿里云E-MapReduce。

      • 當目標數據源為自建Hadoop集群,選擇自建Hadoop

      數據庫類型

      選擇HDFS

      數據來源

      E-MapReduce集群ID。

      說明

      自建Hadoop集群無此參數。

      網絡校驗

      單擊網絡校驗,提示網絡連通。

    2. 單擊下一步,填寫配置文件。

      參數

      說明

      獲取方式

      參數配置

      • 若目標數據源為E-MapReduce集群,支持自動配置獲取

      • 若目標數據源為自建Hadoop集群需要自行粘貼配置文件信息。

      hdfs-site.xml

      HDFS配置項,如副本因子和塊大小等。

      自建Hadoop集群xml文件一般位于以下兩個位置之一:

      • conf目錄:在早期版本的Hadoop中,這些配置文件通常放在Hadoop安裝目錄下的conf子目錄中。

      • etc/hadoop目錄:在較新版本的Hadoop中,配置文件通常放在 etc/hadoop目錄下。這個目錄位于 Hadoop的主安裝目錄下。

      core-site.xml

      Hadoop核心配置項,如I/O設置和文件系統的配置等。

      yarn-site.xml

      YARN配置項,負責集群資源管理和作業調度等。

      mapred-site.xml

      用于配置MapReduce作業的參數,如作業執行器和任務優化參數等。

      /etc/host文件

      解析Hadoop集群中每個節點的主機名到IP。

      有以下兩種獲取方式:

      • 方式一:依次登錄Hadoop集群的每臺機器,獲取/etc/hosts文件中的本節點IP和主機名的映射關系并填寫。

      • 方式二:登錄Hadoop namenode所在的機器,運行#!/bin/bash腳本,填寫返回結果。返回結果如下:

        echo $(hostname -i) $(hostname -f)
        hdfs dfsadmin -report | awk -F':' '/^Name:/ {printf $2} /^Hostname:/ {print $2}'
    3. 單擊保存,并單擊左下角完成。

      等待3~5分鐘,數據源狀態為運行中時,HDFS數據源可用。

  3. 單擊目標數據源操作列的校驗。

  4. 服務配置校驗窗口中,填寫數據集所在Hadoop集群路徑(例如:/tmp/file.txt),并單擊校驗。

    提示配置校驗成功后,您可以繼續操作讀寫HDFS外表。

配置Hive數據源

前提條件

  • 自建Hive集群或具有Hadoop-Common、HDFS、Hive和YARN服務的E-MapReduce集群需與AnalyticDB PostgreSQL版實例在同一VPC。

  • 已將AnalyticDB PostgreSQL版實例的專有網絡交換機IP添加至Hive集群所在的安全組。具體操作,請參見添加安全組規則

    說明

    AnalyticDB PostgreSQL版實例的專有網絡交換機IP可在外部數據源管理頁面獲取。

準備測試數據集

準備測試數據集,并執行hadoop fs -put <本地文件名稱> <文件保存在Hadoop集群的路徑>命令將數據集保存在Hadoop集群路徑。

例如,將本地文件/home/user/file.txt上傳到Hive的/tmp目錄下,執行hadoop fs -put /home/user/file.txt /tmp/file.tx即可。測試數據集內容如下:

1,test1,1,100
2,test2,2,90

操作步驟

  1. 異構數據源訪問頁簽,單擊新增數據源的下拉菜單,選擇Hadoop數據源。

  2. 新增Hadoop數據源頁面頁面依次配置網絡&安全組、配置文件初始化。

    1. 配置網絡&安全組。

      參數

      說明

      數據源名稱

      • 可包含英文大小寫字母、數字、中劃線(-)、下劃線(_)。

      • 以數字或者英文字母開始和結尾。

      • 長度不超過50字符。

      數據源描述

      數據源描述。

      數據源類型

      • 當目標數據源為E-MapReduce集群,選擇阿里云E-MapReduce。

      • 當目標數據源為自建Hive集群,選擇自建Hadoop

      數據庫類型

      選擇Hive。

      實例名稱

      E-MapReduce集群ID。

      說明

      自建Hive集群無此參數。

      網絡校驗

      單擊網絡校驗,提示網絡連通。

    2. 單擊下一步,填寫配置文件

      參數

      說明

      獲取方式

      參數配置

      • 若目標數據源為E-MapReduce集群,支持自動配置獲取

      • 若目標數據源為自建Hive集群需要自行粘貼配置文件信息。

      hdfs-site.xml

      HDFS配置項,如副本因子和塊大小。

      自建Hive集群xml文件一般位于以下兩個位置之一:

      • conf目錄:在標準安裝中,這些配置文件通常放在Hive安裝目錄下的conf子目錄中。

      • etc/hadoop目錄:在集成了Hadoop和Hive的安裝中,也可能放在Hadoop的配置目錄中,以確保Hive能夠正確地與Hadoop集群進行交互。

      core-site.xml

      Hadoop核心配置項,如I/O設置和文件系統的配置等。

      yarn-site.xml

      YARN配置項,負責集群資源管理和作業調度等。

      mapred-site.xml

      用于配置MapReduce作業的參數,如作業執行器和任務優化參數等。

      hive-site.xml

      Hive配置項,如元數據存儲的連接信息、Hive運行時的內存和性能設置等。

      /etc/host文件

      解析Hive集群中每個節點的主機名到IP。

      有以下兩種獲取方式:

      • 方式一:依次登錄Hive集群的每臺機器,獲取/etc/hosts文件中的本節點IP和主機名的映射關系并填寫。

      • 方式二:登錄Hive namenode所在的機器,運行#!/bin/bash腳本,填寫返回結果。返回結果如下:

        echo $(hostname -i) $(hostname -f)
        hive dfsadmin -report | awk -F':' '/^Name:/ {printf $2} /^Hostname:/ {print $2}'
    3. 單擊保存,并單擊左下角完成。

      等待3~5分鐘,數據源狀態為運行中時,Hive數據源可用。

  3. 單擊目標數據源操作列的校驗。

  4. 服務配置校驗窗口中,填寫數據集所在Hadoop集群路徑(例如:/tmp/file.txt),并單擊校驗

    提示配置校驗成功后,您可以繼續操作讀寫Hive外表。

配置JDBC數據源

JDBC數據源指兼容MySQL和PostgreSQL的數據源,如RDS MySQL、RDS PostgreSQL、PolarDB MySQL、PolarDB PostgreSQL等。

本文以配置RDS MySQL數據源為例。

前提條件

  • 數據源所在實例(RDS MySQL實例)需與AnalyticDB PostgreSQL版實例在同一VPC。

  • 已在RDS MySQL實例中創建數據庫和賬號。具體操作,請參見創建數據庫和賬號。

  • 已將AnalyticDB PostgreSQL版實例的專有網絡交換機IP添加至RDS MySQL實例的白名單中。具體操作,請參見設置IP白名單。

    說明

    AnalyticDB PostgreSQL版實例的專有網絡交換機IP可在外部數據源管理頁面獲取。

操作步驟

  1. 異構數據源訪問頁簽,單擊新增數據源的下拉菜單,選擇JDBC數據源。

  2. 新增JDBC數據源頁面頁面配置如下參數。

    參數

    說明

    數據源名稱

    • 可包含英文大小寫字母、數字、中劃線(-)、下劃線(_)。

    • 以數字或者英文字母開始和結尾。

    • 長度不超過50字符。

    數據庫類型

    選擇MySQL

    數據源描述

    數據源描述。

    JDBC連接串

    連接RDS MySQL實例的JDBC連接串,格式如下:

    jdbc:mysql://<servername>:<port>/<dbName>
    • <servername>:<port>:RDS MySQL實例的連接地址和對應的端口。

      • 若通過內網連接,需輸入RDS MySQL實例的內網地址和內網端口。

      • 若使用外網連接,需輸入RDS MySQL實例的外網地址和外網端口。

      您可以在RDS MySQL實例的數據庫連接頁面查看。

      更多信息,請參見查看或修改連接地址和端口

    • <dbName>:RDS MySQL實例的數據庫。

    用戶名

    RDS MySQL實例的賬號。

    登錄密碼

    賬號對應的密碼。

  3. 單擊測試連接,提示網絡連通后,單擊左下角確定。

    如果網絡不通,請檢查JDBC連接串地址填寫是否正確。

    等待3~5分鐘,數據源狀態為運行中時,JDBC數據源可用。您可以繼續操作讀寫JDBC外表。

步驟三:讀寫外表

根據您配置的數據源類型,選擇不同外表語法讀寫數據。

HDFS外表

讀寫文本數據

語法

CREATE [WRITABLE | READABLE] EXTERNAL TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<path-to-hdfs-dir>
    ?PROFILE=hdfs:text[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
FORMAT '[TEXT|CSV]' (delimiter[=|<space>][E]'<delim_value>');
[DISTRIBUTED BY (<column_name> [, ... ] ) | DISTRIBUTED RANDOMLY];

參數

參數

說明

[WRITABLE | READABLE]

  • 創建可寫外表時,必須定義WRITABLE關鍵字。

  • 創建可讀外表時,可定義READABLE關鍵字或省略。

READABLE

可讀外表,可選。

path-to-hdfs-dir

HDFS數據存儲目錄的絕對路徑。

PROFILE

指定HDFS外表數據格式,文本數據必須指定為hdfs:text。

HDFS外表支持的數據格式,請參見附錄1:HDFS外表數據格式。

SERVER

外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在外部數據源管理 > 異構數據源訪問頁面查看數據源名稱。

如未指定,異構數據源訪問將使用Default服務器。

FORMAT

定義文本格式。

  • path-to-hdfs-file引用純文本分隔數據時,使用FORMAT 'TEXT'

  • path-to-hdfs-file引用逗號分隔數據時,使用FORMAT 'CSV'。

delimiter

數據分隔符。

  • 對于FORMAT 'CSV',默認的delim_value為英文逗號(,)。

  • 對于FORMAT 'TEXT',默認的delim_value為豎線(|)。

  • 當分隔符為轉義序列時,在delim_value前加上E,例如(delimiter=E'\t'), (delimiter ':')。

DISTRIBUTED BY

分布策略。

如果您計劃將現有AnalyticDB PostgreSQL版數據庫表中的數據加載到外表,建議在外表中使用AnalyticDB PostgreSQL版表相同的分布策略或字段名,可以避免數據加載操作中Segment節點間額外的數據移動。

示例

  • 示例一:創建一個可寫外表,在建表語句中指定好HDFS協議、格式及路徑,并向表中寫入數據。

    CREATE WRITABLE EXTERNAL TABLE pxf_hdfs_writable_table
    ( 
    a int,
    b int,
    c int
    )
    LOCATION ('pxf://data/demo/pxf_hdfs_demo_table?PROFILE=hdfs:text&SERVER=test2')
    FORMAT 'TEXT' (delimiter='|');
    
    INSERT INTO pxf_hdfs_writable_table 
    SELECT generate_series(1, 9000), generate_series(1, 9000), generate_series(1, 9000);
  • 示例二:創建一個可讀外表,在建表語句中指定好HDFS協議、格式及路徑,并查詢外表數據。

    CREATE READABLE EXTERNAL TABLE pxf_hdfs_readable_table
    ( 
    a int,
    b int,
    c int
    )
    LOCATION ('pxf://data/demo/pxf_hdfs_demo_table?PROFILE=hdfs:text&SERVER=test2')
    FORMAT 'TEXT' (delimiter='|');
    
    SELECT * FROM pxf_hdfs_readable_table order by 1;

讀寫Parquet數據

重要

AnalyticDB PostgreSQL版數據庫中讀寫Parquet基本數據類型,需要將Parquet數據值映射到相同類型的AnalyticDB PostgreSQL版數據庫列。映射關系,請參見附錄3:Parquet數據類型與AnalyticDB PostgreSQL數據類型映射關系。

語法

CREATE [WRITABLE |READABLE] EXTERNAL TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<hdfs_dbName>.<hdfs_tableName>
    ?PROFILE=hdfs:parquet[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import'|'pxfwritable_export');
[DISTRIBUTED BY (<column_name> [, ... ] ) | DISTRIBUTED RANDOMLY];

參數

參數

說明

[WRITABLE | READABLE]

  • 創建可寫外表時,必須定義WRITABLE關鍵字。

  • 創建可讀外表時,可定義READABLE關鍵字或省略。

<hdfs_dbName>.<hdfs_tableName>

HDFS數據存儲目錄的絕對路徑。

PROFILE

指定HDFS外表數據格式,Parquet格式數據必須指定為hdfs:parquet

HDFS外表支持的數據格式,請參見附錄1:HDFS外表數據格式。

SERVER

外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在外部數據源管理 > 異構數據源訪問頁面查看數據源名稱。

如未指定,異構數據源訪問將使用Default服務器。

FORMAT

定義非文本格式。當數據為Parquet格式固定為CUSTOM。

FORMATTER

定義表為可讀外表或可寫外表。

  • 可寫外表為pxfwritable_export。

  • 可讀外表為pxfwritable_import。

DISTRIBUTED BY

分布策略。

如果您計劃將現有AnalyticDB PostgreSQL版數據庫表中的數據加載到外表,建議在外表中使用AnalyticDB PostgreSQL版表相同的分布策略或字段名,可以避免數據加載操作中Segment節點間額外的數據移動。

hdfs:parquet配置文件支持與編碼和壓縮有關的寫入選項,可以在CREATE WRITABLE EXTERNAL TABLE LOCATION子句中指定以下自定義選項:

寫入選項

描述

COMPRESSION_CODEC

壓縮編碼器別名。 用于寫入Parquet數據受支持的壓縮編碼器包括: 

  • snappy(默認壓縮編碼器)

  • gzip

  • lzo

  • uncompressed

ROWGROUP_SIZE

行組大小,單位字節(Byte),默認值:8 * 1024 * 1024。

Parquet文件由一個或多個行組組成,將數據邏輯劃分為行。

PAGE_SIZE

頁面大小,單位字節(Byte),默認值:1024 * 1024。

行組由劃分為頁面的列塊組成。

DICTIONARY_PAGE_SIZE

字典頁面大小,單位字節(Byte),默認值:512 * 1024。

當異構數據源訪問寫入Parquet文件時,默認啟用字典編碼。每列、每行組只有一個字典頁面。

PARQUET_VERSION

Parquet版本,支持:

  • v1(默認版本)

  • v2

示例

  • 示例一:創建一個可寫外表,并在建表語句中指定好HDFS協議、Parquet格式及路徑,并向表中寫入數據。

    CREATE WRITABLE EXTERNAL TABLE pxf_hdfs_writable_parquet_table
    ( 
    a int,
    b int,
    c int
    )
    LOCATION ('pxf://data/demo/pxf_hdfs_writable_parquet_table?PROFILE=hdfs:parquet&SERVER=test2')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_export');
    
    INSERT INTO pxf_hdfs_writable_parquet_table 
    SELECT generate_series(1, 9000), generate_series(1, 9000), generate_series(1, 9000);
  • 示例二:創建一個可讀外表,并在建表語句中指定好HDFS協議、Parquet格式及路徑,并查詢表中數據。

    CREATE READABLE EXTERNAL TABLE pxf_hdfs_readable_parquet_table
    ( 
    a int,
    b int,
    c int
    )
    LOCATION ('pxf://data/demo/pxf_hdfs_writable_parquet_table?PROFILE=hdfs:parquet&SERVER=test2')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');
    
    SELECT * FROM pxf_hdfs_readable_parquet_table;

Hive外表

若需在AnalyticDB PostgreSQL版數據庫中展示Hive數據,請將Hive數據值映射到相同類型的AnalyticDB PostgreSQL版數據庫列。映射關系,請參見附錄4:Hive數據類型與AnalyticDB PostgreSQL數據類型映射關系。

語法

可寫Hive外表與可讀Hive外表支持的功能有差異,請根據需要選擇合適的語法。

  • 可寫外表

    由于在新版本中Hive相關數據寫入接口進行了較大變更,與早期版本的底層邏輯不同,可能在使用新版本Hive外表進行創建或寫入數據時報錯,建議使用HDFS方式創建外表進行寫入。語法詳情請參見HDFS外表。

  • 可讀外表

    CREATE [READABLE] EXTERNAL TABLE <table_name>
        ( <column_name> <data_type> [, ...] | LIKE <other_table> )
    LOCATION ('pxf://<hive-db-name>.<hive-table-name>
        ?PROFILE=Hive|HiveText|HiveRC|HiveORC|HiveVectorizedORC[&SERVER=<server_name>]'])
    FORMAT 'CUSTOM|TEXT' (FORMATTER='pxfwritable_import' | delimiter='<delim>')

參數

參數

說明

READABLE

創建可讀外表時,可定義READABLE關鍵字或省略。

hive_dbName

Hive數據庫的名稱。 如果省略,默認為Default的Hive數據庫.

hive_tableName

Hive表的名稱。

PROFILE

指定Hive外表數據格式,必須指定為HiveHiveText、HiveRC、HiveORCHiveVectorizedORC之一。

Hive外表支持的數據格式,請參見附錄2:Hive外表數據格式

重要

HiveVectorizedORC配置文件不支持Timestamp數據類型。

SERVER

外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在外部數據源管理 > 異構數據源訪問頁面查看數據源名稱。

如未指定,異構數據源訪問將使用Default服務器。

FORMAT

  • 當PROFILE為HiveHiveORCHiveVectorizedORC時,FORMAT子句必須指定為'CUSTOM',且CUSTOM需要內置pxfwritable_impor的FORMATTER。

  • 當PROFILE為HiveText和HiveRC時,FORMAT子句必須指定為'TEXT',且需在delimiter ='<delim>'中指定單個ASCII定界符。

示例

  1. 登錄Hive集群,創建Hive表。

    hive> CREATE EXTERNAL TABLE IF NOT EXISTS pxf_hive_demo_table
    (
    a int,
    b int,
    c int
    )
    row format delimited fields terminated by '|'
    stored as textfile
    location '/data/demo/pxf_hdfs_demo_table';
  2. 登錄AnalyticDB PostgreSQL版數據庫,創建可寫Hive外表,并向外表插入數據。

    postgres> CREATE WRITABLE EXTERNAL TABLE pxf_hive_writable_table
    ( 
    a int,
    b int,
    c int
    )
    LOCATION ('pxf://default.pxf_hive_demo_table?PROFILE=Hive&SERVER=test2')
    FORMAT 'TEXT' (delimiter='|');
    
    INSERT INTO pxf_hive_writable_table 
    SELECT generate_series(1, 9000), generate_series(1, 9000), generate_series(1, 9000);
  3. 創建可讀Hive外表,并查詢外表數據。

    postgres> CREATE EXTERNAL TABLE pxf_hive_readable_table
    ( 
    a int,
    b int,
    c int
    )
    LOCATION ('pxf://default.pxf_hive_demo_table?PROFILE=Hive&SERVER=test2')
    FORMAT 'TEXT' (delimiter='|');
    
    SELECT * FROM pxf_hive_readable_table;

JDBC外表

支持的數據類型

JDBC連接器支持以下數據類型:

  • INTEGER,BIGINT,SMALLINT

  • REAL,FLOAT8

  • NUMERIC

  • BOOLEAN

  • VARCHAR,BPCHAR,TEXT

  • DATE

  • TIMESTAMP

  • BYTEA

重要

JDBC連接器不支持讀取或寫入以字節數組(Byte[])存儲的Hive數據。

語法

使用以下語法創建外表并使用JDBC連接器讀取或寫入數據,如需訪問遠程SQL數據庫中的數據,可以創建一個引用該遠程數據庫表的可讀或可寫的

AnalyticDB PostgreSQL版

外表。

AnalyticDB PostgreSQL版

外表、遠程數據庫表和查詢結果元組必須具有相同的列名稱和列類型。

CREATE [READABLE | WRITABLE] EXTERNAL TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<external_tableName>?PROFILE=Jdbc[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import'|'pxfwritable_export');

參數

參數

說明

external_tableName

外部表的全名。取決于外部SQL數據庫,可能包括模式名稱和表名稱。

PROFILE

指定JDBC外表數據格式,必須指定為Jdbc

SERVER

外部數據源名稱。登錄云原生數據倉庫AnalyticDB PostgreSQL版控制臺,在外部數據源管理 > 異構數據源訪問頁面查看數據源名稱。

如未指定,異構數據源訪問將使用Default服務器。

custom-option

自定義選項,詳情請參見JDBC自定義選項。

FORMAT

固定為'CUSTOM'。支持以下FORMATTER函數:

  • 用于讀取操作的內置'pxfwritable_import'函數。

  • 用于寫入操作的內置'pxfwritable_export'函數。

JDBC自定義選項

您可以在LOCATION URI中添加JDBC連接器自定義選項,并在每個選項前加上&符號。JDBC支持的custom-option包括:

選項名稱

操作

描述

BATCH_SIZE

Write

標識要批處理到外部SQL數據庫的INSERT操作數量。默認開啟批處理,默認值:100,需為整數。 異構數據源訪問始終會驗證BATCH_SIZE選項。

  • 當外部數據庫的JDBC驅動程序支持批處理時,批量INSERT操作可能會大大提升性能。如需禁用批處理或修改批處理大小的值,在創建外表時按如下規則指定BATCH_SIZE:

    • BATCH_SIZE=0或BATCH_SIZE=1時,將關閉批處理。

    • BATCH_SIZE=n(n>1)時,將BATCH_SIZE設置為n。

  • 當外部數據庫的JDBC驅動程序不支持批處理時,JDBC連接器的行為取決于BATCH_SIZE設置,如下所述:

    • BATCH_SIZE 省略,JDBC連接器插入時不使用批處理。

    • BATCH_SIZE=n(n>1),INSERT操作失敗并且連接器返回錯誤。

FETCH_SIZE

Read

標識從外部SQL數據庫讀取時要緩沖的行數。讀取行批處理默認為啟用,默認值:1000,需為整數。

要修改默認的獲取值大小,請在創建外表時指定FETCH_SIZE,如FETCH_SIZE=5000

如果外部數據庫JDBC驅動程序不支持讀取時批處理,則必須通過設置FETCH_SIZE=0來禁用讀取行批處理。

QUERY_TIMEOUT

Read或Write

標識JDBC驅動程序等待語句執行的時間。單位:(s)。 默認值:無限的,需為整數。

POOL_SIZE

Write

在INSERT操作中啟動線程池,并標識線程池中的線程數。默認線程池為禁用。

建議將批處理(BATCH_SIZE)和線程池一起使用,當一起使用時,每個線程將接收并處理一批完整的數據。如果僅使用線程池而不使用批處理,則線程池中的每個線程都恰好接收一個元組。

當線程池中的任一線程失敗時,JDBC連接器返回一個錯誤。請注意INSERT操作失敗,部分數據可能會寫入外部數據庫表中。

要禁用或啟動線程池并設置線程池大小,在創建外表時按如下規則指定POOL_SIZE:

  • POOL_SIZE=n(n<1):線程池大小是系統中的CPU數量。

  • POOL_SIZE=1:關閉線程池。

  • POOL_SIZE=n(n>1):啟動線程池并設置線程池大小為n。

PARTITION_BY

Read

啟用分區讀。 只能指定一個分區列,格式為<column_name>:<column_type>。JDBC連接器支持Date、IntEnum<column_type>值。 如果您未指定PARTITION_BY列,則單個JDBC連接器為讀取請求提供服務。

在創建JDBC外表時,PARTITION_BY子句的示例如下:

&PARTITION_BY=id:int&RANGE=1:100&INTERVAL=5
&PARTITION_BY=year:int&RANGE=2011:2013&INTERVAL=1
&PARTITION_BY=createdate:date&RANGE=2013-01-01:2016-01-01&INTERVAL=1:month
&PARTITION_BY=color:enum&RANGE=red:yellow:blue

啟用分區時,JDBC連接器將SELECT查詢拆分為多個子查詢,這些子查詢是檢索數據的子集,每個子集稱為一個片段。 JDBC連接器會自動向每個片段添加額外的查詢約束(WHERE表達式),以確保從外部數據庫中檢索每個元組的數據都恰好一次。

例如,當用戶查詢使用指定&PARTITION_BY=id:int&RANGE=1:5&INTERVAL=2的LOCATION子句創建的外表時,會生成5個片段,根據分區設置兩個和最多三個隱式片段生成的碎片。 與每個片段相關的約束如下:

  • 片段1:WHERE (id < 1), 隱式生成的片段,用于RANGE起始區間。

  • 片段2:WHERE (id >= 1) AND (id < 3) ,分區設置指定的片段。

  • 片段3:WHERE (id >= 3) AND (id < 5) ,分區設置指定的片段。

  • 片段4:WHERE (id >= 5),隱式生成的片段,用于RANGE結束區間。

  • 片段5:WHERE (id IS NULL) ,隱式生成的片段。

外部數據源服務會在AnalyticDB PostgreSQL版數據庫Segment之間分配片段。在外部數據源實例為服務片段的主機上的每個Segment生成一個線程。 如果片段的數量小于或等于在片段主機上配置的AnalyticDB PostgreSQL版數據庫Segment的數量,則單個外部數據源實例可以為所有片段提供服務。每個異構數據源訪問服務實例將其結果發送回AnalyticDB PostgreSQL版數據庫,在此收集并將其返回給用戶。

當您指定PARTITION_BY選項時,根據與目標數據庫的最佳JDBC連接數以及跨AnalyticDB PostgreSQL版數據庫Segment的最佳外部數據分配,調整INTERVAL值和單位。INTERVAL低邊界由AnalyticDB PostgreSQL版數據庫Segment的數量驅動,而高邊界由與目標數據庫的可接受的JDBC連接數量驅動。INTERVAL設置會影響片段的數量,理想情況下不應設置得太高或太低。 使用多個值進行測試可以幫助您選擇最佳設置。

RANGE

Read

當指定PARTITION_BY時,則為必填項。

指定查詢范圍, 用以提示幫助創建分區。 RANGE格式取決于分區列的數據類型。

  • 當分區列為Enum類型時,RANGE必須指定值列表,即<value>:<value>[:<value>[…]],形成自己的片段。

  • 當分區列是IntDate類型時,RANGE必須指定<start-value>:<end-value>,表示從<start-value><end-value>(包含)。

    說明

    分區列是Date類型,請使用yyyy-MM-dd日期格式。

INTERVAL

Read

如果指定了PARTITION_BY且類型為IntDate時,則為必填項。

一個分區片段的間隔,格式為<interval-value>[:<interval-unit>],與RANGE一起使用用以提示創建分區。通過<interval-value>指定片段的大小。

  • 當PARTITION_BY列為Date類型,使用<interval-unit>指定Year,Month或Day。

  • 當PARTITION_BY列為Enum類型,JDBC連接器會忽略INTERVAL。

QUOTE_COLUMNS

Read

控制在構造外部數據庫的SQL查詢時JDBC連接器是否引用列名。

  • 指定為true:強制JDBC連接器引用所有列名稱。

  • 指定任何其他值,JDBC連接器不會引用列名。

如果未指定QUOTE_COLUMNS(默認不指定),當查詢中任一字段滿足以下條件,JDBC連接器將自動引用所有列名:

  • 包含特殊字符。

  • 混合大小寫,且外部數據庫不支持未引用的混合大小寫標識符。

示例

  1. 在MySQL或PostgreSQL數據庫中,創建數據表,并插入數據。

CREATE TABLE test(id int, name VARCHAR(255));
INSERT INTO test(id,name) VALUES(1,'qingzhi');
INSERT INTO test(id,name) VALUES(2,'jianli');
  1. 登錄AnalyticDB PostgreSQL版數據庫,創建JDBC外表,并查詢外表數據。

CREATE EXTERNAL TABLE pxf_jdbc_textsimple(id int, name varchar)
LOCATION ('pxf://test?PROFILE=Jdbc&SERVER=test01')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import')
ENCODING 'UTF8';
SELECT * FROM pxf_jdbc_textsimple;

附錄1:HDFS外表數據格式

HDFS外表支持的數據格式與創建HDFS外表配置的PROFILE參數對應關系如下。

數據格式

PROFILE(配置文件名稱)

單行的分隔文本

hdfs:text

含有被引號引起來的換行符的分隔文本

hdfs:text:multi

Avro

hdfs:avro

JSON

hdfs:json

Parquet

hdfs:parquet

AvroSequenceFile

hdfs:AvroSequenceFile

SequenceFile

hdfs:SequenceFile

附錄2:Hive外表數據格式

Hive外表支持的數據格式與創建Hive外表配置的PROFILE參數對應關系如下。

數據格式

PROFILE(配置文件名稱)

TextFile

Hive或HiveText

SequenceFile

Hive

RCFile

Hive或HiveRC

ORC

Hive、HiveORC或HiveVectorizedORC

Parquet

Hive

附錄3:Parquet數據類型與AnalyticDB PostgreSQL數據類型映射關系

Parquet數據類型

AnalyticDB PostgreSQL數據類型

Boolean

Boolean

Byte_array

Bytea,Text

Double

Float8

Fixed_len_byte_array

Numeric

Float

Real

Int_8, Int_16

Smallint,Integer

Int64

Bigint

Int96

Timestamp,Timestamptz

寫入Parquet時,異構數據源將Timestamp本地化為當前系統時區,并將其轉換為通用時間(UTC),最終轉換為Int96。在此轉換過程中,異構數據源會丟失時區信息。

附錄4:Hive數據類型與AnalyticDB PostgreSQL數據類型映射關系

Hive數據類型

AnalyticDB PostgreSQL數據類型

Boolean

Bool

Int

Int4

Smallint

Int2

Tinyint

Int2

Float

Float4

Bigint

Int8

double

Float8

String

Text

Binary

Bytea

Timestamp

Timestamp