AWS Склеить таблицы разделов для данных, хранящихся в нескольких корзинах - PullRequest
1 голос
/ 24 января 2020

У меня есть таблица Glue с 10 тысячами разделов со следующими ключами разделов:

"PartitionKeys": [
    {
        "Name": "thing",
        "Type": "string"
    },
    {
        "Name": "year",
        "Type": "string"
    },
    {
        "Name": "date",
        "Type": "string"
    }
]

В каждом разделе разделов в S3 есть 168 файлов разных размеров (7 файлов паркета в час в день) .

При больших запросах Athena я получаю сообщение об ошибке

Service: Amazon S3; Status Code: 503; Error Code: 503 Slow Down

Когда я просматриваю подробные метрики на S3 Get Requests, я вижу большие всплески в запросах GET и HEAD в корзине. .

В настоящее время я использую одну корзину S3 для хранения данных

Могу ли я хранить свои файлы паркета в нескольких корзинах и обновлять разделы таблицы Glue, чтобы использовать местоположения в нескольких корзинах, чтобы что запросы Athena распределены среди большего количества сегментов.

Что-то вроде (в boto3):

import boto3

glue = boto3.client('glue')

glue.batch_create_partition(
    DatabaseName='myDatabase',
    TableName='myTable',
    PartitionInputList=[
        {
            "Values": [
                "thing-1",
                "2020",
                "2020-01-24"
            ],
            "StorageDescriptor": {
                # Note S3 bucket
                "Location": "s3://my-data-bucket-1/thing=thing-1/year=2020/date=2020-01-24",
                # Ignoring other requred items in StorageDescriptor
            }
        },
        {
            "Values": [
                "thing-2",  # Different thing
                "2020",
                "2020-01-24"
            ],
            "StorageDescriptor": {
                # Different S3 bucket
                "Location": "s3://my-other-data-bucket-2/thing=thing-2/year=2020/date=2020-01-24",
                # Ignoring other requred items in StorageDescriptor
            }
        }
        # Ignoring other required items in PartitionInputList
    ]
)
...