从对象存储中读取JSON数据

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

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

先决条件

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

使用JSON数据

有关基于JSON文本的数据交换格式的说明,请参阅PXF HDFS JSON文档中的 使用JSON数据

创建外部表

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

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

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

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

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

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

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

示例

有关JSON示例,请参阅PXF HDFS JSON 文档中的 将样本JSON数据加载到HDFS 以及 示例:读取单行记录的JSON文件 。 在对象存储中运行示例,必要的修改如下:

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

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

    CREATE EXTERNAL TABLE singleline_json_s3(
      created_at TEXT,
      id_str TEXT,
      "user.id" INTEGER,
      "user.location" TEXT,
      "coordinates.values[0]" INTEGER,
      "coordinates.values[1]" INTEGER
    )
      LOCATION('pxf://BUCKET/pxf_examples/singleline.json?PROFILE=s3:json&SERVER=s3srvcfg')
    FORMAT 'CUSTOM' (FORMATTER='pxfwritable_import');