У меня есть соединение odb c с Афиной, и я уже могу читать и получать данные. Например, я создал новую пустую таблицу в кусте, которая использует тот же мета-хранилище, что и s3 для Афины:
CREATE EXTERNAL TABLE IF NOT EXISTS adhoc.mtcars
(
mpg integer,
cyl integer,
disp integer,
hp integer,
drat integer,
wt integer,
qsec integer,
vs integer,
am integer,
gear integer,
carb integer)
partitioned by (year string, month string, day string)
stored as orc
location 's3://ourco-emr/tables/adhoc.db/mtcars';
Я могу прочитать эту новую пустую таблицу, используя DBI :: dbReadTable:
con <- dbConnect(odbc(), "Athena")
dbReadTable(con, DBI::Id(schema = "adhoc", table = "mtcars"))
Возвращает:
[1] mpg cyl disp hp drat wt qsec vs am gear carb year month day
<0 rows> (or 0-length row.names)
Итак, пустая таблица четко видна и видима.
Обратите внимание на приведенное выше в таблице создания улья:
location 's3://ourco-emr/tables/adhoc.db/mtcars'
данные для этой таблицы должны храниться в s3 в этом месте.
Я пытался записать mtcars в это место, используя dbWriteTable:
dbWriteTable(conn = con,
name = "tables/adhoc.db/mtcars",
value = mtcars,
overwrite = FALSE,
append = TRUE,
file.type = "orc",
partition = c(year = "2020", month = "02", day = "01"),
s3.location = "s3://ourco-emr/tables/adhoc.db/mtcars/mtcars")
Это, кажется, работает в течение нескольких секунд, прежде чем вернуть это сообщение об ошибке:
Ошибка: nanodbc / nanodb c. cpp: 1617: 00000: [Симба] [Афина] (1040) Произошла ошибка в клиенте AWS Athena , Ошибка Афины: 130, код ответа HTTP: 400, имя исключения: InvalidRequestException, сообщение об ошибке: строка 1:14: нет подходящей альтернативы при вводе таблиц CREATE TABLE / adho c .db / mtcars "'[ИД выполнения: ] 'CREATE TABLE "таблицы / adho c .db / mtcars" ("row_names" VARCHAR (255), "mpg" ДВОЙНАЯ ТОЧНОСТЬ, "cyl" ДВОЙНАЯ ТОЧНОСТЬ, "disp" ДВОЙНАЯ ТОЧНОСТЬ, "hp" ДВОЙНАЯ ТОЧНОСТЬ, " drat "ДВОЙНАЯ ТОЧНОСТЬ, WT" ДВОЙНАЯ ТОЧНОСТЬ ", qse c" ДВОЙНАЯ ТОЧНОСТЬ ", против" ДВОЙНАЯ ТОЧНОСТЬ ", am" ДВОЙНАЯ ТОЧНОСТЬ, "шестерня", ДВОЙНАЯ ТОЧНОСТЬ, "карбюратор" ДВОЙНАЯ ТОЧНОСТЬ)
Похоже, dbi пытается создать новую таблицу, в которую я просто хочу добавить существующую, хотя и пустую, созданную ранее.
Как я могу отправить фрейм данных на s3, используя DBI?