Odczytywanie i zapisywanie danych z usługi Snowflake
Usługa Azure Databricks udostępnia łącznik Snowflake w środowisku Databricks Runtime do obsługi odczytywania i zapisywania danych z usługi Snowflake.
Uwaga
Możesz preferować federację Lakehouse do zarządzania zapytaniami dotyczącymi danych snowflake. Zobacz Co to jest Federacja Lakehouse.
Wykonywanie zapytań względem tabeli Snowflake w usłudze Azure Databricks
Możesz skonfigurować połączenie z usługą Snowflake, a następnie wykonywać zapytania dotyczące danych. Przed rozpoczęciem sprawdź, w której wersji środowiska Databricks Runtime działa klaster. Poniższy kod zawiera przykładowe składnie w językach Python, SQL i Scala.
Python
# The following example applies to Databricks Runtime 11.3 LTS and above.
snowflake_table = (spark.read
.format("snowflake")
.option("host", "hostname")
.option("port", "port") # Optional - will use default port 443 if not specified.
.option("user", "username")
.option("password", "password")
.option("sfWarehouse", "warehouse_name")
.option("database", "database_name")
.option("schema", "schema_name") # Optional - will use default schema "public" if not specified.
.option("dbtable", "table_name")
.load()
)
# The following example applies to Databricks Runtime 10.4 and below.
snowflake_table = (spark.read
.format("snowflake")
.option("dbtable", table_name)
.option("sfUrl", database_host_url)
.option("sfUser", username)
.option("sfPassword", password)
.option("sfDatabase", database_name)
.option("sfSchema", schema_name)
.option("sfWarehouse", warehouse_name)
.load()
)
SQL
/* The following example applies to Databricks Runtime 11.3 LTS and above. */
DROP TABLE IF EXISTS snowflake_table;
CREATE TABLE snowflake_table
USING snowflake
OPTIONS (
host '<hostname>',
port '<port>', /* Optional - will use default port 443 if not specified. */
user '<username>',
password '<password>',
sfWarehouse '<warehouse_name>',
database '<database-name>',
schema '<schema-name>', /* Optional - will use default schema "public" if not specified. */
dbtable '<table-name>'
);
SELECT * FROM snowflake_table;
/* The following example applies to Databricks Runtime 10.4 LTS and below. */
DROP TABLE IF EXISTS snowflake_table;
CREATE TABLE snowflake_table
USING snowflake
OPTIONS (
dbtable '<table-name>',
sfUrl '<database-host-url>',
sfUser '<username>',
sfPassword '<password>',
sfDatabase '<database-name>',
sfSchema '<schema-name>',
sfWarehouse '<warehouse-name>'
);
SELECT * FROM snowflake_table;
Scala
# The following example applies to Databricks Runtime 11.3 LTS and above.
val snowflake_table = spark.read
.format("snowflake")
.option("host", "hostname")
.option("port", "port") /* Optional - will use default port 443 if not specified. */
.option("user", "username")
.option("password", "password")
.option("sfWarehouse", "warehouse_name")
.option("database", "database_name")
.option("schema", "schema_name") /* Optional - will use default schema "public" if not specified. */
.option("dbtable", "table_name")
.load()
# The following example applies to Databricks Runtime 10.4 and below.
val snowflake_table = spark.read
.format("snowflake")
.option("dbtable", table_name)
.option("sfUrl", database_host_url)
.option("sfUser", username)
.option("sfPassword", password)
.option("sfDatabase", database_name)
.option("sfSchema", schema_name)
.option("sfWarehouse", warehouse_name)
.load()
Przykład notesu: Snowflake Połączenie or for Spark
Poniższe notesy zawierają proste przykłady sposobu zapisywania danych i odczytywania danych z usługi Snowflake. Aby uzyskać więcej informacji, zobacz Using the Spark Połączenie or (Korzystanie z Połączenie platformy Spark). W szczególności zobacz Ustawianie opcji konfiguracji dla Połączenie or dla wszystkich opcji konfiguracji.
Napiwek
Unikaj uwidaczniania nazwy użytkownika i hasła usługi Snowflake w notesach przy użyciu wpisów tajnych, które przedstawiono w notesach.
Notes języka Python snowflake
Przykład notesu: Zapisywanie wyników trenowania modelu w usłudze Snowflake
W poniższym notesie przedstawiono najlepsze rozwiązania dotyczące używania Połączenie or snowflake dla platformy Spark. Zapisuje dane w usłudze Snowflake, używa rozwiązania Snowflake do pewnych podstawowych manipulacji danymi, trenuje model uczenia maszynowego w usłudze Azure Databricks i zapisuje wyniki z powrotem do usługi Snowflake.
Przechowywanie wyników trenowania uczenia maszynowego w notesie Snowflake
Często zadawane pytania
Dlaczego kolumny ramki danych platformy Spark nie są wyświetlane w tej samej kolejności w usłudze Snowflake?
Obiekt Snowflake Połączenie or dla platformy Spark nie uwzględnia kolejności kolumn w tabeli zapisywanej w tabeli. Należy jawnie określić mapowanie między kolumnami DataFrame i Snowflake. Aby określić to mapowanie, użyj parametru columnmap.
INTEGER
Dlaczego dane zapisywane w usłudze Snowflake są odczytywane jako DECIMAL
?
Snowflake reprezentuje wszystkie INTEGER
typy jako NUMBER
, co może spowodować zmianę typu danych podczas zapisywania danych i odczytywania danych z snowflake. Na przykład INTEGER
dane można przekonwertować na DECIMAL
podczas zapisywania w usłudze Snowflake, ponieważ INTEGER
i DECIMAL
są semantycznie równoważne w usłudze Snowflake (zobacz Snowflake Numeryczne typy danych).
Dlaczego pola w schemacie tabeli Snowflake są zawsze wielkie litery?
Snowflake domyślnie używa wielkich pól, co oznacza, że schemat tabeli jest konwertowany na wielkie litery.