Connessioni Snowflake - AWS Glue

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, 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 snowflakeUser con la chiave USERNAME.

    • Quando si selezionano le coppie chiave/valore, creare una coppia per snowflakePassword con la chiave PASSWORD.

    • Quando si selezionano le coppie chiave/valore, è possibile fornire la chiave sfWarehouse al 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 Snowflake

      • sfSchema: nome dello schema Snowflake

      • sfRole: nome del ruolo Snowflake

      • pem_private_key: chiave privata per l'autenticazione chiave-coppia

  3. 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 account_identifier.snowflakecomputing.com. Tuttavia, il formato dell'URL può variare in base al tipo di account Snowflake (ad esempio ospitato su AWS, Azure o Snowflake)

    • 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.

  4. Nel passaggio successivo della procedura guidata, impostare le proprietà della connessione Snowflake.

  5. 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 chiave USERNAME o sfUser)

  • sfPassword (utilizzando la chiave PASSWORD o sfPassword)

  • sfWarehouse (utilizzando la chiave sfWarehouse)

  • sfDatabase (utilizzando la chiave sfDatabase)

  • sfSchema (utilizzando la chiave sfSchema)

  • sfRole (utilizzando la chiave sfRole)

  • pem_private_key (utilizzando la chiave pem_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):

  1. Opzioni di connessione indicate esplicitamente nel codice del processo

  2. Proprietà di connessione del Catalogo dati

  3. Valori del segreto AWS Secrets Manager (quando è specificato un secretId)

  4. 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: 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.

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 sfUser e sfPassword.

  • Autenticazione chiave-coppia: fornire i parametri sfUser e pem_private_key. Quando si utilizza l'autenticazione chiave-coppia, il parametro sfPassword non è 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_catalog e write_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 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.