2017-03-09 54 views
0

我正在使用HAWQ处理一个基于列的文件。在阅读Pivotal文档时,他们建议用户应该使用gpfdist来读取和写入可读的外部表格,以便以并行方式快速处理数据。使用Apache HAWQ时外部表与内部表之间的区别?

我按照文档中的建议制作了一个表,并通过SQL确认了我的数据,如下所示。

CREATE EXTERNAL TABLE ext_data 
(col1 text, col2 text,col3 text, col4 text, col5 int, col6 int, col7 int,col8 int) 
LOCATION ('gpfdist://hawq2:8085/*.csv') 
FORMAT 'CSV'(DELIMITER ','); 

SELECT gp_segment_id,count(*) from ext_data GROUP BY gp_segment_id; 

数据均匀分布在所有从节点上。

之前我的目标是创建表格,从文件中读取数据并识别已加载的数据分布良好。这是通过使用gpfdist的上述过程实现的。

但问题是外部表和内部表之间的差异。即使两种方法具有相同的功能,使用外部或内部表的原因是什么?

我发现了一些用户在使用HAWQ或Greenplume数据库时遵循以下程序的一些博客。

1. making external table using gpfdist 
2. making internal table again 
3. reading the data from external data into internal data. 

我没有完全明白这种行为。最重要的是,我不知道为什么存在外部和内部表格,应该使用Apache Hawq或greenplume数据库来处理数据。

+0

外部表用于大多数使用情况下的数据浏览或并行数据加载。当你查询ext表时,数据从gpfdist加载到直接分割内存。假设您有10段和1个gpfdist托管文件。当你在这个外部表中选择时,所有10个分段都在同一个gpfdist上读取文件。在这种情况下,您的查询速度受到网络的限制。内部表格数据存储在hdfs中,并且段落将用于本地hdfs数据。它会更快。 –

回答

2

一个外部使用gpfdist

  • 数据是在一个POSIX文件系统,HDFS不
  • 没有统计表
  • 文件可以在不属于集群
  • 的一部分ETL节点
  • 您也可以在多台服务器上安装多个文件
  • 将数据并行加载到内部表的理想解决方案

    insert into table_name select * from external_table_name; 
    

内部表

  • 数据存储在HDFS
  • 统计信息收集和存储在目录
  • 文件是HDFS文件只
  • 你可以采取HDFS功能的优点,如镶木地板格式和快速压缩
  • 提供查询
  • 最佳性能

外部表只是使它更容易将数据加载到数据库中,并使其做到更快。

想想这种情况。您从会计系统中获取需要加载的文件。你可以这样做:

  1. SCP文件边缘节点
  2. HDFS文件放入HDFS
  3. 使用PXF读取文件
  4. 将数据插入到HAWQ在HAWQ创建外部表表

这将工作,并且PXF将在HDFS中并行读取文件。但是,第2步是一个过程,也是一个瓶颈。相反,这样做:

  1. SCP文件边缘节点
  2. 开始gpfdist过程
  3. 使用gpfdist读取文件
  4. 将数据插入到HAWQ表
  5. 在HAWQ创建外部表

现在“放入”HDFS是并行完成的,因为HAWQ将在每个节点上启动虚拟段来放置数据。这通常是每个数据节点6个虚拟段,因此在10个节点集群中,您将有60个进程将数据放入HDFS而不是单个进程。

+0

感谢您的评论。在第一种情况下,为什么要创建外部表,尽管所有数据都位于案例2的hdfs中?跳过案例3,制作内部表格并将数据插入表格是不可能的?我几乎有了hawq和gpfdist的想法...... – sclee1

+1

在第一种情况下,文件将在HDFS中以文本格式存在,而不是格式化为HAWQ表。您可以使用PXF使用外部表格阅读它,但与gpfdist一样,您没有统计信息。将文件直接从文件加载到HAWQ表的最好方法是使用gpfdist。 –

+1

如果您有hdfs中的数据,例如hive,hbase或其他数据格式中的数据,则可以使用pxf外部表查询它们而不将它们带入hawq内部表中。查询的性能不如内部表。但如果您想要跨不同来源执行联合查询,则非常方便。 –

相关问题