Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何使用外部位置为csv.gz的CTA_Amazon Web Services_Amazon S3_Amazon Athena - Fatal编程技术网

Amazon web services 如何使用外部位置为csv.gz的CTA

Amazon web services 如何使用外部位置为csv.gz的CTA,amazon-web-services,amazon-s3,amazon-athena,Amazon Web Services,Amazon S3,Amazon Athena,我有近90 GB的数据需要上传到具有特定命名约定的S3存储桶 如果我将CTAS查询与external_location一起使用,它不会为我提供为文件指定特定名称的选项。此外,使用格式csv不是一个选项 创建表ctas\u csv\u分区 与( 格式='TEXTFILE', 外部位置='s3://my\u athena\u results/ctas\u csv\u partitioned/', 分区单位=数组['key1'] ) 选择名称1、地址1、注释1和键1 来自表1 我想上传输出文件,使

我有近90 GB的数据需要上传到具有特定命名约定的S3存储桶

如果我将CTAS查询与
external_location
一起使用,它不会为我提供为文件指定特定名称的选项。此外,使用
格式
csv不是一个选项

创建表ctas\u csv\u分区
与(
格式='TEXTFILE',
外部位置='s3://my\u athena\u results/ctas\u csv\u partitioned/',
分区单位=数组['key1']
) 
选择名称1、地址1、注释1和键1
来自表1
我想上传输出文件,使其看起来像
sample\u file.csv.gz


最简单的方法是什么?

不幸的是,单凭Athena无法指定文件名或扩展名。此外,使用CTAS查询创建的文件根本没有任何文件扩展名。但是,您可以直接使用CLI for S3重命名文件

aws s3 ls s3://path/to/external/location/--recursive\ |awk'{cmd=“aws s3 mv s3://path/to/external/location/“$4”s3://path/to/external/location/“$4.csv.gz”;system(cmd)}” 只要试过这个片段,一切都很好。但是,有时也会创建一个空文件
s3://path/to/external/location/.csv.gz
注意我没有为
aws s3 mv
包含
--recursive
选项,因为它也会产生奇怪的结果

格式
字段而言,只需将
字段_delimiter=','
添加到
WITH
子句中即可

创建表ctas\u csv\u分区
与(
格式='TEXTFILE',
字段_分隔符=','
外部位置='s3://my\u athena\u results/ctas\u csv\u partitioned/',
分区单位=数组['key1']
) 
选择名称1、地址1、注释1和键1
来自表1

CSV不仅仅有一个字段分隔符。有没有办法指定引用字符或换行符?