为了账号安全,请及时绑定邮箱和手机立即绑定

使用 aws boto 在 S3 上将文件从 csv 转换为 parquet

使用 aws boto 在 S3 上将文件从 csv 转换为 parquet

白衣染霜花 2022-06-22 21:09:11
我编写了一个脚本,该脚本将在 Athena 上执行查询并将结果文件加载到指定的 aws boto S3 位置。import boto3def run_query(query, database, s3_output):    client = boto3.client('athena', region_name='my-region')    response = client.start_query_execution(        QueryString=query,        QueryExecutionContext={            'Database': database            },        ResultConfiguration={            'OutputLocation': s3_output,            }        )    print('Execution ID: ' + response['QueryExecutionId'])    return responsequery = """select ..."""database = 'db_name'path_template = 's3://bucket_name/path/version={}'current_time =  str(datetime.datetime.now())result = run_query(query, database, path_template.format(current_time))它确实有效,但问题是我有一个 csv 文件作为指定位置。但我不想要一个 csv 文件,我想要一个镶木地板文件。我设法获得我想要的唯一方法是下载文件,用熊猫将其转换为镶木地板以重新上传。很烦人,我不能在不获取文件的情况下直接转换。任何人有另一种方式建议?我不想使用 CTAS。
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

2·1您需要使用 CTAS:


CREATE TABLE db.table_name

WITH (

    external_location = 's3://yourbucket/path/table_name',

    format = 'PARQUET',

    parquet_compression = 'GZIP',

    partitioned_by = ARRAY['dt']

)

AS

SELECT

    ...

;

这样选择的结果将保存为 Parquet。


https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.html


https://docs.aws.amazon.com/athena/latest/ug/ctas.html


使用 CTAS 查询:


一步从查询结果创建表,无需重复查询原始数据集。这使得处理原始数据集变得更加容易。

将查询结果转换为其他存储格式,例如 Parquet 和 ORC。这提高了查询性能并降低了 Athena 中的查询成本。有关信息,请参阅列存储格式。

创建仅包含您需要的数据的现有表的副本。

更新(2019.10):


AWS 刚刚为 Athena 发布了 INSERT INTO。


https://docs.aws.amazon.com/en_pv/athena/latest/ug/insert-into.html


基于在源表上运行的 SELECT 查询语句或基于作为语句的一部分提供的一组 VALUES 将新行插入目标表。当源表基于一种格式(如 CSV 或 JSON)的基础数据,而目标表基于另一种格式(如 Parquet 或 ORC)时,您可以使用 INSERT INTO 查询将所选数据转换为目标表的格式.


有一些限制:


分桶表不支持 INSERT INTO。有关更多信息,请参阅分桶与分区。

在对包含在 Amazon S3 中加密的基础数据的表运行 INSERT 查询时,INSERT 查询写入的输出文件默认情况下不会加密。如果您要插入包含加密数据的表,我们建议您加密 INSERT 查询结果。有关使用控制台加密查询结果的更多信息,请参阅加密存储在 Amazon S3 中的查询结果。要使用 AWS CLI 或 Athena API 启用加密,请使用 StartQueryExecution 操作的 EncryptionConfiguration 属性根据您的要求指定 Amazon S3 加密选项。


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信