从对象存储中读取Avro数据

PXF 对象存储连接器支持读取Avro格式数据。 本节描述如何使用PXF访问对象存储中的Avro数据, 包括创建和查询引用对象存储中Avro文件的外部表。

注意: 从对象存储访问Avro格式数据与访问HDFS中的Avro格式数据非常相似。 本主题标识了读取对象存储所需的特定信息,并在通用信息的位置链接到 PXF HDFS Avro 文档

先决条件

在您尝试从对象存储中读取数据前,确保已满足PXF 对象存储先决条件

使用Avro数据

有关Apache Avro数据序列化框架的说明,请参考PXF HDFS Avro文档中的使用Avro数据

创建外部表

使用 <objstore>:avro 配置文件从对象存储中读取Avro格式文件。PXF 支持以下 <objstore> 配置前缀:

对象存储 配置前缀
Azure Blob Storage wasbs
Azure Data Lake adl
Google Cloud Storage gs
Minio s3
S3 s3

以下语法创建一个引用Avro格式文件的Greenplum数据库可读外部表:

CREATE EXTERNAL TABLE <table_name>
    ( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION ('pxf://<path-to-file>?PROFILE=<objstore>:avro[&SERVER=<server_name>][&<custom-option>=<value>[...]]')
FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');

CREATE EXTERNAL TABLE命令中使用的特定关键字和值见下表中描述。

关键字
<path‑to‑file> 对象存储中文件或目录的绝对路径
PROFILE=<objstore>:avro PROFILE 必须指定为特定的对象存储。例如, s3:avro
SERVER=<server_name> PXF用于访问数据的命名服务器配置。可选的; 如果未指定,PXF将使用default服务器。
<custom‑option>=<value> 特定于Avro的自定义选项描述见 PXF HDFS Avro 文档 
FORMAT ‘CUSTOM’ <objstore>:avro 配置文件中使用 FORMAT 'CUSTOM'CUSTOM FORMAT 要求您指定为 (FORMATTER='pxfwritable_import')

如果要访问S3对象存储,则可以通过[CREATE EXTERNAL TABLE]命令中的自定义选项提供S3凭据,如使用DDL覆盖S3服务器配置中所述。

示例

有关Avro示例,请参阅PXF HDFS Avro 文档中的 示例: 读取Avro数据。在对象存储中运行示例,必要的修改如下:

  • 将文件复制到对象存储而不是HDFS。 例如,将文件复制到S3:

    $ aws s3 cp /tmp/pxf_avro.avro s3://BUCKET/pxf_examples/
    
  • 使用上述的 CREATE EXTERNAL TABLE 语法和 LOCATION 关键字及设置。例如, 假设您的服务名为 s3srvcfg

    CREATE EXTERNAL TABLE pxf_s3_avro(id bigint, username text, followers text, fmap text, relationship text, address text)
      LOCATION ('pxf://BUCKET/pxf_examples/pxf_avro.avro?PROFILE=s3:avro&SERVER=s3srvcfg&COLLECTION_DELIM=,&MAPKEY_DELIM=:&RECORDKEY_DELIM=:')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');