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

Pobierz notes

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

Pobierz notes

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.