amazon-web-services - Redshift卸载的文件名

标签 amazon-web-services amazon-redshift

我正在运行 Redshift 卸载命令,但没有得到我想要的名称。命令是:

UNLOAD ('select * from foo')
                 TO 's3://mybucket/foo'
                 CREDENTIALS 'xxxxxx'
                 GZIP
                 NULL AS 'NULL'
                 DELIMITER as '\t'
                 allowoverwrite
                 parallel off

结果是 mybucket/foo-000.gz。我不想要 切片编号 作为文件名的结尾(如果能彻底去掉就好了),我想加一个文件扩展名 在文件名的末尾。我想看到以下任一情况:
  • mybucket/foo-000.txt.gz
  • mybucket/foo.txt.gz

  • 有没有办法做到这一点(无需编写 lambda 后处理重命名脚本)?

    最佳答案

    TL;博士
    没有。

    说明:
    正如 Amazon Redshift UNLOAD 中所说的文档,如果你不想把它分成几部分,你可以使用 PARALLEL FALSE ,但强烈建议启用它。即便如此,该文件将始终包含 000.[EXT]后缀(当 [EXT] 仅在启用压缩时才存在),因为 Redshift 可以输出的文件大小有限制,如 documentation 中所述:

    By default, UNLOAD writes data in parallel to multiple files, according to the number of slices in the cluster. The default option is ON or TRUE. If PARALLEL is OFF or FALSE, UNLOAD writes to one or more data files serially, sorted absolutely according to the ORDER BY clause, if one is used. The maximum size for a data file is 6.2 GB. So, for example, if you unload 13.4 GB of data, UNLOAD creates the following three files.

    s3://mybucket/key000    6.2 GB 
    s3://mybucket/key001    6.2 GB
    s3://mybucket/key002    1.0 GB
    


    因此,它总是至少添加前缀 000 ,因为 Redshift 首先不知道他要输出的文件大小,所以他添加了这个后缀,以防输出达到 6.2 GB 的大小。

    如果你问为什么使用PARALLEL FALSE不推荐,我会尝试从几个方面来解释:
  • 最重要的原因是 Redshift 集群的设计方式。每个集群至少包含 2 个服务器,其中一个是领导节点,其余是数据节点。领导节点的目的是控制数据节点,它持有必要的信息来处理 Redshift 中的所有数据,无论是读还是写。
    当您从 Redshift 卸载数据时,标志 PARALLELTRUE ,它将创建至少 X 个文件,当 X 是您首先选择构建 Redshift 集群的节点数时。这意味着,数据是直接从数据节点本身写入的,这要快得多,因为它是并行执行的并且跳过领导节点。
    当您决定关闭此标志时,所有数据将从所有数据节点收集到单个节点,即领导节点,因为它需要重新组织要输出的行的排序,并在需要时将其压缩为单个流。此操作会导致您的数据写入速度慢得多。
  • 此外,这会显着降低 Redshift 集群在读取和写入数据方面的性能,因为一切(读取和写入查询)都经过领导节点,如上所述,当领导节点过载时,性能会有所下降问题。
    查询COPYUNLOAD直接使用数据节点,因此,它们的行为方式与您使用 PARALLEL TRUE 的方式几乎相同。 .相反,查询如 SELECT , UPDATE , DELETEINSERT , 由领导节点处理,这就是为什么它们会受到领导节点负载的影响。
  • 关于amazon-web-services - Redshift卸载的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39255954/

    相关文章:

    image - 操作系统 : How to easily view thumbnails of lots of images in an S3 bucket

    amazon-web-services - 如何使用 CloudFormation 将卷附加和装载到 EC2 实例

    amazon-web-services - 如何使用 Redshift DATEDIFF?

    sql - 有没有办法在 Redshift 中的表之间复制或克隆授权?

    sql - 获取postgres中json数据数组列中元素的平均值

    pandas - Python-将值从一个数据帧传递到另一个查询

    node.js - 使用 SES node.js 发送电子邮件

    php - Laravel 9 getDriver()、getAdapter() 和 getClient() 方法

    amazon-web-services - 不使用EKS时,能否在AWS的Kubernetes集群上使用AWS VPC CNI

    java - AWS Redshift : libraries for mock/mirror redshift