Skip to content

Instantly share code, notes, and snippets.

@MichaelChirico
Created July 8, 2020 03:44
Show Gist options
  • Save MichaelChirico/f5e09ab9f5f437bb0286e8a42941a3e1 to your computer and use it in GitHub Desktop.
Save MichaelChirico/f5e09ab9f5f437bb0286e8a42941a3e1 to your computer and use it in GitHub Desktop.
presto REST API & output
# NB: not fully reproducible since I've had to censor some stuff / obscure credentialling
library(data.table)
mtcars = cbind(car = rownames(mtcars), mtcars)
mtcars = lapply(mtcars, function(x) if (is.character(x)) sQuote(x, "'") else x)
colnames = toString(names(mtcars))
mtcars$sep = ', '
# \n\t are bells&whistles to make cat(query) look nicer
mtcars$collapse = '),\n\t('
query = sprintf("select * from (values\n\t(%s)\n)\nt(%s)", do.call(paste, mtcars), colnames)
presto_rest_endpoint = file.path('/path/to/rest', 'statement')
result = httr::POST(
presto_rest_endpoint, body=query
# , httr::add_headers('X-Presto-Catalog'= ...), httr::authenticate(..., type='basic')
)
nextURI = httr::content(result)$nextUri
# iterate until the data is returned
while (TRUE) {
result = httr::GET(
nextURI
# same headers & auth as above
)
if (!is.null(httr::content(result)$data)) break
nextURI = httr::content(result)$nextUri
}
rawToChar(result$content)
# {"id":"XX_QUERY_ID_XX","infoUri":"/path/to/Presto/ui/query.html?XX_QUERY_ID_XX","columns":[{"name":"car","type":"varchar(19)","typeSignature":{"rawType":"varchar","typeArguments":[],"literalArguments":[],"arguments":[{"kind":"LONG_LITERAL","value":19}]}},{"name":"mpg","type":"double","typeSignature":{"rawType":"double","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"cyl","type":"integer","typeSignature":{"rawType":"integer","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"disp","type":"double","typeSignature":{"rawType":"double","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"hp","type":"integer","typeSignature":{"rawType":"integer","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"drat","type":"double","typeSignature":{"rawType":"double","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"wt","type":"double","typeSignature":{"rawType":"double","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"qsec","type":"double","typeSignature":{"rawType":"double","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"vs","type":"integer","typeSignature":{"rawType":"integer","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"am","type":"integer","typeSignature":{"rawType":"integer","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"gear","type":"integer","typeSignature":{"rawType":"integer","typeArguments":[],"literalArguments":[],"arguments":[]}},{"name":"carb","type":"integer","typeSignature":{"rawType":"integer","typeArguments":[],"literalArguments":[],"arguments":[]}}],"data":[["Mazda RX4",21.0,6,160.0,110,3.9,2.62,16.46,0,1,4,4],["Mazda RX4 Wag",21.0,6,160.0,110,3.9,2.875,17.02,0,1,4,4],["Datsun 710",22.8,4,108.0,93,3.85,2.32,18.61,1,1,4,1],["Hornet 4 Drive",21.4,6,258.0,110,3.08,3.215,19.44,1,0,3,1],["Hornet Sportabout",18.7,8,360.0,175,3.15,3.44,17.02,0,0,3,2],["Valiant",18.1,6,225.0,105,2.76,3.46,20.22,1,0,3,1],["Duster 360",14.3,8,360.0,245,3.21,3.57,15.84,0,0,3,4],["Merc 240D",24.4,4,146.7,62,3.69,3.19,20.0,1,0,4,2],["Merc 230",22.8,4,140.8,95,3.92,3.15,22.9,1,0,4,2],["Merc 280",19.2,6,167.6,123,3.92,3.44,18.3,1,0,4,4],["Merc 280C",17.8,6,167.6,123,3.92,3.44,18.9,1,0,4,4],["Merc 450SE",16.4,8,275.8,180,3.07,4.07,17.4,0,0,3,3],["Merc 450SL",17.3,8,275.8,180,3.07,3.73,17.6,0,0,3,3],["Merc 450SLC",15.2,8,275.8,180,3.07,3.78,18.0,0,0,3,3],["Cadillac Fleetwood",10.4,8,472.0,205,2.93,5.25,17.98,0,0,3,4],["Lincoln Continental",10.4,8,460.0,215,3.0,5.424,17.82,0,0,3,4],["Chrysler Imperial",14.7,8,440.0,230,3.23,5.345,17.42,0,0,3,4],["Fiat 128",32.4,4,78.7,66,4.08,2.2,19.47,1,1,4,1],["Honda Civic",30.4,4,75.7,52,4.93,1.615,18.52,1,1,4,2],["Toyota Corolla",33.9,4,71.1,65,4.22,1.835,19.9,1,1,4,1],["Toyota Corona",21.5,4,120.1,97,3.7,2.465,20.01,1,0,3,1],["Dodge Challenger",15.5,8,318.0,150,2.76,3.52,16.87,0,0,3,2],["AMC Javelin",15.2,8,304.0,150,3.15,3.435,17.3,0,0,3,2],["Camaro Z28",13.3,8,350.0,245,3.73,3.84,15.41,0,0,3,4],["Pontiac Firebird",19.2,8,400.0,175,3.08,3.845,17.05,0,0,3,2],["Fiat X1-9",27.3,4,79.0,66,4.08,1.935,18.9,1,1,4,1],["Porsche 914-2",26.0,4,120.3,91,4.43,2.14,16.7,0,1,5,2],["Lotus Europa",30.4,4,95.1,113,3.77,1.513,16.9,1,1,5,2],["Ford Pantera L",15.8,8,351.0,264,4.22,3.17,14.5,0,1,5,4],["Ferrari Dino",19.7,6,145.0,175,3.62,2.77,15.5,0,1,5,6],["Maserati Bora",15.0,8,301.0,335,3.54,3.57,14.6,0,1,5,8],["Volvo 142E",21.4,4,121.0,109,4.11,2.78,18.6,1,1,4,2]],"stats":{"state":"FINISHED","queued":false,"scheduled":true,"nodes":1,"totalSplits":1,"queuedSplits":0,"runningSplits":0,"completedSplits":1,"userTimeMillis":0,"cpuTimeMillis":1,"wallTimeMillis":1,"queuedTimeMillis":237,"elapsedTimeMillis":282,"processedRows":0,"processedBytes":0,"peakMemoryBytes":0,"rootStage":{"stageId":"0","state":"FINISHED","done":true,"nodes":1,"totalSplits":1,"queuedSplits":0,"runningSplits":0,"completedSplits":1,"userTimeMillis":0,"cpuTimeMillis":1,"wallTimeMillis":1,"processedRows":32,"processedBytes":2938,"subStages":[]},"progressPercentage":100.0},"warnings":[],"cpuTime":0,"bytesReadFromSource":0}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment