[R-br] Erro de memória importando objeto pequeno de SQL

Pedro Emmanuel Alvarenga Americano do Brasil emmanuel.brasil em gmail.com
Segunda Julho 31 10:32:18 -03 2017


Cesar,

A função RODBC::sqlQuery não tem exemplo, mas já usei diversas vezes com
outros scripts e funciona. Esse problema está acontecendo somente no
exemplo dessa conexão em específico. Então estou entendendo a partir de
agora que  alguma configuração da conexão está pedindo pra reservar memória
mais do que o a máquina possui.

Pedro Brasil

Em 29 de julho de 2017 20:45, Cesar Rabak <cesar.rabak em gmail.com> escreveu:

> Pedro,
>
> Calloc é uma chamada "primitiva" para o R, uma função da biblioteca C e é
> uma função feita para "alocar" (reservar) memória e zerá-la.
>
> O estranho, para mim, é a tentativa do aplicativo de reservar *tanta* memória
> assim na chamada da função do R.
>
> Essa função sqlQuery() pode ser testada fazendo:
>
> > example(sqlQuery)
>
> ?
>
> Se o exemplo do próprio pacote funcionar, aí teremos que fazer uma busca
> para ver de onde vem esse comportamento.
>
> HTH
> --
> Cesar Rabak
>
>
>
>
> 2017-07-28 17:12 GMT-03:00 Pedro Emmanuel Alvarenga Americano do Brasil <
> emmanuel.brasil em gmail.com>:
>
>> Ei Cesar,
>>
>> Eu tenho pouco familiaridade com SQL, e o amigo da TI que tem e faz
>> manutenção do servidor diz que o erro é na minha estação com R. Eu acho que
>> não, mas não tenho certeza porque eu não sei ao certo o que quer dizer esse
>> erro. O que seria essa "Calloc"? É uma coisa natural do R?
>>
>> Abraço,
>>
>> Pedro Brasil
>>
>> Em 28 de julho de 2017 16:59, Cesar Rabak <cesar.rabak em gmail.com>
>> escreveu:
>>
>>> Pedro,
>>>
>>> Mesmo sem poder fazer uma tentativa, me parece que o erro é estranho
>>> demais para não ser notado: a chamada à primitiva da ling. C "calloc" está
>>> pedindo 200 Gbytes, que falha e me parece algo grande demais para um
>>> "default" da chamada a sqlQuery().
>>>
>>> HTH
>>>
>>>
>>> 2017-07-28 9:42 GMT-03:00 Pedro Emmanuel Alvarenga Americano do Brasil
>>> via R-br <r-br em listas.c3sl.ufpr.br>:
>>>
>>>> Amigos de R,
>>>>
>>>> Estou envolvido numa tarefa que importo um banco SQL de um servidor,
>>>> faço uma modelagem, salvo o modelo no SQL através de uma seriliazação, e
>>>> depois carrego esse modelo do SQL para fazer previsões em novos dados.
>>>>
>>>> Estou seguindo um exemplo disponível nessa página:
>>>> https://docs.microsoft.com/pt-br/sql/advanced-analytics/tuto
>>>> rials/walkthrough-deploy-and-use-the-model
>>>>
>>>> Sei que esse exemplo não é reproduzível porque depende da conexão com o
>>>> servidor e credenciais que não posso divulgar. Mas se alguem já passou por
>>>> esse problema poderia pelo menos indicar aonde está o problema que não
>>>> estou sabendo identificar? Acho que muito provavelmente seria uma
>>>> configuração do SQL no servidor...
>>>>
>>>> library(RODBC)
>>>>
>>>> # define database connection string
>>>> dbconn <- 'Driver={SQL Server};Server=BLABLABLA;Datab
>>>> ase=BLABLABLA;Trusted_Connection=yes;'
>>>>
>>>> # define a connection
>>>> conn <- odbcDriverConnect(connection = dbconn)
>>>>
>>>> # Estou fazendo o exemplo com o objeto LETTERS só pra ter certeza que é
>>>> um objeto pequeno e que não deveria ser um problema de memória do R.
>>>> > LETTERS
>>>>  [1] "A" "B" "C" "D" "E" "F" "G" "H" "I" "J" "K" "L" "M" "N" "O" "P"
>>>> "Q" "R" "S" "T" "U" "V" "W" "X"
>>>> [25] "Y" "Z"
>>>> > teste_pequeno <- serialize(LETTERS, connection = NULL)
>>>> > teste_pequeno <- paste(teste_pequeno, collapse = "")
>>>>
>>>> # o EXEC PersistModel faz
>>>> # insert into [tempo_permanencia_models] (model, [description]) values
>>>> (convert(varbinary(max), em m,2), @description)
>>>> # insere o modelo e uma descricao
>>>>
>>>> > p <- paste("EXEC PersistModel @m='", teste_pequeno,"', @description =
>>>> 'Teste de serialização objeto pequeno'", sep = "")
>>>> > sqlQuery(conn, p)
>>>> character(0)
>>>> > rm(teste_pequeno)
>>>> > p <- "SELECT model FROM [tempo_permanencia_models] WHERE id_model =
>>>> 1022"
>>>> > mod.teste.peq <- sqlQuery(conn, p)
>>>> Error in odbcQuery(channel, query, rows_at_time) :
>>>>   'Calloc' could not allocate memory (214748364800 of 1 bytes)
>>>> > p <- paste0("SELECT id_model, description FROM
>>>> [tempo_permanencia_models] WHERE id_model = 1022")
>>>> > sqlQuery(conn, p) #
>>>>    id_model                                              description
>>>> 1      1022                     Teste de serialização objeto pequeno
>>>>
>>>> Reparem que o objeto está salvo no servidor. Foi salvo a partir do R,
>>>> mas não retorna para o R por conta do erro de memoria. Eu não estou sabendo
>>>> nem por onde começar.
>>>>
>>>> Que a força esteja sempre com vocês e abraço forte.
>>>>
>>>> Pedro Brasil
>>>>
>>>> _______________________________________________
>>>> R-br mailing list
>>>> R-br em listas.c3sl.ufpr.br
>>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>>> código mínimo reproduzível.
>>>>
>>>
>>>
>>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20170731/26c14eeb/attachment.html>


Mais detalhes sobre a lista de discussão R-br