Fehler in Snowflake Notebooks beheben

Die folgenden Szenarios können Ihnen helfen, möglicherweise auftretende Probleme bei der Verwendung von Snowflake Notebooks zu beheben.

Die Gesamtzahl der Notebooks überschreitet das Limit in der Snowsight

Der folgende Fehler tritt auf, wenn die Gesamtzahl der Notebooks in Ihrem Konto 6.000 übersteigt und Sie die Liste der Notebooks aktualisieren:

Result size for streamlit list exceeded the limit. Streamlit list was truncated.

Benutzer können weiterhin neue Notebooks erstellen. Snowflake empfiehlt Ihnen jedoch, Notebooks zu entfernen, die nicht mehr von dem Konto verwendet werden.

Notebooks-(Warehouse-Laufzeit)-Fehler beim Aktualisieren eines Pakets

Snowflake hat das ältere snowflake-ml-Paket als veraltet markiert, das nicht mehr unterstützt wird. Es wurde aus der Paketauswahl entfernt und ist im Snowflake Anaconda-Kanal nicht mehr verfügbar. Wenn Sie snowflake-ml verwenden und versuchen, Pakete in Ihren Notebooks hinzuzufügen, zu entfernen oder zu aktualisieren, werden diese Notebooks fehlschlagen, da snowflake-ml nicht mehr zugänglich ist.

Um Probleme zu vermeiden, wechseln Sie zu snowflake-ml-python, dem richtigen Paket für Snowflake-ML.

Plotly-Fehler

st.plotly_chart(fig, render_mode='svg')

WebGL is not supported by your browser - visit https://get.webgl.org for more info.

Plotly schaltet auf Webgl um, wenn es mehr als 1.000 Datenpunkte gibt.

AttributeError: NoneType

Der folgende Fehler tritt auf, wenn eine Zelle in denselben Namen umbenannt wird wie eine bestehende Variable im Notebook:

AttributeError: ‘NoneType’ object has no attribute ‘sql’

In einer Python-Zelle mit dem Namen cell1 haben Sie zum Beispiel Folgendes:

session = get_active_session() #establishing a Snowpark session
Copy

Wenn Sie dann cell2 in „Sitzung“ umbenennen und in cell3 auf „Sitzung“ verweisen, versucht Notebooks, auf „Sitzung“ (den Zellnamen) und nicht auf die Snowpark-Sitzung zu verweisen, was einen Fehler verursacht.

Vorzeitige Trennung

Die Notebook-Sitzung wird als gespeicherte Prozedur ausgeführt. Das Timeout beträgt 30 Minuten für die Warehouse-Laufzeit und 60 Minuten für Container Runtime. Wenn Ihr Notebook die Verbindung unerwartet vor dem Timeout unterbricht, könnte Ihr ACCOUNTADMIN oder der Eigentümer des Warehouse den Parameter STATEMENT_TIMEOUT_IN_SECONDS auf einen bestimmten Wert (z. B. 5 Minuten) eingestellt haben, der die Dauer der Ausführung aller Anweisungen im Warehouse, einschließlich der Notebook-Sitzungen, begrenzt. Dieser Parameter wird auf der Warehouse- oder Kontoebene festgelegt. Wenn er sowohl für ein Warehouse als auch für eine Sitzung festgelegt ist, wird der niedrigste Nicht-Null-Wert durchgesetzt.

Einzelheiten zur Einstellung der Leerlaufzeit finden Sie unter Leerlaufzeit und Wiederherstellung der Verbindung.

Verbindung konnte nicht wiederhergestellt werden

Wenn Sie in Ihrem Browser keine Cookies aktiviert haben, können Sie sich nicht automatisch wieder mit der Notebook-Sitzung verbinden, wenn diese noch aktiv sein sollte (bevor sie aufgrund von Inaktivität beendet wird). Wenn Sie das Notebook erneut öffnen, wird eine Fehlermeldung angezeigt:

Notebook connection lost and cannot reconnect. Restart or end session.

Wenn Sie die Sitzung neu starten, wird die aktuelle Abfrage von EXECUTE NOTEBOOK beendet und eine neue Sitzung gestartet. Wenn Sie die Sitzung beenden, wird die aktuelle Abfrage von EXECUTE NOTEBOOK beendet.

Wenn Sie keine der beiden Aktionen ausführen, läuft die aktuelle Abfrage EXECUTE NOTEBOOK im Warehouse weiter, wie unter Query History angezeigt.

Keine Verbindung aufgrund der Firewall

Das folgende Popup erscheint, wenn Sie versuchen, Ihr Notebook zu starten:

Something went wrong. Unable to connect. A firewall or ad blocker might be preventing you from connecting.

Vergewissern Sie sich, dass *.snowflake.app in Ihrem Netzwerk auf der Zulassungsliste steht, einschließlich der Inhaltsfiltersysteme, und eine Verbindung zu Snowflake herstellen kann. Wenn diese Domäne in der Zulassungsliste enthalten ist, können Ihre Apps ohne Einschränkungen mit Snowflake-Servern kommunizieren.

Um Probleme bei der Verbindung mit dem Snowflake Backend zu vermeiden, stellen Sie außerdem sicher, dass WebSockets in Ihrer Netzwerkkonfiguration nicht blockiert werden.

Fehlende Pakete

Die folgende Meldung erscheint in einer Zellenausgabe, wenn Sie versuchen, ein Paket zu verwenden, das nicht in Ihrer Notebook-Umgebung installiert ist:

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.

Importieren Sie das erforderliche Paket, indem Sie den Anweisungen auf der Seite Python-Pakete zur Verwendung in Notebooks importieren folgen.

Fehlendes Paket in vorhandenem Notebook

