我正在使用HAWQ来处理基于列的文件。在阅读Pivotal文档时,他们建议用户使用gpfdist
来读取和编写可读的外部表,以便以并行方式快速处理数据。
我根据文档中的建议创建了一个表,并通过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 :(得分:2)
使用gpfdist的外部表
与内部表并行加载数据的理想解决方案
[{
"id": 1001,
"name": "Gaurdian Store",
"is_fave_shop": "0",
"products": [{
"id": 14285912,
"name": "Sofra Cream",
"is_wishlist": false
}]
},
null,
null,
{
"id": 1002,
"name": "decolite",
"is_fave_shop": "1",
"products": [{
"id": 14285912,
"name": "Denca SPF",
"is_wishlist": false
}]
}
]
内部表
外部表只是可以更轻松地将数据加载到数据库中,并使其更快地完成。
想想这个场景。您从Accounting系统获取需要加载的文件。你可以这样做:
这将起作用,PXF将并行读取HDFS中的文件。但是,第2步是单个过程和瓶颈。相反,这样做:
现在"放"进入HDFS是并行完成的,因为HAWQ将在每个节点上启动虚拟段来放置数据。这通常是每个数据节点6个虚拟段,因此在10节点集群中,您将有60个进程将数据放入HDFS而不是单个节点。