Ausführen von Snowflake SQL mit Snowpark Connect for Spark

Zum Ausführen von Snowflake-spezifischen SQL-Befehlen können Sie die SnowflakeSession-Schnittstelle verwenden. Wie bei der spark.sql-Methode werden die Abfrageergebnisse als Spark-DataFrames zurückgegeben, mit denen Sie Spark-DataFrame-Transformationen und -Aktionen auf den resultierenden Daten weiterhin anwenden oder verketten können.

Bei den meisten SQL-Operationen können Sie die spark.sql-Methode zur direkten Ausführung von SQL-Anweisungen und zum Abrufen der Ergebnisse als Spark-DataFrames verwenden. Einige Teile der Snowflake-SQL-Syntax, einschließlich QUALIFY, CONNECT BY, LATERAL FLATTEN und Time Travel-Abfragen, sind nicht mit Spark-SQL kompatibel.

Im folgenden Beispiel wird veranschaulicht, wie mit SnowflakeSession ein Snowflake-SQL-Befehl, der die Klausel CONNECT BY enthält, ausgeführt wird.

import snowflake.snowpark_connect
from snowflake.snowpark_connect.snowflake_session import SnowflakeSession

spark = snowflake.snowpark_connect.server.init_spark_session()
snowflake_session = SnowflakeSession(spark)
result_df = snowflake_session.sql("""
  SELECT
  employee_name,
  manager_name,
  LEVEL
FROM employees
START WITH employee_name = 'Alice'
CONNECT BY PRIOR manager_name = employee_name
""").show()
result_df.limit(1).show()
Copy

Sie können auch die SnowflakeSession-Schnittstelle zum Ausführen von Snowflake-spezifischen Konfigurationsrichtlinien verwenden. Diese Richtlinien enthalten Parameter auf Sitzungsebene, z. B. die aktive Datenbank, das aktive Schema oder das aktive Warehouse.

Im folgenden Beispiel wird veranschaulicht, wie mit SnowflakeSession Parameter auf Sitzungsebene festgelegt werden.

import snowflake.snowpark_connect
from snowflake.snowpark_connect.client import SnowflakeSession

spark = snowflake.snowpark_connect.server.init_spark_session()
snowflake_session = SnowflakeSession(spark)

snowflake_session.use_database("MY_DATABASE")
snowflake_session.use_schema("MY_SCHEMA")
snowflake_session.use_warehouse("MY_WH")
snowflake_session.use_role("PUBLIC")
Copy