Provides conversion from athena outputs to strongly defined data models.
Getting started
Given the following data struct you define:
type MyModel struct {
ID int `athenaconv:"id"`
Name string `athenaconv:"name"`
SourceComputersCount int64 `athenaconv:"source_computers_count"`
SourceComputerExternalIDs []string `athenaconv:"source_computer_ids"`
SourceComputerNames []string `athenaconv:"source_computer_names"`
TestTimestamp time.Time `athenaconv:"test_timestamp"`
TestDate time.Time `athenaconv:"test_date"`
TestBool bool `athenaconv:"test_bool"`
}
And the following sql:
select
id,
name,
count(source_id) as source_computers_count,
array_agg(source_id) as source_computer_ids,
array_agg(source_name) as source_computer_names,
timestamp '2012-10-31 08:11:22' as test_timestamp,
date '2021-12-31' as test_date,
true as test_bool
from my_glue_catalog_table
group by id, name
You can convert your athena.GetQueryResultOutput
object to strongly-typed struct MyModel
by doing this:
mapper, err := athenaconv.NewMapperFor(reflect.TypeOf(MyModel{}))
if err != nil {
handleError(err)
}
var mapped []interface{}
mapped, err = mapper.FromAthenaResultSetV2(ctx, queryResultOutput.ResultSet)
if err != nil {
handleError(err)
}
for _, mappedItem := range mapped {
mappedItemModel := mappedItem.(*MyModel)
fmt.Printf("%+v\n", *mappedItemModel)
}
Supported data types
See conversion.go in this repo and supported data types in athena for more details.
Athena data type | Go data type | Comments |
---|---|---|
varchar | string | |
boolean | bool | |
integer | int/int32 | |
bigint | int64 | |
timestamp | time.Time | |
date | time.Time | |
array | []string | Individual items within array should not contain comma |
other data types | string | Other data types currently unsupported, default to string (no conversion) |
Supported AWS SDK version
Roadmap / items to review
- Add more data type support in conversion.go
- Review usage of logging (best practice for logging in golang packages)