Установка количества знаков после запятой при обновлении схемы таблицы клея - PullRequest
1 голос
/ 08 марта 2020

Я пытаюсь обновить определение таблицы CSV, которая была создана сканером данных Glue. Один из столбцов содержит десятичные данные, которые в настоящее время классифицируются как двойная точность.

Я обнаружил, что когда я использую консоль для изменения схемы, я не могу установить дополнительные свойства, которые могут быть связаны с типы данных (например, если я выберу Десятичное, я получу Десятичное (10,0) без возможности изменить размер числа или количество знаков после запятой).

Какой рекомендуемый способ обновить это чтобы схема имела правильный тип данных, включая дополнительные свойства?

1 Ответ

1 голос
/ 11 марта 2020

У меня недавно возникли проблемы с установкой десятичной дроби в схеме таблицы склеивания. Мне пришлось создать мою схему с помощью AWS cli.

То, что у меня было немного по-другому, это был паркет на моем s3-датаке.

Следующая команда cli создает схему на основе на json:

aws glue create-table --database-name example_db --table-input file://example.json

Следующие example.json ссылаются на файлы паркета на s3://my-datalake/example/{dt}/, где dt - это раздел моей таблицы. И dec_col - это столбец с типом decimal(10,2):

{
    "Name": "example",
    "Retention": 0,
    "StorageDescriptor": {
        "Columns": [
          {
            "Name": "id",
            "Type": "int"
        },
        {
            "Name": "dec_col",
            "Type": "decimal(10,2)"
        }
        ],
        "Location": "s3://my-datalake/example/",
        "InputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat",
        "OutputFormat": "org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat",
        "Compressed": false,
        "NumberOfBuckets": 0,
        "SerdeInfo": {
            "SerializationLibrary": "org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe",
            "Parameters": {
                "serialization.format": "1"
            }
        },
        "SortColumns": [],
        "StoredAsSubDirectories": false
    },
    "PartitionKeys": [
        {
            "Name": "dt",
            "Type": "date"
        }
    ],
    "TableType": "EXTERNAL_TABLE",
    "Parameters": {
        "classification": "parquet"
    }
}

Таким образом, вы можете определить тип как decimal с масштабом и точностью, что вам и нужно.

...