Solução de erros nos Snowflake Notebooks¶
Os cenários a seguir podem ajudar você a solucionar problemas que podem ocorrer ao usar os Snowflake Notebooks.
O número total de notebooks excede o limite no Snowsight¶
O seguinte erro ocorre quando o número total de notebooks em sua conta excede 6.000 e você atualiza a lista de Notebooks:
Result size for streamlit list exceeded the limit. Streamlit list was truncated.
Os usuários ainda podem criar novos notebooks; no entanto, a Snowflake recomenda que você remova os notebooks que não estão mais sendo usados pela conta.
Erro de Notebooks (tempo de execução de warehouse) ao atualizar um pacote¶
A Snowflake tornou obsoleto o pacote snowflake-ml
antigo, que não é mais compatível. Ele foi removido do seletor de pacotes e não está disponível no canal Snowflake Anaconda. Se você estiver usando snowflake-ml
e tentar adicionar, remover ou atualizar pacotes em seus notebooks, esses notebooks falharão porque snowflake-ml
não estará mais acessível.
Para evitar problemas, mude para o snowflake-ml-python
, que é o pacote correto para o Snowflake ML.
Erro do Plotly¶
st.plotly_chart(fig, render_mode='svg')
WebGL is not supported by your browser - visit https://get.webgl.org for more info.
O Plotly mudará para WebGL se houver mais de 1.000 pontos de dados.
AttributeError: NoneType
¶
O seguinte erro ocorre quando uma célula é renomeada com o mesmo nome de uma variável existente no notebook:
AttributeError: ‘NoneType’ object has no attribute ‘sql’
Por exemplo, você tem o seguinte em uma célula Python chamada cell1
:
session = get_active_session() #establishing a Snowpark session
Se você renomear cell2
para “sessão” e referenciar “sessão” na cell3
, o Notebooks tentará referenciar “sessão” (o nome da célula), e não a sessão do Snowpark, causando um erro.
Desconexão precoce¶
A sessão do notebook é executada como um procedimento armazenado. O tempo limite é de 30 minutos no tempo de execução do warehouse e de 60 minutos no tempo de execução do contêiner. Se o notebook for desconectando inesperadamente antes do tempo limite, ACCOUNTADMIN ou o proprietário do warehouse pode ter definido o parâmetro STATEMENT_TIMEOUT_IN_SECONDS para um valor específico (por exemplo, 5 minutos), o que limita o tempo de execução de todas as instruções no warehouse, inclusive as sessões do notebook. Esse parâmetro é definido no nível do warehouse ou da conta e, quando definido para um warehouse e uma sessão, o menor valor diferente de zero é aplicado.
Para obter detalhes sobre a configuração de tempo ocioso, consulte Tempo ocioso e reconexão.
Falha ao reconectar¶
Se os cookies não estiverem ativados no navegador, o usuário não poderá se reconectar automaticamente à sessão do notebook enquanto ela ainda estiver ativa (antes de atingir o tempo limite devido à inatividade). Ao reabrir o notebook, é exibida uma mensagem de erro:
Notebook connection lost and cannot reconnect. Restart or end session.
Reiniciar a sessão encerrará a consulta atual em EXECUTE NOTEBOOK e iniciará uma nova sessão. O término da sessão encerrará a consulta atual em EXECUTE NOTEBOOK.
Se você não tomar nenhuma dessas ações, a consulta EXECUTE NOTEBOOK atual continuará sendo executada no warehouse, conforme mostrado em Query History.
Falha ao conectar devido ao firewall¶
O seguinte pop-up ocorre quando você tenta iniciar seu notebook:
Something went wrong. Unable to connect. A firewall or ad blocker might be preventing you from connecting.
Certifique-se de que *.snowflake.app
esteja na lista de permissões de sua rede, incluindo sistemas de filtragem de conteúdo, e que possa se conectar ao Snowflake. Quando este domínio está na lista de permissões, seus aplicativos podem se comunicar com os servidores Snowflake sem quaisquer restrições.
Além disso, para evitar problemas de conexão com o backend do Snowflake, certifique-se de que os WebSockets não estão bloqueados na sua configuração de rede.
Pacotes ausentes¶
A seguinte mensagem é exibida em uma saída de célula se você estiver tentando usar um pacote que não está instalado em seu ambiente de notebook:
ModuleNotFoundError: Line 2: Module Not Found: snowflake.core. To import packages from Anaconda, install them first using the package
selector at the top of the page.
Importe o pacote necessário seguindo as instruções na página Importação de pacotes Python para uso em notebooks.
Pacote ausente do notebook existente¶
Novas versões de notebooks são lançadas continuamente e os notebooks são atualizados automaticamente para a versão mais recente. Às vezes, ao atualizar um notebook antigo, os pacotes no ambiente de notebook não são compatíveis com a atualização. Isso pode fazer com que o notebook não inicie.
A seguir está um exemplo de uma mensagem de erro quando o pacote Libpython
está ausente:
SnowflakeInternalException{signature=std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool):"libpython_missing", internalMsg=[XP_WORKER_FAILURE: Unexpected error signaled by function 'std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool)'
Assert "libpython_missing"[{"function": "std::vector<sf::RuntimePathLinkage> sf::{anonymous}::buildRuntimeFileSet(const sf::UdfRuntime&, std::string_view, const std::vector<sf::udf::ThirdPartyLibrariesInfo>&, bool)", "line": 1307, "stack frame ptr": "0xf2ff65553120", "libPythonOnHost": "/opt/sfc/deployments/prod1/ExecPlatform/cache/directory_cache/server_2921757878/v3/python_udf_libs/.data/4e8f2a35e2a60eb4cce3538d6f794bd7881d238d64b1b3e28c72c0f3d58843f0/lib/libpython3.9.so.1.0"}]], userMsg=Processing aborted due to error 300010:791225565; incident 9770775., reporter=unknown, dumpFile= file://, isAborting=true, isVerbose=false}
Para resolver esse erro, tente as seguintes etapas:
Atualize a página da Web e inicie o notebook novamente.
Se o problema persistir, abra o seletor de pacotes e verifique se todos os pacotes instalados são válidos. No menu suspenso de cada pacote, é possível ver as versões disponíveis. Selecionar a versão mais recente do pacote geralmente resolve o erro.
Problema no sistema de arquivos somente leitura¶
Algumas bibliotecas Python baixam ou armazenam em cache dados em um diretório de usuário local. No entanto, o diretório de usuário padrão /home/udf
é somente leitura. Para contornar isso, defina o caminho como /tmp
, que é um local gravável. Observe que a variável de ambiente usada para definir o diretório de gravação pode variar dependendo da biblioteca que você está usando. A seguir está uma lista de bibliotecas conhecidas que apresentam esse problema:
Matplotlib
HuggingFace
CatBoost
Exemplo de Matplotlib¶
É possível ver esse aviso ao usar o matplotlib:
Matplotlib created a temporary cache directory at /tmp/matplotlib-2fk8582w because the default path (/home/udf/.config/matplotlib) is
not a writable directory; it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular
to speed up the import of Matplotlib and to better support multiprocessing.
Resolva esse aviso usando este código, que define a variável MPLCONFIGDIR
como /tmp/
:
import os
os.environ["MPLCONFIGDIR"] = '/tmp/'
import matplotlib.pyplot as plt
Exemplo de Hugging Face¶
É possível ver esse aviso ao usar o Hugging Face:
Readonly file system: `/home/udf/.cache`
O código a seguir define as variáveis HF_HOME
e SENTENCE_TRANSFORMERS_HOME
para /tmp/
para se livrar deste erro:
import os
os.environ['HF_HOME'] = '/tmp'
os.environ['SENTENCE_TRANSFORMERS_HOME'] = '/tmp'
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Snowflake/snowflake-arctic-embed-xs")
A mensagem de saída é muito grande ao usar df.collect()
¶
A seguinte mensagem é exibida na saída da célula quando você executa df.collect()
:
MessageSizeError: Data of size 522.0 MB exceeds the message size limit of 200.0 MB.
This is often caused by a large chart or dataframe. Please decrease the amount of data sent to the browser,
or increase the limit by setting the config option server.maxMessageSize.
Click here to learn more about config options.
Note that increasing the limit may lead to long loading times and large memory consumption of the client's browser and the Streamlit server.
Snowflake Notebooks trunca automaticamente os resultados na saída da célula para grandes conjuntos de dados nos seguintes casos:
Todos os resultados de células SQL.
Resultados de células Python se for um
snowpark.Dataframe
.
O problema com a célula acima é que df.collect()
retorna List
em vez de snowpark.Dataframe
. As listas não são truncadas automaticamente. Para contornar esse problema, emita diretamente os resultados do DataFrame.
df
Notebook trava ao usar df.to_pandas()
no Snowpark DataFrames¶
Ao executar df.to_pandas()
, todos os dados são carregados na memória e podem resultar no encerramento da sessão do Notebook se o tamanho dos dados exceder o limite de memória do warehouse do Notebook associado.
Exemplo 1: exportação de uma tabela do Snowpark para o DataFrame pandas¶
data = session.table("BIG_TABLE")
df = data.to_pandas() # This may lead to memory error
Solução alternativa para o exemplo 1¶
O exemplo a seguir mostra como é possível reescrever o código para ler a tabela com o Snowpark pandas.
# Import Snowpark pandas
import modin.pandas as pd
import snowflake.snowpark.modin.plugin
# Create a Snowpark pandas DataFrame from BIG_TABLE
df = pd.read_snowflake("BIG_TABLE")
# Keep working with your data using the pandas API
df.dropna()
Exemplo 2: referência a uma célula SQL que contém resultados grandes¶
Se você tiver o seguinte código em uma célula SQL nomeada cell1
, o resultado de saída será 500 milhões de linhas.
SELECT * from BIG_TABLE
Portanto, ao buscar os resultados em um DataFrame pandas, o notebook trava porque os dados são muito grandes para caber na memória:
df = cell1.to_pandas() # This may lead to memory error
Em geral, para grandes conjuntos de dados, o Snowflake recomenda que você evite usar df.to_pandas()
. Em vez disso, para operar em seus dados com pandas, use a Snowpark pandas API e um warehouse otimizado para o Snowpark. A Snowpark pandas API permite que você execute seu código pandas diretamente nos dados Snowflake com a consulta realizada em SQL. Isso permite executar o código do pandas em dados que não cabem na memória do notebook.
Solução alternativa para o exemplo 2¶
No segundo exemplo de referência de célula acima, é possível converter o resultado da célula SQL em um DataFrame Snowpark primeiro. Em seguida, é possível convertê-lo em Snowpark pandas.
SELECT * from BIG_TABLE
snowpark_df = cell1.to_df()
df = snowpark_df.to_snowpark_pandas()
# Keep working with your data using the Snowpark pandas API
Para obter mais detalhes, consulte pandas on Snowflake em notebooks.
Não é possível se conectar devido ao tunelamento dividido de VPN¶
Se a VPN estiver configurada para usar o tunelamento dividido, é necessário adicionar *.snowflake.com
e *.snowflake.app
à lista de permissões de política de redes.