使用PXF读写外部数据
Greenplum平台扩展框架(PXF)实现了一个名为的协议pxf,您可以使用该协议创建引用外部数据存储中的数据的外部表。PXF协议和Java服务打包为Greenplum数据库扩展。
如果想通过pxf访问外部数据源,则必须开启pxf。同时还必须给想用的用户赋访问pxf的权限。
安装初始化pxf并分配权限后,您可以使用该CREATE EXTERNAL TABLE命令使用pxf协议创建外部表。PXF提供内置HDFS,Hive和HBase连接器。这些连接器定义支持不同文件格式的配置文件 您可以在CREATE EXTERNAL TABLE命令LOCATIONURI中指定配置文件名称。
启用/禁用PXF
必须在需要使用pxf协议的Greenplum数据库上开启pxf。
注意:您必须具有Greenplum数据库管理员权限才能创建pxf扩展。
启用程序
对要在其中使用PXF的每个数据库执行以下操作:
1、以gpadmin用户身份连接到数据库:
gpadmin@gpmaster$ psql -d <database-name> -U gpadmin
2、注册pxf扩展。必须具有Greenplum数据库管理员权限才能创建pxf扩展。例如:
database-name=# CREATE EXTENSION pxf;
创建pxf扩展,则会注册PXF访问外部数据所需的协议。
禁用程序
如果您不想再在特定数据库上使用PXF,则必须显式禁用该数据库的PXF扩展:
1、以gpadmin用户身份连接到数据库:
gpadmin@gpmaster$ psql -d <database-name> -U gpadmin
2、删除PXF扩展:
database-name=# DROP EXTENSION pxf;
如果该数据库存在pxf协议生成的外部表,则该命令失败。如果要强制删除该数据库中的pxf协议,则可添加CASCADE,进行强行删除。
授予PXF访问权限
要使用PXF读取外部数据,可以使用CREATE EXTERNAL TABLE指定pxf协议的命令创建外部表。创建pxf外部表的用户必须具备对pxf外部表具有读的权限,因此需要给该用户赋权,超级用户除外。
要授予特定角色访问pxf协议的权限,可以使用GRANT命令。例如要给bill用户提供访问pxf,提供只读的权限,可以进行如下操作:
GRANT SELECT ON PROTOCOL pxf TO bill;
要使用PXF将数据写入外部数据存储,可以使用CREATE WRITABLE EXTERNAL TABLE指定pxf协议的命令创建外部表。同理,该用户必须具备pxf写的权限。如果没有则需要进行赋权操作。例如:
GRANT INSERT ON PROTOCOL pxf TO bill;
PXF配置文件
PXF与HDFS,Hive和HBase连接器一起安装,提供了许多内置配置文件。这些配置文件简化并统一了对各种格式的外部数据源的访问。pxf在CREATE EXTERNAL TABLE命令创建外部表的时候,可以提供配置文件名称。
PXF提供以下内置配置文件。那些支持写访问的在描述中会指出。
数据源 | 数据格式 | 配置文件名称 | 描述 |
---|---|---|---|
HBase | many | HBase | 任何可以转换为字节数组的数据类型。 |
HDFS | text | HdfsTextSimple | hdfs上以单字符作为字段分隔符的纯文本数据。支持写。 |
HDFS | text | HdfsTextMulti | hdfs上以单字符作为分隔符的以非换行符作为换行的纯文本数据。 |
HDFS | Avro | Avro | avro格式文件( .avro)。 |
HDFS | JSON | JSON | JSON格式数据文件( .json)。 |
HDFS | binary | SequenceWritable | 二进制文件。支持写。 |
HDFS | parquet | parquet | parquet格式的hdfs文件。支持阅读。 |
hive | TextFile | Hive,HiveText | 数据采用逗号,制表符或空格分隔或JSON表示法。 |
hive | RCFile | Hive,HiveRC | 记录由二进制键/值对组成的列式数据。 |
hive | SequenceFile | hive | 数据由二进制键/值对组成。 |
hive | ORC | Hive,HiveORC,HiveVectorizedORC | 使用条带,页脚和postscript部分优化行列式数据。 |
hive | Parquet | Hive | 压缩列式存储 |
PXF profiles配置文件定义包括配置文件名称,描述以及实现解析和读取外部数据的Java类。$GPHOME/pxf/conf/pxf-profiles-default.xml为PXF内置的配置文件。其中HdfsTextSimple配置定义如下:
<profile>
<name>HdfsTextSimple</name>
<description>This profile is suitable for using when reading
delimited single line records from plain text files on HDFS
</description>
<plugins>
<fragmenter>org.apache.hawq.pxf.plugins.hdfs.HdfsDataFragmenter</fragmenter>
<accessor>org.apache.hawq.pxf.plugins.hdfs.LineBreakAccessor</accessor>
<resolver>org.apache.hawq.pxf.plugins.hdfs.StringPassResolver</resolver>
</plugins>
</profile>
注意:Profile 标识PXF用于解析和访问外部数据的Java类。典型的PXF用户无需关心配置文件plugins。
PXF JAR依赖项
您使用PXF访问存储在外部系统上的数据。根据外部数据存储,此访问可能要求您为外部数据存储安装和/或配置其他组件或服务。例如,要使用PXF访问存储在HDFS中的文件,必须在每个Greenplum数据库segment主机上安装Hadoop客户端。
PXF依赖于JAR文件和这些附加组件提供的其他配置信息。在
G
P
H
O
M
E
/
p
x
f
/
c
o
n
f
/
p
x
f
−
p
r
i
v
a
t
e
.
c
l
a
s
s
p
a
t
h
和
GPHOME/pxf/conf/pxf-private.classpath和
GPHOME/pxf/conf/pxf−private.classpath和GPHOME/pxf/conf/pxf-public.classpath配置文件确定PXF JAR依赖关系。在大多数情况下,PXF管理pxf-private.classpath文件,根据您的Hadoop分发和可选的Hive和HBase客户端安装添加必要的条目。
如果需要为PXF添加其他JAR依赖项,则必须将它们添加到pxf-public.classpath每个segment主机上的文件中,然后在每个主机上重新启动PXF。
使用PXF创建外部表
CREATE EXTERNAL TABLE指定pxf协议的命令的语法如下:
CREATE [WRITABLE] EXTERNAL TABLE <table_name>
( <column_name> <data_type> [, ...] | LIKE <other_table> )
LOCATION('pxf://<path-to-data>?PROFILE[&<custom-option>=<value>[...]]')
FORMAT '[TEXT|CSV|CUSTOM]' (<formatting-properties>);
CREATE EXTERNAL TABLE语句中的LOCATION中的pxf是一个URI,用于标识描述外部数据位置的路径或其他信息。例如,如果外部数据存储是HDFS,则将标识特定HDFS文件的绝对路径。如果外部数据存储是Hive,则将标识符合模式的Hive表名称。
使用由问号(?)引入的URI的查询部分来标识PXF配置文件名称。
在LOCATION中可以使用可选& = 组件提供特定于配置文件的信息,并通过字符串的组件提供格式信息。特定配置文件支持的自定义选项和格式设置属性将在使用文档中稍后标识。
Greenplum Database将LOCATION字符串中的参数作为标头传递给PXF Java服务。
表1.创建外部表参数值和描述
关键字 | 描述 |
---|---|
目录、文件名、通配符模式、表名等。的语法取决于当前使用的配置文件。 | |
PROFILE | PXF访问外部数据的配置文件。PXF支持访问hdfs、hbase、hive。其支持的profile名称包括:HBase、HdfsTextSimple、HdfsTextMulti、Avro、Json、SequenceWritable、Hive、HiveText、HiveRC、HiveORC和HiveVectorizedORC。 |
custom-option=value | 配置文件支持的其他选项和值。 |
FORMAT ‘[TEXT|CSV|CUSTOM]’ | PXF配置文件支持’ TEXT’,’ CSV’和’ CUSTOM’ FORMAT。 |
formatting-properties | 格式化配置文件支持的属性; 例如,formatter或delimiter。 |
注意:创建PXF外部表时,不能使用规范中的HEADER选项FORMAT。