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
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
In Snowflake, genera un utente,
sowflakeUser, e una password,snowflakePassword.In AWS Secrets Manager, crea un segreto utilizzando le tue credenziali Snowflake. Per creare un segreto in Secrets Manager, seguire il tutorial disponibile in Create an AWS Secrets Manager secret nella documentazione di AWS Secrets Manager. Dopo aver creato il segreto, prendere nota del nome,
secretName, per il passaggio successivo.-
Quando si selezionano le coppie chiave/valore, creare una coppia per
snowflakeUsercon la chiaveUSERNAME. -
Quando si selezionano le coppie chiave/valore, creare una coppia per
snowflakePasswordcon la chiavePASSWORD. -
Quando si selezionano le coppie chiave/valore, è possibile fornire la chiave
sfWarehouseal proprio warehouse Snowflake. -
Quando si selezionano coppie chiave/valore, è possibile indicare proprietà di connessione Snowflake aggiuntive utilizzando i nomi delle proprietà Spark corrispondenti come chiavi. Tra le proprietà supportate vi sono:
sfDatabase: nome del database SnowflakesfSchema: nome dello schema SnowflakesfRole: nome del ruolo Snowflakepem_private_key: chiave privata per l'autenticazione chiave-coppia
-
Nel Catalogo dati di AWS Glue, creare una connessione scegliendo Connessioni, quindi Crea connessione. Seguire la procedura guidata di connessione per completare il processo:
Al momento di scegliere un'Origine dati, selezionare Snowflake, poi Avanti.
Inserire i dettagli della connessione, come l'host e la porta. Al momento di inserire l'URL Snowflake dell'host, indicare l'URL dell'istanza Snowflake. Generalmente, l'URL utilizza un nome host nel modulo
. Tuttavia, il formato dell'URL può variare in base al tipo di account Snowflake (ad esempio ospitato su AWS, Azure o Snowflake)account_identifier.snowflakecomputing.com-
Al momento di selezionare il ruolo di servizio IAM, scegliere un'opzione dal menu a discesa. Si tratta del ruolo IAM dell'account che verrà utilizzato per accedere ad AWS Secrets Manager e assegnare l'IP se viene specificato un VPC.
Quando selezioni il Segreto AWS, fornisci
secretName.
Nel passaggio successivo della procedura guidata, impostare le proprietà della connessione Snowflake.
Nel passaggio finale della procedura guidata, rivedere le impostazioni e completare il processo per creare la connessione.
Nelle seguenti situazioni, potrebbe essere necessario quanto segue:
-
Per Snowflake ospitato su AWS in un Amazon VPC
-
Per Snowflake è necessaria una configurazione Amazon VPC appropriata. Per ulteriori informazioni su come configurare il tuo Amazon VPC, consultare la sezione AWS PrivateLink & Snowflake
nella documentazione di Snowflake. -
È necessaria una configurazione Amazon VPC appropriata per AWS Glue. Configurazione degli endpoint VPC (AWS PrivateLink) per AWS Glue (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.
Ad 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 i parametri di connessione dai segreti AWS Secrets Manager utilizzando il parametro secretId. Quando si utilizza Secrets Manager, è possibile recuperare automaticamente le seguenti proprietà Spark, se presenti nel segreto:
sfUser(utilizzando la chiaveUSERNAMEosfUser)sfPassword(utilizzando la chiavePASSWORDosfPassword)sfWarehouse(utilizzando la chiavesfWarehouse)sfDatabase(utilizzando la chiavesfDatabase)sfSchema(utilizzando la chiavesfSchema)sfRole(utilizzando la chiavesfRole)pem_private_key(utilizzando la chiavepem_private_key)
Ordine di precedenza delle proprietà: quando la stessa proprietà viene specificata in più posizioni, AWS Glue segue questo ordine di precedenza (dal più alto al più basso):
Opzioni di connessione indicate esplicitamente nel codice del processo
Proprietà di connessione del Catalogo dati
Valori del segreto AWS Secrets Manager (quando è specificato un
secretId)Impostazioni predefinite dell'utente Snowflake
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:. Per ulteriori informazioni sugli identificatori di account, consulta la pagina Account Identifiersaccount_identifier.snowflakecomputing.comnella documentazione di Snowflake. sfUser: (obbligatorio) utilizzato per la lettura/scrittura. Il nome di accesso per l'utente Snowflake.sfPassword(obbligatorio se non viene fornitopem_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 chiavinella documentazione di Snowflake. query: obbligatorio durante la lettura con una query. Utilizzato per la lettura. La query esatta (istruzioneSELECT) 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,%sviene 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,%sviene 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 Pushdownnella 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
Metodi di autenticazione per Snowflake
AWS Glue supporta i seguenti metodi di autenticazione per la connessione a Snowflake:
-
Autenticazione con nome utente e password: fornire i parametri
sfUseresfPassword. -
Autenticazione chiave-coppia: fornire i parametri
sfUserepem_private_key. Quando si utilizza l'autenticazione chiave-coppia, il parametrosfPasswordnon è richiesto.
Entrambi i metodi di autenticazione sono completamente supportati e possono essere configurati utilizzando una qualsiasi combinazione di opzioni di connessione, connessioni del Catalogo dati o segreti AWS Secrets Manager.
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_catalogewrite_dynamic_frame.from_catalog. -
Questo connettore supporta le autenticazioni nome utente/password e chiave-coppia. Altri metodi di autenticazione (come OAuth o SAML) non sono attualmente supportati.
-
Questo connettore non è supportato nei processi di flussi di dati.
-
Questo connettore supporta le query basate su istruzioni
SELECTper il recupero di informazioni, ad esempio con il parametroquery. Altri tipi di query (ad esempio istruzioni DML,SHOWoDESC) 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
.