访问外部数据 ============ 使用gpfdist访问数据 ------------------- gpfdist是OushuDB并行文件分发程序。可读外部表使用它并行地为所有OushuDB节点提供外部表文件。可写外部表使用它并行地接受来自OushuDB节点的输出流,并将它们写入文件。 CREATE EXTERNAL TABLE命令中LOCATION子句可将外部表定义连接到一个或多个gpfdist实例。如果是可读外部表,gpfdist服务器从指定目录中的文件读取数据记录,将其打包并响应OushuDB数据库节点的发送请求。节点接收解压并按分发策略进行分发。如果是可写外部表,节点会将请求内容发送到gpfdist,gpfdist会将它们写入外部文件。 使用gpfdist协议的语法如下: :: gpfdist://[:]//[#] 是启动 gpfdist 程序时指定目录的相对目录。此外,可以在名称部分使用通配符(*)或其他C样式的模式匹配来表示目录中的多个文件。具体用法例如: \'gpfdist://filehost:8081/\*\' \'gpfdist://masterhost/my_load_文件\' 对于可写gpfdist外部表,指定gpfdist进程的URI位置,该进程将收集来自OushuDB节点的数据输出并将其写入命名文件。如果列出了多个gpfdist位置,发送数据的节点将在可用的输出位置上平均分配。例如: \'gpfdist://outpushot:8081/data1.out\', \'gpfdist://outpushot:8081/data2.out\' 外部数据文件包含CSV、TEXT或CREATE External TABLE命令的 format 子句支持的任何分隔文本格式的行。 对于可读的外部表,gpfdist会自动解压缩gzip(.gz)和bzip2(.bz2)文件。 使用hdfs访问外部数据 -------------------- 基于Hadoop分布式文件系统并行架构,OushuDB数据库使用hdfs协议实现高效地读写数据文件。 使用hdfs协议的语法如下: :: hdfs://[:]/ 是目标Hadoop hdfs中的目录,指定目录中包含的所有文件都将在扫描查询上下文中读取,该目录不应包含子目录。例如: 'hdfs://namenode:9000/directory1' 对于可写hdfs外部表,指定将输出文件保存在Hadoop hdfs中的目标目录的一个URI位置,只接受一个目录。用户还可以像查询可读表一样查询可写的 hdfs 外部表。例如: 'hdfs://namenode:9000/directory2' 一个可写的hdfs://external表也可以读取,这是用户使用一个同时支持高性能读写外部数据的外部表的一种方便方法。这种外部表还支持高性能的可伸缩数据交换。 可读的hdfs外表,可以在名称部分使用通配符(*)和(?)的模式匹配来表示目录中的多个文件。具体用法例如: 'create readable external table test1 (content text) location ('hdfs://oushu/*aaa*') format 'csv';' 对于可读的hdfs://external表,HDFS上存储的gz格式的压缩文件可以直接建表在DB内部解压读取。 'create readable external table test1 (content text) location ('hdfs://oushu/data.gz') format 'csv';' 使用hive访问外部数据 -------------------- 使用hive协议的语法如下: :: hive://[:]// 对于可写hive外部表,指定将输出文件保存在hive数据库中目标表的一个URI位置,只接受一个目录。用户还可以像查询可读表一样查询可写hive外部表。例如: 'hive://hivehost:9083/dbname/tablename' 使用http访问外部数据 -------------------- http协议与WEB外部表一起使用,可指定一个或多个URL。 在OushuDB中创建可读或可写的web外部表定义,有两种形式的可读web外部表:通过http://protocol访问文件的表或通过执行OS命令访问数据的表。 使用http协议的语法如下: :: http://[:]// 可写web外部表将数据输出到可接受数据输入流的可执行程序。在查询执行期间,Web外部表不可重新注册。用法例如: 'http://intranet.example.com/finance/expenses.csv'