Access and Query Amazon Athena via DBI/JDBC
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

71 рядки
1.7KB

  1. list(
  2. "-7" = as.logical, # BIT
  3. "-6" = as.integer, # TINYINT
  4. "-5" = bit64::as.integer64, # BIGINT
  5. "-4" = as.character, # LONGVARBINARY
  6. "-3" = as.character, # VARBINARY
  7. "-2" = as.character, # BINARY
  8. "-1" = as.character, # LONGVARCHAR
  9. "0" = as.character, # NULL
  10. "1" = as.character, # CHAR
  11. "2" = as.double, # NUMERIC
  12. "3" = as.double, # DECIMAL
  13. "4" = as.integer, # INTEGER
  14. "5" = as.integer, # SMALLINT
  15. "6" = as.double, # FLOAT
  16. "7" = as.double, # REAL
  17. "8" = as.double, # DOUBLE
  18. "12" = as.character, # VARCHAR
  19. "16" = as.logical, # BOOLEAN
  20. "91" = as_date, # DATE
  21. "92" = as.character, # TIME
  22. "93" = as_posixct, # TIMESTAMP
  23. "1111" = as.character # OTHER
  24. ) -> .jdbc_converters
  25. #' AthenaJDBC
  26. #'
  27. #' @param conn Athena connection
  28. #' @param statement SQL statement
  29. #' @param ... unused
  30. #' @importFrom rJava .jcall
  31. #' @export
  32. setMethod(
  33. "dbGetQuery",
  34. signature(conn="AthenaConnection", statement="character"),
  35. definition = function(conn, statement, type_convert=FALSE, ...) {
  36. r <- dbSendQuery(conn, statement, ...)
  37. on.exit(.jcall(r@stat, "V", "close"))
  38. #message("dbGetQuery()")
  39. nms <- c()
  40. athena_type_convert <- list()
  41. cols <- .jcall(r@md, "I", "getColumnCount")
  42. for (i in 1:cols) {
  43. ct <- as.character(.jcall(r@md, "I", "getColumnType", i))
  44. athena_type_convert[[i]] <- .jdbc_converters[[ct]]
  45. nms <- c(nms, .jcall(r@md, "S", "getColumnLabel", i))
  46. }
  47. athena_type_convert <- set_names(athena_type_convert, nms)
  48. res <- fetch(r, -1, block = 1000)
  49. for (nm in names(athena_type_convert)) {
  50. res[[nm]] <- athena_type_convert[[nm]](res[[nm]])
  51. }
  52. class(res) <- c("tbl_df", "tbl", "data.frame")
  53. res
  54. }
  55. )