При работе сканера клея AWS он не распознает столбцы меток времени.
Я правильно отформатировал метки времени ISO8601 в своем файле CSV. Сначала я ожидал, что Glue автоматически классифицирует их как метки времени, а это не так.
Я также попробовал пользовательский классификатор меток времени по этой ссылке https://docs.aws.amazon.com/glue/latest/dg/custom-classifier.html
Вот как выглядит мой классификатор
![grok classifier](https://i.imgur.com/sRlDAXV.png)
Это также неправильно классифицирует мои метки времени.
Я поместил в отладчик grok (https://grokdebug.herokuapp.com/) мои данные, например
id,iso_8601_now,iso_8601_yesterday
0,2019-05-16T22:47:33.409056,2019-05-15T22:47:33.409056
1,2019-05-16T22:47:33.409056,2019-05-15T22:47:33.409056
и совпадает на обоих
* *% Тысяча двадцать-один {TIMESTAMP_ISO8601: временная метка}
% {YEAR} -% {MONTHNUM} -% {MONTHDAY} [T]% {HOUR}:?% {MINUTE} (? ::?% {SECOND})?% {ISO8601_TIMEZONE}?
import csv
from datetime import datetime, timedelta
with open("timestamp_test.csv", 'w', newline='') as f:
w = csv.writer(f, delimiter=',')
w.writerow(["id", "iso_8601_now", "iso_8601_yesterday"])
for i in range(1000):
w.writerow([i, datetime.utcnow().isoformat(), (datetime.utcnow() - timedelta(days=1)).isoformat()])
Я ожидаю, что клей AWS автоматически классифицирует столбцы iso_8601 как метки времени. Даже при добавлении пользовательского классификатора grok он не классифицирует ни один из столбцов как метку времени.
Оба столбца классифицируются как строки.
Классификатор активен на гусеничном ходу
![classifier active](https://i.imgur.com/EZfukxv.png)
Вывод таблицы timestamp_test сканером
{
"StorageDescriptor": {
"cols": {
"FieldSchema": [
{
"name": "id",
"type": "bigint",
"comment": ""
},
{
"name": "iso_8601_now",
"type": "string",
"comment": ""
},
{
"name": "iso_8601_yesterday",
"type": "string",
"comment": ""
}
]
},
"location": "s3://REDACTED/_csv_timestamp_test/",
"inputFormat": "org.apache.hadoop.mapred.TextInputFormat",
"outputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
"compressed": "false",
"numBuckets": "-1",
"SerDeInfo": {
"name": "",
"serializationLib": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
"parameters": {
"field.delim": ","
}
},
"bucketCols": [],
"sortCols": [],
"parameters": {
"skip.header.line.count": "1",
"sizeKey": "58926",
"objectCount": "1",
"UPDATED_BY_CRAWLER": "REDACTED",
"CrawlerSchemaSerializerVersion": "1.0",
"recordCount": "1227",
"averageRecordSize": "48",
"CrawlerSchemaDeserializerVersion": "1.0",
"compressionType": "none",
"classification": "csv",
"columnsOrdered": "true",
"areColumnsQuoted": "false",
"delimiter": ",",
"typeOfData": "file"
},
"SkewedInfo": {},
"storedAsSubDirectories": "false"
},
"parameters": {
"skip.header.line.count": "1",
"sizeKey": "58926",
"objectCount": "1",
"UPDATED_BY_CRAWLER": "REDACTED",
"CrawlerSchemaSerializerVersion": "1.0",
"recordCount": "1227",
"averageRecordSize": "48",
"CrawlerSchemaDeserializerVersion": "1.0",
"compressionType": "none",
"classification": "csv",
"columnsOrdered": "true",
"areColumnsQuoted": "false",
"delimiter": ",",
"typeOfData": "file"
}
}