定义外部表

E外部表允许把外部文件当作常规数据库表来访问。它们常常被用来把数据移进或者移出Greenplum数据库。

要创建一个外部表定义,用户需要指定输入文件的格式以及外部数据源的位置。有关输入文件格式的信息, 请参考 格式化数据文件

使用下列协议之一来访问外部表数据源。用户不能在CREATE EXTERNAL TABLE语句中混用协议:

  • file:// 访问Segment主机上Greenplum数据超级用户 (gpadmin)能访问的外部数据文件。 见 file://协议
  • gpfdist:// 指向一个位于文件主机上的目录并且向Greenplum数据库所有的Segment并行提供外部数据文件。见 gpfdist://协议
  • gpfdists:// 是gpfdist的一个安全版本。见 gpfdists:// 协议
  • s3://访问Amazon S3桶中的文件。见s3:// 协议
  • The pxf://协议使用Greenplum平台扩展框架(PXF)访问外部HDFS文件和HBase和Hive表。见pxf:// 协议

Note:

s3:// 和 pxf:// 协议是自定义数据访问协议,file://, gpfdist://, 和 gpfdists://协议是实现在Greenplum数据库内部的。自定义和内部协议有以下不同:

  • 自定义协议必须使用CREATE PROTOCOL 命令注册。 在数据库中注册PXF扩展会创建 pxf:// 协议。(见 使用PXF访问外部数据。)您可以选择性地注册 s3:// 协议。(见 配置和使用S3外部表。) 内部协议始终存在且无法取消注册。
  • 注册自定义协议时,会在pg_extprotocol catalog表中添加一行,以指定实现该协议的处理函数。 协议的共享库必须安装在所有Greenplum数据库主机上。 内部协议在pg_extprotocol表中没有记录,并且没有其他库需要安装。
  • 要授予用户对自定义协议的权限,请使用GRANT [SELECT | INSERT | ALL] ON PROTOCOL。要允许(或拒绝)内部协议的用户权限,需要使用CREATE ROLE 或 ALTER ROLE将CREATEEXTTABLE(或NOCREATEEXTTABLE)属性添加到每个用户的角色。

外部表从数据库内访问外部文件,就好像它们是常规的数据库表一样。用 gpfdist/gpfdists, pxf, 和 s3协议定义的外部表通过使用所有Greenplum数据库的Segment资源装载或卸载数据来利用Greenplum的并行机制。 pxf协议利用Hadoop分布式文件系统的并行体系结构来访问该系统上的文件。 s3协议利用了Amazon Web服务(AWS)的功能。

用户可以使用SELECT、JOIN或SORT EXTERNAL TABLE DATA等SQL命令直接并行地查询外部表数据, 并且用户可以为外部表创建视图。

使用外部表的步骤是:

  1. 定义外部表。

    使用s3 协议, 用户还必须配置Greenplum数据库并且启用该协议。见 s3:// 协议

  2. 做下面的事情之一:

    • 在使用gpfdist或者gpdists协议时,启动Greenplum数据库文件服务器。
    • 验证为s3协议做好了所需的一次性配置。
  3. 把数据文件放置在正确位置。
  4. 用SQL命令查询外部表。

Greenplum数据库提供可读和可写的外部表:

  • 用于数据加载的可读外部表。 可读外部表支持:

    • 数据仓库中常见的基本提取,转换和加载(ETL)任务。
    • 从多个Greenplum数据库段实例并行读取外部表数据,以优化大型加载操作。
    • 过滤下推。 如果查询包含WHERE子句,则可以将其传递给外部数据源。 有关更多信息,请参考gp_external_enable_filter_pushdown服务器配置参数讨论。 请注意,此功能目前仅支持pxf协议(参阅 pxf:// 协议)。

    可读外部表仅允许SELECT操作。

  • 用于数据卸载的可写外部表。 可写外部表支持:

    • 从数据库表中选择数据以插入可写外部表。
    • 将数据以数据流形式发送到应用程序。 例如,从Greenplum数据库卸载数据并将其发送到连接到另一个数据库或ETL工具的应用程序以在其他地方加载数据。
    • 从Greenplum并行MapReduce计算接收输出。

    可写外部表仅允许INSERT操作。

外部表可以是基于文件的或者是基于Web的。使用file://协议的外部表示只读表。

转储和操作只针对外部表和外部Web表的定义而非数据源。

  • file://协议
    file://协议被用在一个指定操作系统文件的URI中。
  • gpfdist://协议
    gpfdist://协议被用在一个URI中引用一个正在运行的 gpfdist实例。
  • gpfdists:// 协议
    gpfdists:// 协议是gpfdist:// 协议的一个安全版本。
  • pxf:// 协议
    您可以使用Greenplum平台扩展框架(PXF)pxf://协议访问驻留在外部Hadoop系统(HDFS,Hive,HBase),对象存储系统(Azure,Google云端存储,Minio,S3)和SQL数据库上的数据。
  • s3:// 协议
    s3协议使用一个URL指定Amazon S3桶的位置和一个用来在桶里读写文件的前缀。
  • 使用自定义协议
    一种自定义协议允许用户连接到一个不能用file://, gpfdist://,或者 pxf:// 协议的Greenplum数据库。
  • 处理外部表数据中的错误
    默认情况下,如果外部表数据中包含有一个错误,命令就会失败并且不会有数据被载入到目标数据库表中。
  • 创建和使用外部Web表
    外部Web表允许Greenplum Database像处理常规数据表一样处理动态数据源。由于Web表数据可以在查询运行时更改,因此数据无法重新扫描。
  • Examples for Creating External Tables
    These examples show how to define external data with different protocols. Each CREATE EXTERNAL TABLE command can contain only one protocol.

Parent topic: 使用外部数据