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

Leonard Assis assis.leonard em gmail.com
Sexta Agosto 25 12:03:04 -03 2017


O grupo rstats-db hoje desenvolve o DBI,  responsável pelas ligações de
SGBD com o R.
Recomendo uso deste pacote quando for lidar com conexão odbc.

On sex, 25 de ago de 2017 11:55 Cesar Rabak <cesar.rabak em gmail.com> wrote:

> Ah. . . a ditadura dos SW proprietários...
>
> Pelo menos resolveu seu problema e pode seguir com a parte que interessa
> que são as análises!
>
> Sucesso.
>
> 2017-08-25 10:33 GMT-03:00 Pedro Emmanuel Alvarenga Americano do Brasil
> via R-br <r-br em listas.c3sl.ufpr.br>:
>
>> Ei pessoal,
>>
>> Obrigado pelas sugestões de todos. Não sei de onde veio essa informação
>> de que RODBC estaria "deprecated" olhei no r-forge e parece estar ativo. A
>> ultima atualização é do primeiro semestre de 2016.
>>
>> A saida do meu problema foi usando Rclient. Um R disponibilizado no sítio
>> da microsoft, que já vem instalados com uma série de pacotes proprietários
>> da Microsoft para integração com o SQL server 2016/2017. O nome do pacote
>> é RevoScaleR.
>>
>> Ao invés de fazer ...
>>
>> > p <- "SELECT model FROM [tempo_permanencia_models] WHERE id_model =
>> 1022"
>> > mod.teste.peq <- sqlQuery(conn, p) # que retorna o erro de memória!
>>
>> Eu fiz ...
>>
>> mod.teste.peq  <- RxOdbcData(sqlQuery = "SELECT model FROM
>> tempo_permanencia_models WHERE id_model=1018" ,connectionString = dbconn)
>> mod.teste.peq  <- rxReadObject(mod.teste.peq , decompress = "none")
>>
>> Agora dá pra fazer as previsões novamente...
>>
>> Abraço forte a todos,
>>
>>
>>
>> Pedro Brasil
>>
>> Em 2 de agosto de 2017 15:20, Leonard Assis via R-br <
>> r-br em listas.c3sl.ufpr.br> escreveu:
>>
>>> RSQLServer não é boa alternativa, não sofre manutenção a tempos e
>>> depende de Java na máquina. Sugiro o pacote odbc.
>>>
>>> SQL Server é mestre em dar problema no R comigo, mas o problema é na
>>> autenticação.
>>>
>>> Em 1 de ago de 2017 9:14 AM, "Zhu Sha Zang via R-br" <
>>> r-br em listas.c3sl.ufpr.br> escreveu:
>>>
>>>> Parece que RODBC está "deprecated", tente usar o pacote RSQLServer.
>>>>
>>>>
>>>> Atenciosamente
>>>>
>>>> On 07/31/2017 01:53 PM, Cesar Rabak via R-br wrote:
>>>>
>>>> Correto Pedro!
>>>>
>>>> Contudo, não entendo porque. . .
>>>>
>>>> Minha forma de atacar esse problema seria mandar os dados para o BD por
>>>> outra maneira (que ñ via R) e tentar conectar apenas para puxar os dados:
>>>> aí a gente vê se é na criação do BD via R que ele deixa em aberto um
>>>> tamanho default muito grande ou se é a chamada que por alguma coincidência
>>>> cria um default exigindo tanta memória (embora nos OSs modernos isso não
>>>> deveria gerar problema porque existem os gerenciadores de memória virtual).
>>>>
>>>> HTH
>>>> --
>>>> Cesar Rabak
>>>>
>>>>
>>>> 2017-07-31 10:32 GMT-03:00 Pedro Emmanuel Alvarenga Americano do Brasil
>>>> <emmanuel.brasil em gmail.com>:
>>>>
>>>>> 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/tutorials/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;Database=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.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> R-br mailing listR-br em listas.c3sl.ufpr.brhttps://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.
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> 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.
>>>>
>>>
>>> _______________________________________________
>>> 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.
>>>
>>
>>
>> _______________________________________________
>> 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/20170825/8a611307/attachment.html>


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