Я пытаюсь скопировать результаты своих данных в базу данных Impala. Но я получаю ошибку при этом.
library(RJDBC)
library(implyr)
drv <- JDBC("com.cloudera.impala.jdbc41.Driver","/User/ImpalaJDBC41.jar",identifier.quote="`")
conn <- dbConnect(drv, "username/password")
RJDBC::dbWriteTable(conn, 'default.segments', df)
Я получаю ошибку ниже.
Error in .local(conn, statement, ...) :
execute JDBC update query failed in dbSendUpdate ([Cloudera][ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000, errorMessage:AnalysisException: Syntax error in line 1:
...ents (id DOUBLE PRECISION,eventdate VARCH...
^
Encountered: IDENTIFIER
Expected: BLOCK_SIZE, COMMENT, COMPRESSION, DEFAULT, ENCODING, INTERMEDIATE, LOCATION, NOT, NULL, PRIMARY, COMMA
CAUSED BY: Exception: Syntax error
), Query: CREATE TABLE default.segments (id DOUBLE
PRECISION,eventdate VARCHAR(255),segment INTEGER).)
Предположим, что с типами данных что-то не так. Я создал таблицу, указав типы данных, а затем вставив значения в базу данных.
RJDBC::dbSendUpdate(conn, paste("CREATE TABLE default.segments (id bigint,eventdate timestamp, segment bigint)",";"))
state1 <- paste0("INSERT INTO default.segments VALUES (", apply(df, 1, function(x) paste(x, collapse = ",")), ")" )
RJDBC::dbSendUpdate(conn, state1)
и это также дает мне ошибку, связанную с типами данных.
Error in .local(conn, statement, ...) :
execute JDBC update query failed in dbSendUpdate ([Cloudera]
[ImpalaJDBCDriver](500051) ERROR processing query/statement. Error Code: 0,
SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:HY000,
errorMessage:AnalysisException: Target table
'default.segments' is incompatible with source expressions.
Expression '2016 - 5 - 29' (type: BIGINT) is not compatible with column
'eventdate' (type: TIMESTAMP)
), Query: INSERT INTO default.segments VALUES ( 3,2016-
05-29, 79).)
ниже - структура моего фрейма данных.
> str(df)
'data.frame': 19065 obs. of 3 variables:
$ id: num 3 3 3 69 102 102 102 102 102 102 ...
$ eventdate: Date, format: "2016-05-29" ...
$ segment: int 79 76 76 18 11 15 7 11 7 11 ...
В последней ошибке написано Expression '2016 - 5 - 29' (type: BIGINT) is not compatible with column
'eventdate' (type: TIMESTAMP)
, но мой столбец даты в кадре данных имеет формат Date
. Тогда в чем может быть проблема? Может кто-нибудь, пожалуйста, помогите.