AWSTemplateFormatVersion: 2010-09-09
Description: Create Glue catalog tables for Neptune Athena Connector sample
Parameters:
GlueDatabaseNameLPG:
Type: String
Default: graph-database
GlueDatabaseNameRDF:
Type: String
Default: graph-database-rdf
Resources:
GlueDatabaseLPG:
Type: "AWS::Glue::Database"
Properties:
DatabaseInput:
Name: !Ref GlueDatabaseNameLPG
Description: nep_athena_connector_db
CatalogId: !Ref AWS::AccountId
GlueDatabaseRDF:
Type: "AWS::Glue::Database"
Properties:
DatabaseInput:
Name: !Ref GlueDatabaseNameRDF
Description: nep_athena_connector_db
CatalogId: !Ref AWS::AccountId
AirportRDF:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseRDF
Properties:
TableInput:
Description: "airport rdf"
TableType: "EXTERNAL_TABLE"
Parameters: {
"prefix_prop": "http://kelvinlawrence.net/air-routes/datatypeProperty/",
"prefix_class": "http://kelvinlawrence.net/air-routes/class/",
"componenttype": "rdf",
"querymode": "class",
"classuri": "class:Airport",
"subject": "id",
"strip_uri": "true",
"preds_prefix": "prop",
"separatorChar": ",",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: id
Type: string
- Name: type
Type: string
- Name: code
Type: string
- Name: icao
Type: string
- Name: desc
Type: string
- Name: region
Type: string
- Name: runways
Type: int
- Name: longest
Type: int
- Name: elev
Type: int
- Name: country
Type: string
- Name: city
Type: string
- Name: lat
Type: double
- Name: lon
Type: double
Compressed: False
Name: airport_rdf
DatabaseName: !Ref GlueDatabaseNameRDF
CatalogId: !Ref AWS::AccountId
RouteRDF:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseRDF
Properties:
TableInput:
Description: "route rdf"
TableType: "EXTERNAL_TABLE"
Parameters: {
"separatorChar": ",",
"componenttype": "rdf",
"querymode": "sparql",
"sparql": "select ?incode ?outcode ?dist where { ?resin op:route ?resout . GRAPH ?route { ?resin op:route ?resout } . ?route prop:dist ?dist . ?resin prop:code ?incode .?resout prop:code ?outcode . } ",
"strip_uri": "true",
"prefix_prop": "http://kelvinlawrence.net/air-routes/datatypeProperty/",
"prefix_op": "http://kelvinlawrence.net/air-routes/objectProperty/",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: incode
Type: string
- Name: outcode
Type: string
- Name: dist
Type: int
Compressed: False
Name: route_rdf
DatabaseName: !Ref GlueDatabaseNameRDF
CatalogId: !Ref AWS::AccountId
RouteRDFNoPfx:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseRDF
Properties:
TableInput:
Description: route route_rdf_nopfx
TableType: "EXTERNAL_TABLE"
Parameters: {
"separatorChar": ",",
"componenttype": "rdf",
"querymode": "sparql",
"sparql": "PREFIX prop: PREFIX op: select ?incode ?outcode ?dist where { ?resin op:route ?resout . GRAPH ?route { ?resin op:route ?resout } . ?route prop:dist ?dist . ?resin prop:code ?incode .?resout prop:code ?outcode . } ",
"strip_uri": "true",
"prefix_prop": "http://kelvinlawrence.net/air-routes/datatypeProperty/",
"prefix_op": "http://kelvinlawrence.net/air-routes/objectProperty/",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: incode
Type: string
- Name: outcode
Type: string
- Name: dist
Type: int
Compressed: False
Name: route_rdf_nopfx
DatabaseName: !Ref GlueDatabaseNameRDF
CatalogId: !Ref AWS::AccountId
Airport:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseLPG
Properties:
TableInput:
Description: "airport"
TableType: "EXTERNAL_TABLE"
Parameters: {
"componenttype": "vertex",
"separatorChar": ",",
"glabel":"airport",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: id
Type: string
- Name: type
Type: string
- Name: code
Type: string
- Name: icao
Type: string
- Name: desc
Type: string
- Name: region
Type: string
- Name: runways
Type: int
- Name: longest
Type: int
- Name: elev
Type: int
- Name: country
Type: string
- Name: city
Type: string
- Name: lat
Type: double
- Name: lon
Type: double
Compressed: False
Name: airport
DatabaseName: !Ref GlueDatabaseNameLPG
CatalogId: !Ref AWS::AccountId
Country:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseLPG
Properties:
TableInput:
Description: "country"
TableType: "EXTERNAL_TABLE"
Parameters: {
"componenttype": "vertex",
"separatorChar": ",",
"glabel":"country",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: id
Type: string
- Name: code
Type: string
- Name: desc
Type: string
Compressed: False
Name: country
DatabaseName: !Ref GlueDatabaseNameLPG
CatalogId: !Ref AWS::AccountId
Continent:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseLPG
Properties:
TableInput:
Description: "continent"
TableType: "EXTERNAL_TABLE"
Parameters: {
"componenttype": "vertex",
"separatorChar": ",",
"glabel":"continent",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: id
Type: string
- Name: code
Type: string
- Name: desc
Type: string
Compressed: False
Name: continent
DatabaseName: !Ref GlueDatabaseNameLPG
CatalogId: !Ref AWS::AccountId
Route:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseLPG
Properties:
TableInput:
Description: "route"
TableType: "EXTERNAL_TABLE"
Parameters: {
"separatorChar": ",",
"componenttype": "edge",
"glabel": "route",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: id
Type: string
- Name: out
Type: string
- Name: in
Type: string
- Name: dist
Type: int
Compressed: False
Name: route
DatabaseName: !Ref GlueDatabaseNameLPG
CatalogId: !Ref AWS::AccountId
CustomView:
Type: "AWS::Glue::Table"
DependsOn: GlueDatabaseLPG
Properties:
TableInput:
Description: "custom view"
TableType: "EXTERNAL_TABLE"
Parameters: {
"separatorChar": ",",
"componenttype": "view",
"query": "g.V().hasLabel(\"airport\").as(\"source\").out(\"route\").as(\"destination\").select(\"source\",\"destination\").by(\"code\").limit(10)",
}
StorageDescriptor:
StoredAsSubDirectories: False
Columns:
- Name: source
Type: string
- Name: destination
Type: string
Compressed: False
Name: customairport
DatabaseName: !Ref GlueDatabaseNameLPG
CatalogId: !Ref AWS::AccountId
Outputs:
GlueDatabaseLPG:
Value: !Ref GlueDatabaseLPG
GlueDatabaseRDF:
Value: !Ref GlueDatabaseRDF