Udostępnij za pośrednictwem


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.

Ważne

Konfiguracje opisane w tym artykule są eksperymentalne. Funkcje eksperymentalne są udostępniane zgodnie z oczekiwaniami i nie są obsługiwane przez usługę Databricks za pośrednictwem pomocy technicznej klienta. Aby uzyskać pełną obsługę federacji zapytań, należy zamiast tego użyć usługi Lakehouse Federation, która umożliwia użytkownikom usługi Azure Databricks korzystanie ze składni wykazu aparatu Unity i narzędzi do zapewniania ładu danych.

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 Connector 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 Snowflake Connector for Spark (Łącznik snowflake dla platformy Spark ).

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 łącznika 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?

Łącznik snowflake dla platformy Spark nie uwzględnia kolejności kolumn w tabeli, do których jest zapisywana; 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.