

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
<a name="aws-glue-programming-etl-connect-snowflake-home"></a>

Puoi usare AWS Glue for 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. Puoi connetterti a Snowflake utilizzando uno dei tre metodi seguenti: autenticazione di base (usando nome utente e password), autenticazione o OAuth autenticazione tramite coppia di chiavi. Puoi fare riferimento alle credenziali Snowflake archiviate tramite le connessioni Gestione dei segreti AWS AWS Glue Data. Connessione dati Le credenziali Snowflake per AWS Glue for Spark vengono archiviate separatamente dalle credenziali Snowflake di Data Catalog per i crawler. È necessario scegliere un tipo di connessione `SNOWFLAKE` e non un tipo di connessione `JDBC`configurato per la connessione a Snowflake.

Per ulteriori informazioni su Snowflake, consulta il [sito Web di Snowflake](https://www.snowflake.com/). Per ulteriori informazioni su Snowflake on AWS, consulta [Snowflake Data Warehouse on Amazon Web Services](https://aws.amazon.com/financial-services/partner-solutions/snowflake/).

## Configurazione delle connessioni Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-configure"></a>

Non ci sono AWS prerequisiti per la connessione ai database Snowflake disponibili tramite Internet.

Facoltativamente, puoi eseguire la seguente configurazione per gestire le credenziali di connessione con AWS Glue.

**Per gestire le credenziali di connessione con AWS Glue**

1. Nel Gestione dei segreti AWS, crea un segreto usando le tue credenziali Snowflake. Per creare un segreto in Secrets Manager, segui il tutorial disponibile in [Crea un Gestione dei segreti AWS segreto](https://docs.aws.amazon.com/secretsmanager/latest/userguide/create_secret.html#create_secret_cli) nella Gestione dei segreti AWS documentazione. Dopo aver creato il segreto, mantieni il nome del segreto {{secretName}} per il passaggio successivo. 
   + Per OAuth l'autenticazione:
     + Quando selezionate **coppie chiave/valore**, create una coppia per {{snowflakeUser}} con la chiave `sfUser`
     + Quando selezionate **coppie chiave/valore**, create una coppia per con la chiave {{OAUTH\_CLIENT\_SECRET}} `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`
   + Per l'autenticazione tramite coppia di chiavi:
     + Quando selezionate **coppie chiave/valore**, create una coppia per con la chiave {{snowflakeUser}} `sfUser`
     + Quando selezionate **coppie chiave/valore**, create una coppia per con la chiave {{private key}} `pem_private_key`
   + Per l'autenticazione di base:
     + Quando selezionate **coppie chiave/valore**, create una coppia per {{snowflakeUser}} con la chiave `USERNAME`
     + Quando selezionate **coppie chiave/valore**, create una coppia per con la chiave {{snowflakePassword}} `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

1. Nella console AWS Glue Studio, crea una connessione scegliendo **Connessioni dati**, 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 a seconda del tipo di account Snowflake (ad esempio AWS, Azure o Snowflake-hosted).
   + Al momento di selezionare il ruolo di servizio IAM, scegliere un'opzione dal menu a discesa. Questo è il ruolo IAM del tuo account che verrà utilizzato per accedere Gestione dei segreti AWS e assegnare l'IP se viene specificato VPC.
   + Quando selezioni un **AWS segreto, fornisci**. {{secretName}}

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

1. Nel passaggio finale della procedura guidata, rivedere le impostazioni e completare il processo per creare la connessione.

Per Snowflake ospitato su AWS un Amazon VPC, potresti aver bisogno di quanto segue:
+ Per Snowflake è necessaria una configurazione Amazon VPC appropriata. Per ulteriori informazioni su come configurare il tuo Amazon VPC, consultare la sezione [AWS PrivateLink & Snowflake](https://docs.snowflake.com/en/user-guide/admin-security-privatelink) nella documentazione di Snowflake.
+ Avrai bisogno di una configurazione Amazon VPC appropriata per AWS Glue. [Configurazione degli endpoint VPC (AWS PrivateLink) per AWS Glue (AWS PrivateLink)](vpc-interface-endpoints.md).
+ Dovrai creare una connessione AWS Glue Data Catalog che fornisca le informazioni di connessione Amazon VPC (oltre all'ID di un Gestione dei segreti AWS segreto che definisce le tue credenziali di sicurezza Snowflake). L'URL cambierà durante l'utilizzo AWS PrivateLink, come descritto nella documentazione Snowflake collegata in un elemento precedente.
+ È necessario che la configurazione del processo includa la connessione a Catalogo dati come **Connessione di rete aggiuntiva**.

## Lettura dalle tabelle Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-read"></a>

**Prerequisiti:** una tabella Snowflake da cui desideri leggere. Avrai bisogno del nome della tabella Snowflake,. {{tableName}} Se l'utente Snowflake non dispone di un set di namespace predefinito, saranno necessari il nome del database Snowflake e il nome dello schema. {{databaseName}} {{schemaName}} Inoltre, se il tuo utente Snowflake non dispone di un set di warehouse predefinito, avrai bisogno di un nome di warehouse. {{warehouseName}} Per selezionare la **connessione di rete aggiuntiva** a cui connettersi, verrà `connectionName` utilizzato il parametro.

```
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
<a name="aws-glue-programming-etl-connect-snowflake-write"></a>

**Prerequisiti:** un database Snowflake su cui scrivere. Avrai bisogno di un nome di tabella attuale o desiderato,{{tableName}}. Se l'utente Snowflake non dispone di un set di namespace predefinito, saranno necessari il nome del database Snowflake e il nome dello schema. {{databaseName}} {{schemaName}} Inoltre, se il tuo utente Snowflake non dispone di un set di warehouse predefinito, avrai bisogno di un nome di warehouse. {{warehouseName}} Per selezionare la **connessione di rete aggiuntiva** a cui connettersi, verrà `connectionName` utilizzato il parametro.

```
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
<a name="aws-glue-programming-etl-connect-snowflake-reference"></a>

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

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

È possibile recuperare i parametri di connessione dai Gestione dei segreti AWS segreti utilizzando il `secretId` parametro. 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`, quando si utilizza l'autenticazione di base)
+ `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`, quando si utilizza l'autenticazione a coppia di chiavi)
+ `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`(quando si utilizza l'autenticazione OAuth )

**Ordine di precedenza delle proprietà:** quando la stessa proprietà viene specificata in più posizioni, AWS Glue utilizza il seguente ordine di precedenza (dal più alto al più basso):

1. Opzioni di connessione indicate esplicitamente nel codice del processo

1. Proprietà di connessione Glue

1. Gestione dei segreti AWS valori segreti (quando `secretId` specificato)

1. 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](https://docs.snowflake.com/en/user-guide/admin-account-identifier) nella documentazione di Snowflake.
+ `sfUser`: (obbligatorio) utilizzato per la lettura/scrittura. Il nome di accesso per l'utente Snowflake.
+ `sfPassword`— (Richiesto quando si utilizza l'autenticazione di base) Utilizzato per la 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`— (Richiesto quando si utilizza l'autenticazione a coppia di chiavi) 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](https://docs.snowflake.com/en/user-guide/key-pair-auth) nella documentazione di Snowflake.
+ `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`— (Richiesto quando si utilizza OAuth l'autenticazione) Utilizzato per operazioni di lettura e scrittura. Questo valore corrisponde a OAUTH\_CLIENT\_SECRET, che può essere ottenuto dall'integrazione di sicurezza Snowflake configurata per abilitare l'autenticazione basata sull'account. OAuth [Per maggiori dettagli, consulta la documentazione sulla configurazione dell'integrazione di OAuth sicurezza Snowflake - Configura Snowflake per client personalizzati. OAuth ](https://docs.snowflake.com/en/user-guide/oauth-custom)
+ `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](https://docs.snowflake.com/en/user-guide/spark-connector-use#pushdown) nella documentazione di Snowflake.

Inoltre, alcune delle opzioni disponibili sul connettore Snowflake Spark potrebbero essere supportate in Glue. AWS Per ulteriori informazioni sulle opzioni disponibili sul connettore Snowflake Spark, consulta la sezione [Setting Configuration Options for the Connector](https://docs.snowflake.com/en/user-guide/spark-connector-use#setting-configuration-options-for-the-connector) nella documentazione di Snowflake. 

## Metodi di autenticazione per Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-authentication"></a>

AWS Glue supporta i seguenti metodi di autenticazione per la connessione a Snowflake:
+ **Autenticazione di base:** Fornitura `sfUser` e parametri`sfPassword`.
+ **Autenticazione con coppia di chiavi: Fornitura** `sfUser` e `pem_private_key` parametri. Quando si utilizza l'autenticazione chiave-coppia, il parametro `sfPassword` non è richiesto.
+ **OAuth autenticazione:** il connettore Snowflake supporta il tipo di concessione AUTHORIZATION\_CODE per richiedere l'accesso ai dati Snowflake. Questo tipo di concessione viene definito «a 3 gambe OAuth», in quanto prevede il reindirizzamento degli utenti a un server di autorizzazione di terze parti dove possono autenticare e approvare l'accesso. Questo metodo viene utilizzato quando si crea una connessione tramite la AWS Glue Console. 
  + **Prerequisito:** per utilizzare questo metodo di autenticazione, assicuratevi che la seguente configurazione sia completa: 
    + **Configura Snowflake OAuth per un client personalizzato** seguendo la documentazione ufficiale di Snowflake: [Configura](https://docs.snowflake.com/en/user-guide/oauth-custom) Snowflake per client personalizzati. OAuth 
    + **Imposta l'URI di reindirizzamento corretto durante la creazione dell'**integrazione di sicurezza Snowflake. Ad esempio: se state creando la connessione nella regione DUB (eu-west-1), l'URI di reindirizzamento dovrebbe essere: `https://eu-west-1.console.aws.amazon.com/gluestudio/oauth` 
    + Dopo aver creato l'integrazione di sicurezza, conservate le seguenti informazioni da utilizzare durante la creazione della connessione Glue: 
      + OAUTH\_CLIENT\_ID: questo valore deve essere fornito come ID client dell'applicazione User Managed Client nella pagina di creazione della connessione Glue.
      + OAUTH\_CLIENT\_SECRET: questo valore deve essere memorizzato nel Secret utilizzato per la connessione, sotto la chiave AWS USER\_MANAGED\_CLIENT\_APPLICATION\_CLIENT\_SECRET.
  + OAuth Ambiti: (Facoltativo) Definisce le autorizzazioni o i livelli di accesso specifici richiesti all'account Snowflake. Ad esempio, un ambito potrebbe limitare l'accesso a una particolare risorsa o operazione.
    + Questo valore può essere specificato nel formato seguente: `session:role:Snowflake_Role_Name`
    + Ad esempio: `session:role:ANALYST_ROLE`
  + URL del codice di autorizzazione: (obbligatorio) L'endpoint a cui l'utente viene reindirizzato per accedere e concedere l'autorizzazione.
    + Ad esempio: `https://host/oauth/authorize`
  + URL del token di autorizzazione: (obbligatorio) L'endpoint utilizzato per scambiare il codice di autorizzazione con un token di accesso.
    + Ad esempio: `https://host/oauth/token-request`
  + User Managed Client Application Client Id: (Obbligatorio) L'identificatore univoco per l'applicazione OAuth client registrata in Snowflake
  + AWS Segreto: (Obbligatorio) Si riferisce a un segreto di AWS Secrets Manager contenente le seguenti coppie chiave-valore:
    + sfUser - Il nome utente di Snowflake
    + USER\_MANAGED\_CLIENT\_APPLICATION\_CLIENT\_SECRET - Il segreto del client associato all'applicazione client OAuth 

Tutti e tre i metodi di autenticazione sono completamente supportati e possono essere configurati utilizzando qualsiasi combinazione di opzioni di connessione, connessioni Glue o Gestione dei segreti AWS segreti.

## Limitazioni del connettore Snowflake
<a name="aws-glue-programming-etl-connect-snowflake-limitations"></a>

La connessione a Snowflake con AWS Glue for 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](monitor-continuations.md).
+ Questo connettore non supporta la lettura e la scrittura di Snowflake tramite tabelle nel AWS Glue Data Catalog utilizzando i `create_dynamic_frame.from_catalog` metodi and. `write_dynamic_frame.from_catalog`
+ Questo connettore supporta l'autenticazione di base, l'autenticazione tramite coppia di chiavi e l'autenticazione. OAuth Altri metodi di autenticazione (come 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](https://docs.snowflake.com/en/user-guide/query-size-limits).