从对象存储中读取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');