Es werden ständig neue Versionen von Notebooks veröffentlicht, und die Notebooks werden automatisch auf die neueste Version aktualisiert. Manchmal sind beim Upgrade eines alten Notebooks die Pakete in der Notebook-Umgebung nicht mit dem Upgrade kompatibel. Dies kann möglicherweise dazu führen, dass das Notebook nicht mehr startet.

Im Folgenden finden Sie ein Beispiel für eine Fehlermeldung, wenn das Paket Libpython fehlt:

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}

Um diesen Fehler zu beheben, versuchen Sie die folgenden Schritte:

  • Aktualisieren Sie die Webseite, und starten Sie das Notebook erneut.

  • Wenn das Problem weiterhin besteht, öffnen Sie die Paketauswahl und überprüfen Sie, ob alle installierten Pakete gültig sind. In der Dropdown-Liste für jedes Paket können Sie die verfügbaren Versionen sehen. Wenn Sie die neueste Version des Pakets auswählen, ist der Fehler normalerweise behoben.

Problem mit dem Nur-Lese-Dateisystem

Einige Python-Bibliotheken laden Daten in ein lokales Verzeichnis des Benutzers herunter oder speichern sie dort. Das Standard-Benutzerverzeichnis /home/udf ist jedoch schreibgeschützt. Um dies zu umgehen, setzen Sie den Pfad auf /tmp, das ein beschreibbarer Speicherort ist. Beachten Sie, dass die Umgebungsvariable, die zum Festlegen des Verzeichnisses zum Schreiben verwendet wird, je nach verwendeter Bibliothek variieren kann. Im Folgenden finden Sie eine Liste der bekannten Bibliotheken, bei denen dieses Problem auftritt:

  • matplotlib

  • HuggingFace

  • catboost

matplotlib-Beispiel

Bei der Verwendung von matplotlib wird möglicherweise diese Warnung angezeigt:

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.

Beheben Sie diese Warnung mit diesem Code, der die Variable MPLCONFIGDIR auf /tmp/ setzt:

import os
os.environ["MPLCONFIGDIR"] = '/tmp/'
import matplotlib.pyplot as plt
Copy

Huggingface-Beispiel

Diese Warnung wird möglicherweise angezeigt, wenn Sie Huggingface verwenden:

Readonly file system: `/home/udf/.cache`

Der folgende Code setzt die Variablen HF_HOME und SENTENCE_TRANSFORMERS_HOME auf /tmp/, um diesen Fehler zu beheben:

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")
Copy

Ausgabemeldung von df.collect() ist zu groß

Die folgende Meldung wird in der Zellenausgabe angezeigt, wenn Sie df.collect() ausführen:

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 schneidet die Ergebnisse in der Zellenausgabe für große Datenset in den folgenden Fällen automatisch ab:

  • Alle SQL-Zellenergebnisse.

  • Python-Zellenergebnisse bei einem snowpark.Dataframe.

Das Problem mit der obigen Zelle ist, dass df.collect() ein List-Objekt anstelle von snowpark.Dataframe zurückgibt. Listen werden nicht automatisch abgeschnitten. Um dieses Problem zu umgehen, geben Sie direkt die Ergebnisse des DataFrame aus.

df
Copy

Notebook stürzt bei Verwendung von df.to_pandas() auf Snowpark ab DataFrames.

Beim Ausführen von df.to_pandas() werden alle Daten in den Speicher geladen, was dazu führen kann, dass die Notebook-Sitzung beendet wird, wenn die Datengröße die Speicherbeschränkung des zugehörigen Notebook-Warehouse überschreitet.

Beispiel 1: Exportieren einer Snowpark-Tabelle nach pandas DataFrame

data = session.table("BIG_TABLE")
df = data.to_pandas() # This may lead to memory error
Copy

Abhilfe für Beispiel 1

Das folgende Beispiel zeigt, wie Sie den Code umschreiben können, um die Tabelle mit Snowpark pandas einzulesen.

# 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()
Copy

Beispiel 2: Verweis auf eine SQL-Zelle mit großen Ergebnissen

Wenn Sie den folgenden Code in einer SQL-Zelle mit dem Namen cell1 eingeben, lautet das Ausgabeergebnis 500M Zeilen.

SELECT * from BIG_TABLE
Copy

Wenn Sie dann die Ergebnisse in ein pandas DataFrame holen, stürzt das Notebook ab, weil die Daten zu groß sind, um in den Speicher zu passen:

df = cell1.to_pandas() # This may lead to memory error
Copy

Im Allgemeinen empfiehlt Snowflake, bei großen Datensätzen die Verwendung von df.to_pandas() zu vermeiden. Um Ihre Daten mit pandas zu bearbeiten, verwenden Sie stattdessen die Snowpark pandas-API und ein Snowpark-optimiertes Warehouse. Mit der Snowpark pandas-API können Sie Ihren pandas-Code direkt auf Ihren Daten in Snowflake ausführen, wobei die Abfrage in SQL erfolgt. Damit können Sie pandas-Code auf Daten ausführen, die nicht in den Speicher des Notebooks passen.

Abhilfe für Beispiel 2

Im zweiten Beispiel für eine Zellenreferenz oben können Sie das Ergebnis der SQL-Zelle zunächst in einen Snowpark DataFrame umwandeln. Dann können Sie sie in Snowpark pandas umwandeln.

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
Copy

Weitere Einzelheiten finden Sie unter pandas on Snowflake in Notebooks.

Keine Verbindung möglich aufgrund von VPN Split-Tunneling

Wenn Ihr VPN für die Verwendung von Split-Tunneling konfiguriert ist, müssen Sie sowohl *.snowflake.com als auch *.snowflake.app zur Zulassungsliste Ihrer Netzwerkrichtlinie hinzufügen.