访问基于文件的外部表

访问基于文件的外部表

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

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

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

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

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

使用外部表的步骤是:

  1. 定义外部表。

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

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

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

  • 用于数据装载的可读外部表。可读外部表支持数据仓库中常见的基本抽取、转换和装载(ETL)任务。Greenplum数据库的Segment实例会并行读取外部表数据来优化大型装载操作。用户不能修改可读外部表中的数据。
  • 用于数据卸载的可写外部表。可写外部表支持:
    • 从数据库表选择数据来插入到可写外部表。
    • 把数据作为一个数据流发送给一个应用。例如,从Greenplum数据库卸载数据并且把它发送到一个连接着另一个数据库的应用或者装载该数据到其他地方的ETL工具。
    • 从Greenplum并行MapReduce计算接收输出。

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

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

  • 普通(基于文件的)外部表访问静态平面文件。普通外部表是可以重新扫描的:在查询运行时数据是静态的。
  • Web(基于Web的)外部表访问动态数据源,或者在一个用http://协议的Web服务器上,或者通过执行OS命令或脚本得到。外部Web表不是可以重新扫描的:在查询运行时数据可以改变。

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