Connessioni Snowflake - AWS Glue

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Connessioni Snowflake

È possibile utilizzare AWS Glue per Spark per leggere e scrivere su tabelle in Snowflake in AWS Glue 4.0 e versioni successive. È possibile leggere da Snowflake con una query SQL. È possibile connettersi a Snowflake utilizzando un utente e una password. È possibile fare riferimento alle credenziali Snowflake archiviate in AWS Secrets Manager attraverso Catalogo dati AWS Glue. Le credenziali Catalogo dati Snowflake per AWS Glue per Spark vengono archiviate separatamente dalle credenziali Catalogo dati Snowflake per i crawler. È necessario scegliere un tipo di connessione SNOWFLAKE e non un tipo di connessione JDBCconfigurato per la connessione a Snowflake.

Per ulteriori informazioni su Snowflake, consulta il sito Web di Snowflake. Per ulteriori informazioni su Snowflake su AWS, consulta la pagina Snowflake Data Warehouse on Amazon Web Services.

Configurazione delle connessioni Snowflake

Non sussistono prerequisiti AWS per la connessione ai database Snowflake disponibili su Internet.

Facoltativamente, è possibile applicare la seguente configurazione per gestire le credenziali di connessione con AWS Glue.

Gestione delle credenziali di connessione con AWS Glue
  1. In Snowflake, genera un utente, sowflakeUser, e una password, snowflakePassword.

  2. In AWS Secrets Manager, crea un segreto utilizzando le tue credenziali Snowflake. Per creare un segreto in Secrets Manager, segui il tutorial disponibile in Create an AWS Secrets Manager secret nella documentazione di AWS Secrets Manager. Dopo aver creato il segreto, prendi nota del nome, secretName, per il passaggio successivo.

    • Quando selezioni le coppie chiave/valore, crea una coppia per snowflakeUser con la chiave sfUser.

    • Quando selezioni le coppie chiave/valore, crea una coppia per snowflakePassword con la chiave sfPassword.

    • Quando selezioni le coppie chiave/valore, puoi fornire la chiave sfWarehouse al tuo warehouse Snowflake.

  3. In Catalogo dati AWS Glue, crea una connessione seguendo i passaggi riportati in Aggiunta di una connessione AWS Glue. Dopo aver creato la connessione, prendi nota del nome, connectionName, per il passaggio successivo.

    • In Tipo di connessione, seleziona Snowflake.

    • Quando selezioni l'URL Snowflake, fornisci l'URL della tua istanza Snowflake. L'URL utilizzerà un nome host nel modulo account_identifier.snowflakecomputing.com.

    • Quando selezioni il Segreto AWS, fornisci secretName.

  4. Nella configurazione del processo AWS Glue, fornisci connectionName come Connessione di rete aggiuntiva.

