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