Compartir a través de


Lectura y escritura de datos desde Snowflake

Azure Databricks proporciona un conector Snowflake en Databricks Runtime para admitir la lectura y escritura de datos de Snowflake.

Importante

Las configuraciones descritas en este artículo son experimentales. Las características experimentales se proporcionan tal cual y no cuentan con soporte técnico de Databricks a través del soporte técnico al cliente. Para obtener compatibilidad completa con la federación de consultas, debe usar la federación de Lakehouse, que permite a los usuarios de Azure Databricks aprovechar la sintaxis de Unity Catalog y las herramientas de gobernanza de datos.

Consulta de una tabla Snowflake en Azure Databricks

Puede configurar una conexión a Snowflake y, a continuación, consultar los datos. Antes de empezar, compruebe en qué versión de Databricks Runtime se ejecuta el clúster. En el código siguiente se proporciona una sintaxis de ejemplo en Python, SQL y 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()

Ejemplo de cuaderno: conector de Snowflake para Spark

En los cuadernos siguientes se proporcionan ejemplos sencillos de cómo escribir y leer datos de Snowflake. Consulte Conector de Snowflake para Spark para obtener más información.

Sugerencia

Evite exponer el nombre de usuario y la contraseña de Snowflake en los cuadernos mediante secretos, que se muestran en los cuadernos.

Cuaderno de Python de Snowflake

Obtener el cuaderno

Ejemplo de cuaderno: almacenamiento de los resultados de entrenamiento del modelo en Snowflake

En el cuaderno siguiente se describen los procedimientos recomendados para usar el conector de Snowflake para Spark. Este conector escribe datos en Snowflake, usa Snowflake para la manipulación básica de datos, entrena un modelo de aprendizaje automático en Azure Databricks y escribe los resultados en Snowflake.

Almacenamiento de los resultados de entrenamiento de ML en el cuaderno de Snowflake

Obtener el cuaderno

Preguntas más frecuentes

¿Por qué mis columnas DataFrame de Spark no aparecen en el mismo orden en Snowflake?

El conector de Snowflake para Spark no respeta el orden de las columnas de la tabla en la que se escriben; debe especificar explícitamente la asignación entre las columnas de DataFrame y Snowflake. Para especificar esta asignación, use el parámetro columnmap.

¿Por qué los datos INTEGER escritos en Snowflake se leen como DECIMAL?

Snowflake representa todos los tipos INTEGER como NUMBER, lo que puede provocar un cambio en el tipo de datos al escribir y leer datos desde Snowflake. Por ejemplo, los datos INTEGER se pueden convertir a DECIMAL al escribir en Snowflake, porque INTEGER y DECIMAL son semánticamente equivalentes en Snowflake (consulte Tipos de datos numéricos de Snowflake).

¿Por qué los campos del esquema de tabla de Snowflake siempre están en mayúsculas?

Snowflake usa campos en mayúsculas de forma predeterminada, lo que significa que el esquema de tabla se convierte a mayúsculas.