当我将表从 amazon redshift 卸载到 S3 时,无论表有多小,它总是将表分成两部分。我已经阅读了有关卸载的 redshift 文档,但除了它说有时它会拆分表之外没有其他答案(我从未见过它不这样做)。我有两个问题:
有没有人见过只创建一个文件的情况?
有没有办法强制红移卸载到单个文件中?
当我将表从 amazon redshift 卸载到 S3 时,无论表有多小,它总是将表分成两部分。我已经阅读了有关卸载的 redshift 文档,但除了它说有时它会拆分表之外没有其他答案(我从未见过它不这样做)。我有两个问题:
有没有人见过只创建一个文件的情况?
有没有办法强制红移卸载到单个文件中?
Amazon recently added support for unloading to a single file by using PARALLEL OFF in the UNLOAD statement. Note that you still can end up with more than one file if it is bigger than 6.2GB.
自 2014 年 5 月 6 日起,UNLOAD
查询支持新PARALLEL
选项。如果您的数据小于 6.2 gigs(数据分为 6.2 GB 块),则传递PARALLEL OFF
将输出单个文件。
默认情况下,每个切片都会创建一个文件(如下说明)。有一种已知的解决方法——LIMIT
在最外层的查询中添加一个将强制领导节点处理整个响应——因此它只会创建一个文件。
SELECT * FROM (YOUR_QUERY) LIMIT 2147483647;
这仅在您的内部查询返回少于 2^31 - 1 条记录时才有效,因为LIMIT
子句采用无符号整数参数。
文件是如何创建的?http://docs.aws.amazon.com/redshift/latest/dg/t_Unloading_tables.html
Amazon Redshift 将 select 语句的结果拆分到一组文件中,每个节点切片一个或多个文件,以简化数据的并行重新加载。
所以现在我们知道每个切片至少创建一个文件。但什么是切片?http://docs.aws.amazon.com/redshift/latest/dg/t_Distributing_data.html
片的数量等于节点上的处理器内核数。例如,每个 XL 计算节点有两个切片,每个 8XL 计算节点有 16 个切片。
看起来最小切片数是2,当添加更多节点或更强大的节点时它会变得更大。