Как избежать запроса AWS Athena CTAS на создание небольших файлов? - PullRequest
0 голосов
/ 27 февраля 2019

Я не могу понять, что не так с моим запросом CTAS, он разбивает данные на более мелкие файлы, сохраняя их внутри раздела, даже если я не упомянул ни одного столбца с разбивкой.Есть ли способ избежать этих небольших файлов и сохранить их как один файл на раздел, так как файлы размером менее 128 МБ вызовут дополнительные издержки?

CREATE TABLE sampledb.yellow_trip_data_parquet
WITH(
    format = 'PARQUET'
    parquet_compression = 'GZIP',
    external_location='s3://mybucket/Athena/tables/parquet/'
    partitioned_by=ARRAY['year','month']
)
AS SELECT
    VendorID,
    tpep_pickup_datetime,
    tpep_dropoff_datetime,
    passenger_count,
    trip_distance,
    RatecodeID,
    store_and_fwd_flag,
    PULocationID,
    DOLocationID,
    payment_type,
    fare_amount,
    extra,
    mta_tax,
    tip_amount,
    tolls_amount,
    improvement_surcharge,
    total_amount,
    date_format(date_parse(tpep_pickup_datetime,'%Y-%c-%d %k:%i:%s'),'%Y')  AS year,
    date_format(date_parse(tpep_pickup_datetime,'%Y-%c-%d %k:%i:%s'),'%c')  AS month
FROM sampleDB.yellow_trip_data_raw;

image from my partition

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Мне удалось решить эту проблему, создав столбец с разбивкой по столбцам month_a.Ниже приведен код

CREATE TABLE sampledb.yellow_trip_data_avro
WITH (
    format = 'AVRO',
    external_location='s3://a4189e1npss3001/Athena/internal_tables/avro/',
    partitioned_by=ARRAY['year','month'],
    bucketed_by=ARRAY['month_a'],
    bucket_count=12
) AS SELECT
    VendorID,
    tpep_pickup_datetime,
    tpep_dropoff_datetime,
    passenger_count,
    trip_distance,
    RatecodeID,
    store_and_fwd_flag,
    PULocationID,
    DOLocationID,
    payment_type,
    fare_amount,
    extra,
    mta_tax,
    tip_amount,
    tolls_amount,
    improvement_surcharge,
    total_amount,
    date_format(date_parse(tpep_pickup_datetime, '%Y-%c-%d %k:%i:%s'),'%c') AS month_a,
    date_format(date_parse(tpep_pickup_datetime, '%Y-%c-%d %k:%i:%s'),'%Y') AS year,
    date_format(date_parse(tpep_pickup_datetime, '%Y-%c-%d %k:%i:%s'),'%c') AS month
FROM sampleDB.yellow_trip_data_raw;
0 голосов
/ 27 февраля 2019

Athena - распределенная система, и она будет масштабировать выполнение вашего запроса с помощью некоторого ненаблюдаемого механизма.Похоже, он решил использовать пять рабочих для вашего запроса CTAS, что приведет к пяти файлам в каждом разделе.

Вы можете попытаться явно указать размер корзины, равный одному, но вы все равно можете получить несколько файлов, еслиЯ правильно помню.

...