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

我编写了一个脚本,该脚本将在 Athena 上执行查询并将结果文件加载到指定的 aws boto S3 位置。


import boto3

def 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 response


query = """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。


白衣染霜花
浏览 270回答 2
2回答

慕婉清6462132

2·1您需要使用 CTAS:CREATE TABLE db.table_nameWITH (    external_location = 's3://yourbucket/path/table_name',    format = 'PARQUET',    parquet_compression = 'GZIP',    partitioned_by = ARRAY['dt'])ASSELECT    ...;这样选择的结果将保存为 Parquet。https://docs.aws.amazon.com/athena/latest/ug/ctas-examples.htmlhttps://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 加密选项。

慕田峪4524236

 建议我可以使用 INSERT INTO 查询来做到这一点。https://aws.amazon.com/fr/about-aws/whats-new/2019/09/amazon-athena-adds-support-inserting-data-into-table-results-of-select-query/https://docs.aws.amazon.com/fr_fr/athena/latest/ug/insert-into.html
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python