在对象存储中读写SequenceFile数据

PXF 对象存储连接器支持SequenceFile格式二进制数据。 本节描述如何使用PXF读写SequenceFile数据,包括如何创建、写入以及查询引用对象存储文件的外部表。

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

先决条件

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

创建外部表

PXF <objstore>:SequenceFile 配置文件支持以SequenceFile格式读取和写入数据。 PXF 支持以下 <objstore> 配置文件前缀:

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

使用以下语法创建引用S3目录的Greenplum数据库外部表。 当您将记录插入可写外部表中时,您插入的数据块将写入指定目录中一个或多个文件。

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

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

关键字
<path‑to‑dir> 对象存储中文件或目录的绝对路径
PROFILE=<objstore>:SequenceFile PROFILE 必须指定为特定的对象存储。例如,s3:SequenceFile
SERVER=<server_name> PXF用于访问数据的命名服务器配置。可选的; 如果未指定,PXF将使用default服务器。
<custom‑option>=<value> 特定于SequenceFile的自定义选项描述见 PXF HDFS SequenceFile 文档 
FORMAT ‘CUSTOM’ 使用FORMATCUSTOM'时指定(FORMATTER='pxfwritable_export') (写入) 或 (FORMATTER='pxfwritable_import') (读取)
DISTRIBUTED BY 如果您计划将现有Greenplum数据库表中的数据加载到可写外部表,考虑在可写外部表上使用与Greenplum表相同的分布策略或<字段名>。 这样做可以避免数据加载操作中segment节点间额外的数据移动。

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

示例

有关SequenceFile读取/写入的示例,请参阅PXF HDFS SequenceFile 文档中的 示例: 将二进制数据写入HDFS。 在对象存储中运行示例,必要的修改如下:

  • 使用上述的 CREATE EXTERNAL TABLE 语法和 LOCATION 关键字及设置。例如, 假设您的服务名为 s3srvcfg

    CREATE WRITABLE EXTERNAL TABLE pxf_tbl_seqfile_s3(location text, month text, number_of_orders integer, total_sales real)
      LOCATION ('pxf://BUCKET/pxf_examples/pxf_seqfile?PROFILE=s3:SequenceFile&DATA-SCHEMA=com.example.pxf.hdfs.writable.dataschema.PxfExample_CustomWritable&COMPRESSION_TYPE=BLOCK&COMPRESSION_CODEC=org.apache.hadoop.io.compress.BZip2Codec&SERVER=s3srvcfg')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_export');
    
  • 使用上述的 CREATE EXTERNAL TABLE 语法和 LOCATION 关键字及设置。例如, 假设您的服务名为 s3srvcfg

    CREATE EXTERNAL TABLE read_pxf_tbl_seqfile_s3(location text, month text, number_of_orders integer, total_sales real)
      LOCATION ('pxf://BUCKET/pxf_examples/pxf_seqfile?PROFILE=s3:SequenceFile&DATA-SCHEMA=com.example.pxf.hdfs.writable.dataschema.PxfExample_CustomWritable&SERVER=s3srvcfg')
     FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');