Nelle seguenti situazioni, potresti aver bisogno di quanto segue:

  • Per Snowflake ospitato su AWS in un Amazon VPC

    • Avrai bisogno di una configurazione Amazon VPC appropriata per Snowflake. Per ulteriori informazioni su come configurare il tuo Amazon VPC, consulta la sezione AWS PrivateLink & Snowflake nella documentazione di Snowflake.

    • Avrai bisogno di una configurazione Amazon VPC appropriata per AWS Glue. AWS Glue ed endpoint VPC dell'interfaccia (AWS PrivateLink).

    • Dovrai creare una connessione a Catalogo dati AWS Glue che fornisca le informazioni di connessione Amazon VPC (oltre all'ID di un segreto AWS Secrets Manager che definisce le tue credenziali di sicurezza Snowflake). L'URL cambierà durante l'utilizzo di AWS PrivateLink, come descritto nella documentazione di Snowflake, un collegamento alla quale è stato fornito in precedenza.

    • È necessario che la configurazione del processo includa la connessione a Catalogo dati come Connessione di rete aggiuntiva.

Lettura dalle tabelle Snowflake

Prerequisiti: una tabella Snowflake da cui desideri leggere. Avrai bisogno del nome della tabella Snowflake, tableName. Avrai bisogno del tuo URL Snowflake, snowflakeUrl, del nome utente, snowflakeUser, e della password, snowflakePassword. Se il tuo utente Snowflake non dispone di uno spazio dei nomi predefinito, avrai bisogno del nome del database Snowflake, databaseName e del nome dello schema SchemaName. Inoltre, se il tuo utente Snowflake non dispone di un set di warehouse predefinito, avrai bisogno di un nome di warehouse WarehouseName.

Per esempio:

Prerequisiti aggiuntivi: completa la procedura Gestione delle credenziali di connessione con AWS Glue per configurare snowflakeUrl, snowflakeUsername e snowflakePassword. Per esaminare questi passaggi, consulta Configurazione delle connessioni Snowflake, la sezione precedente. Per selezionare la connessione di rete aggiuntiva con la quale connettersi, utilizzeremo il parametro connectionName.

snowflake_read = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Inoltre, puoi utilizzare i parametri autopushdown e query per leggere una parte di una tabella Snowflake. Questo può essere molto più efficiente rispetto al filtraggio dei risultati dopo che sono stati caricati in Spark. Prendiamo in esame un esempio in cui tutte le vendite sono archiviate nella stessa tabella, ma è necessario analizzare solo le vendite di un determinato negozio nei giorni festivi. Se tali informazioni sono archiviate nella tabella, è possibile utilizzare il predicato pushdown per recuperare i risultati come segue:

snowflake_node = glueContext.create_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "autopushdown": "on", "query": "select * from sales where store='1' and IsHoliday='TRUE'", "connectionName": "snowflake-glue-conn", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", } )

Scrittura su tabelle Snowflake

Prerequisiti: un database Snowflake su cui scrivere. Avrai bisogno di un nome di tabella attuale o desiderato, tableName. Avrai bisogno del tuo URL Snowflake, snowflakeUrl, del nome utente, snowflakeUser, e della password, snowflakePassword. Se il tuo utente Snowflake non dispone di uno spazio dei nomi predefinito, avrai bisogno del nome del database Snowflake, databaseName e del nome dello schema SchemaName. Inoltre, se il tuo utente Snowflake non dispone di un set di warehouse predefinito, avrai bisogno di un nome di warehouse WarehouseName.

Per esempio:

Prerequisiti aggiuntivi: completa la procedura Gestione delle credenziali di connessione con AWS Glue per configurare snowflakeUrl, snowflakeUsername e snowflakePassword. Per esaminare questi passaggi, consulta Configurazione delle connessioni Snowflake, la sezione precedente. Per selezionare la connessione di rete aggiuntiva con la quale connettersi, utilizzeremo il parametro connectionName.

glueContext.write_dynamic_frame.from_options( connection_type="snowflake", connection_options={ "connectionName": "connectionName", "dbtable": "tableName", "sfDatabase": "databaseName", "sfSchema": "schemaName", "sfWarehouse": "warehouseName", }, )

Indicazioni di riferimento alle opzioni di connessione a Snowflake

Il tipo di connessione Snowflake accetta le seguenti opzioni di connessione:

È possibile recuperare alcuni dei parametri di questa sezione da una connessione a Catalogo dati (sfUrl, sfUser e sfPassword), nel qual caso non è necessario fornirli. È possibile farlo fornendo il parametro connectionName.

È possibile recuperare alcuni dei parametri di questa sezione da un segreto AWS Secrets Manager (sfUser, sfPassword), nel qual caso non è necessario fornirli. Il segreto deve fornire il contenuto sotto le chiavi sfUser e sfPassword. È possibile farlo fornendo il parametro secretId.

Per la connessione a Snowflake generalmente vengono utilizzati i seguenti parametri.

  • sfDatabase: obbligatorio se in Snowflake non è impostato un valore predefinito per l'utente. Utilizzato per la lettura/scrittura. Il database da utilizzare per la sessione dopo la connessione.

  • sfSchema: obbligatorio se in Snowflake non è impostato un valore predefinito per l'utente. Utilizzato per la lettura/scrittura. Lo schema da utilizzare per la sessione dopo la connessione.

  • sfWarehouse: obbligatorio se in Snowflake non è impostato un valore predefinito per l'utente. Utilizzato per la lettura/scrittura. Il warehouse virtuale predefinito da utilizzare per la sessione dopo la connessione.

  • sfRole: obbligatorio se in Snowflake non è impostato un valore predefinito per l'utente. Utilizzato per la lettura/scrittura. Il ruolo di sicurezza predefinito da utilizzare per la sessione dopo la connessione.

  • sfUrl: (obbligatorio) utilizzato per la lettura/scrittura. Specifica il nome host del tuo account nel seguente formato: account_identifier.snowflakecomputing.com. Per ulteriori informazioni sugli identificatori di account, consulta la pagina Account Identifiers nella documentazione di Snowflake.

  • sfUser: (obbligatorio) utilizzato per la lettura/scrittura. Il nome di accesso per l'utente Snowflake.

  • sfPassword (obbligatorio se non viene fornito pem_private_key). Utilizzato per lettura/scrittura. La password per l'utente Snowflake.

  • dbtable: obbligatorio quando si lavora con tabelle complete. Utilizzato per la lettura/scrittura. Il nome della tabella da leggere o la tabella in cui vengono scritti i dati. Durante la lettura, vengono recuperate tutte le colonne e i record.

  • pem_private_key: utilizzato per la lettura/scrittura. Una stringa di chiave privata non crittografata con codifica b64. La chiave privata per l'utente Snowflake. È comune copiare tale chiave da un file PEM. Per ulteriori informazioni, consulta Autenticazione e rotazione delle coppie di chiavi nella documentazione di Snowflake.

  • query: obbligatorio durante la lettura con una query. Utilizzato per la lettura. La query esatta (istruzione SELECT) da eseguire

Le seguenti opzioni vengono utilizzate per configurare comportamenti specifici durante il processo di connessione a Snowflake.

  • preactions: utilizzato per la lettura/scrittura. Valori validi: elenco di istruzioni SQL separato da punto e virgola in formato stringa. Le istruzioni SQL vengono eseguite prima del trasferimento dei dati tra AWS Glue e Snowflake. Se un'istruzione contiene %s, %s viene sostituito con il nome della tabella a cui si fa riferimento per l'operazione.

  • postactions: utilizzato per la lettura/scrittura. Le istruzioni SQL vengono eseguite dopo il trasferimento dei dati tra AWS Glue e Snowflake. Se un'istruzione contiene %s, %s viene sostituito con il nome della tabella a cui si fa riferimento per l'operazione.

  • autopushdown: valore predefinito: "on". Valori validi: "on", "off". Questo parametro controlla se il pushdown automatico delle query è abilitato. Se il pushdown è abilitato, quando su Spark viene eseguita una query, se una parte di essa può essere "trasferita" al server Snowflake, viene sottoposta a pushdown. Ciò migliora le prestazioni di alcune query. Per sapere se la tua query può essere spostata verso il basso, consulta la sezione Pushdown nella documentazione di Snowflake.

Inoltre, alcune delle opzioni disponibili sul connettore Snowflake Spark potrebbero essere supportate in AWS Glue. Per ulteriori informazioni sulle opzioni disponibili sul connettore Snowflake Spark, consulta la sezione Setting Configuration Options for the Connector nella documentazione di Snowflake.

Limitazioni del connettore Snowflake

La connessione a Snowflake con AWS Glue per Spark è soggetta alle seguenti limitazioni.

  • Questo connettore non supporta i segnalibri di processo. Per ulteriori informazioni sui segnalibri di processo, consultare Monitoraggio dei dati elaborati mediante segnalibri di processo.

  • Questo connettore non supporta la lettura e la scrittura di Snowflake tramite le tabelle in Catalogo dati AWS Glue utilizzando i metodi create_dynamic_frame.from_catalog e write_dynamic_frame.from_catalog.

  • Questo connettore non supporta la connessione a Snowflake con credenziali diverse da utente e password.

  • Questo connettore non è supportato nei processi di flussi di dati.

  • Questo connettore supporta le query basate su istruzioni SELECT per il recupero di informazioni, ad esempio con il parametro query. Altri tipi di query (ad esempio istruzioni DML, SHOW o DESC) non sono supportati.

  • Snowflake limita la dimensione del testo della query (ad esempio istruzioni SQL) inviato tramite i client Snowflake a 1 MB per istruzione. Per ulteriori informazioni, consulta la pagina Limits on Query Text Size.