[R-br] Erro de memória importando objeto pequeno de SQL
Cesar Rabak
cesar.rabak em gmail.com
Sexta Agosto 25 11:55:45 -03 2017
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/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.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>>
>>> _______________________________________________
>>> 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/0139d42d/attachment.html>
Mais detalhes sobre a lista de discussão R-br