Connessioni Redshift - 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 Redshift

Puoi usare AWS Glue for Spark per leggere e scrivere su tabelle nei database Amazon Redshift. Quando si connette ai database Amazon Redshift, AWS Glue sposta i dati tramite Amazon S3 per ottenere il massimo throughput, utilizzando Amazon Redshift e i comandi. SQL COPY UNLOAD In AWS Glue 4.0 e versioni successive, puoi utilizzare l'integrazione Amazon Redshift per Apache Spark per leggere e scrivere con ottimizzazioni e funzionalità specifiche di Amazon Redshift oltre a quelle disponibili durante la connessione tramite versioni precedenti.

Scopri come AWS Glue sta semplificando più che mai per gli utenti di Amazon Redshift la migrazione a AWS Glue per l'integrazione dei dati senza server e. ETL

Configurazione delle connessioni Redshift

Per utilizzare i cluster Amazon Redshift in AWS Glue, sono necessari alcuni prerequisiti:

  • Una directory Amazon S3 da utilizzare per l'archiviazione temporanea durante la lettura e la scrittura sul database.

  • Un Amazon VPC che abilita la comunicazione tra il cluster Amazon Redshift, il job AWS Glue e la directory Amazon S3.

  • IAMAutorizzazioni appropriate per il lavoro AWS Glue e il cluster Amazon Redshift.

Configurazione dei ruoli IAM

Configurazione del ruolo per il cluster Amazon Redshift

Il tuo cluster Amazon Redshift deve essere in grado di leggere e scrivere su Amazon S3 per integrarsi con AWS Glue jobs. Per consentire ciò, puoi associare IAM ruoli al cluster Amazon Redshift a cui desideri connetterti. Il tuo ruolo dovrebbe disporre di una policy che consenta la lettura e la scrittura nella tua directory temporanea di Amazon S3. Il tuo ruolo dovrebbe avere un rapporto di fiducia che consenta al servizio redshift.amazonaws.com di AssumeRole.

Associare un IAM ruolo ad Amazon Redshift
  1. Prerequisiti: un bucket o una directory Amazon S3 utilizzato per l'archiviazione temporanea dei file.

  2. Identifica le autorizzazioni Amazon S3 che occorreranno al cluster Amazon Redshift. Quando si spostano dati da e verso un cluster Amazon Redshift, AWS COPY Glue jobs rilascia UNLOAD dichiarazioni contro Amazon Redshift. Se il tuo job modifica una tabella in Amazon Redshift, AWS Glue emetterà anche CREATE LIBRARY delle dichiarazioni. Per informazioni sulle autorizzazioni specifiche di Amazon S3 necessarie ad Amazon Redshift per eseguire queste istruzioni, consulta la documentazione di Amazon Redshift: Amazon Redshift: Permissions to access other Resources. AWS

  3. Nella IAM console, crea una IAM policy con le autorizzazioni necessarie. Per ulteriori informazioni sulla creazione di una politica Creazione IAM di politiche.

  4. Nella IAM console, crea una relazione di ruolo e fiducia che consenta ad Amazon Redshift di assumere il ruolo. Segui le istruzioni nella IAM documentazione Per creare un ruolo per un AWS servizio (console)

    • Quando ti viene chiesto di scegliere un caso d'uso del AWS servizio, scegli «Redshift - Personalizzabile».

    • Quando ti viene chiesto di collegare una policy, scegli la policy che hai definito in precedenza.

    Nota

    Per ulteriori informazioni sulla configurazione dei ruoli per Amazon Redshift, consulta Autorizzazione di Amazon Redshift ad AWS accedere ad altri servizi per tuo conto nella documentazione di Amazon Redshift.

  5. Da Amazon Redshift, associa il ruolo al tuo cluster Amazon Redshift. Segui le istruzioni nella documentazione di Amazon Redshift.

    Seleziona l'opzione evidenziata nella console Amazon Redshift per configurare questa impostazione:

    Un esempio di dove gestire le IAM autorizzazioni nella console Amazon Redshift.
Nota

Per impostazione predefinita, i lavori AWS Glue passano le credenziali temporanee di Amazon Redshift create utilizzando il ruolo che hai specificato per eseguire il lavoro. Non è consigliabile utilizzare queste credenziali. Per motivi di sicurezza, queste credenziali scadono dopo 1 ora.

Imposta il ruolo per il lavoro AWS Glue

Il job AWS Glue richiede un ruolo per accedere al bucket Amazon S3. Non hai bisogno di IAM autorizzazioni per il cluster Amazon Redshift, il tuo accesso è controllato dalla connettività in VPC Amazon e dalle credenziali del database.

Configura Amazon VPC

Per configurare l'accesso ai datastore Amazon Redshift
  1. Accedi a AWS Management Console e apri la console Amazon Redshift all'indirizzo. https://console.aws.amazon.com/redshiftv2/

  2. Nel pannello di navigazione a sinistra, seleziona Cluster.

  3. Seleziona il nome del cluster al quale desideri accedere da AWS Glue.

  4. Nella sezione Proprietà del cluster, scegli un gruppo di sicurezza tra i gruppi di VPC sicurezza di cui AWS Glue consentirne l'utilizzo. Registra il nome del gruppo di sicurezza scelto per riferimenti futuri. La scelta del gruppo di sicurezza apre l'elenco dei gruppi di sicurezza della EC2 console Amazon.

  5. Scegli il gruppo di sicurezza da modificare e passa alla scheda Inbound (In entrata).

  6. Aggiungi una regola autoreferenziale per permettere ai componenti di AWS Glue di comunicare tra loro. In particolare, aggiungi o verifica che sia presente una regola con Type (Tipo) All TCP, Protocol (Protocollo) TCP, Port Range (Intervallo porte) che include tutte le porte e Source (Origine) corrispondente al nome del gruppo di sicurezza indicato da Group ID (ID gruppo).

    La regola in entrata è simile alla seguente:

    Type Protocollo Intervallo porte Origine

    Tutti TCP

    TCP

    0–65535

    database-security-group

    Per esempio:

    Esempio di regola autoreferenziale per il traffico in entrata.
  7. Aggiungi una regola anche per il traffico in uscita. Quindi, apri il traffico in uscita per tutte le porte, ad esempio:

    Type Protocollo Intervallo porte Destinazione

    All Traffic

    ALL

    ALL

    0.0.0.0/0

    In alternativa, crea una regola autoreferenziale in cui Type (Tipo) All TCP, Protocol (Protocollo) sta per TCP e Port Range (Intervallo porte) include tutte le porte, la cui Destination (Destinazione) ha lo stesso nome del gruppo di sicurezza del Group ID (ID gruppo). Se utilizzi un VPC endpoint Amazon S3, aggiungi anche una HTTPS regola per l'accesso ad Amazon S3. Il s3-prefix-list-id è obbligatorio nella regola del gruppo di sicurezza per consentire il traffico dall'endpoint Amazon S3 VPC all'endpoint Amazon S3VPC.

    Per esempio:

    Type Protocollo Intervallo porte Destinazione

    Tutto TCP

    TCP

    0–65535

    security-group

    HTTPS

    TCP

    443

    s3-prefix-list-id

Configura AWS Glue

Dovrai creare una connessione AWS Glue Data Catalog che fornisca informazioni sulla VPC connessione Amazon.

Per configurare Amazon Redshift, la VPC connettività Amazon a AWS Glue nella console:
  1. Crea una connessione a Catalogo dati seguendo i passaggi indicati nella sezione Aggiungere una AWS Glue connessione. Dopo aver creato la connessione, mantieni il nome della connessione, connectionName, per il passaggio successivo.

    • Quando selezioni un Tipo di connessione, seleziona Amazon Redshift.

    • Quando selezioni un Cluster Redshift, seleziona il tuo cluster in base al nome.

    • Fornisci informazioni di connessione predefinite per un utente Amazon Redshift sul tuo cluster.

    • Le tue VPC impostazioni Amazon verranno configurate automaticamente.

    Nota

    Dovrai fornire manualmente il tuo PhysicalConnectionRequirements account Amazon VPC quando crei una connessione Amazon Redshift tramite. AWS SDK

  2. Nella configurazione del tuo lavoro AWS Glue, fornisci connectionName come connessione di rete aggiuntiva.

Esempio: lettura da tabelle Amazon Redshift

È possibile leggere da cluster Amazon Redshift e ambienti Amazon Redshift serverless.

Prerequisiti: una tabella Amazon Redshift da cui desideri leggere. Segui i passaggi della sezione precedente, Configurazione delle connessioni Redshift dopodiché dovresti avere Amazon S3 URI per una directory temporanea, temp-s3-dir e un IAM ruolo, rs-role-name, (nell'account role-account-id).

Using the Data Catalog

Prerequisiti aggiuntivi: un database Catalogo dati e una tabella dai quali desideri che la tabella Amazon Redshift legga. Per ulteriori informazioni su Catalogo dati, consulta la pagina Scoperta e catalogazione dei dati in AWS Glue. Dopo aver creato una voce per la tabella Amazon Redshift, identificherai la tua connessione con un redshift-dc-database-name e redshift-table-name.

Configurazione: nelle opzioni della funzione identificherai la tabella di Catalogo dati con i parametri database e table_name. Identificherai la tua directory temporanea Amazon S3 con redshift_tmp_dir. Fornirai anche rs-role-name utilizzando la aws_iam_role chiave nel additional_options parametro.

glueContext.create_dynamic_frame.from_catalog( database = "redshift-dc-database-name", table_name = "redshift-table-name", redshift_tmp_dir = args["temp-s3-dir"], additional_options = {"aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name"})
Connecting directly

Prerequisiti aggiuntivi: è necessario il nome della tabella Amazon Redshift (redshift-table-name. Avrai bisogno delle informazioni di JDBC connessione per il cluster Amazon Redshift che archivia quella tabella. Fornirai le informazioni di connessione con host, port, redshift-database-name, username e password.

Quando lavori con i cluster Amazon Redshift, puoi recuperare le informazioni di connessione dalla console Amazon Redshift. Se utilizzi Amazon Redshift serverless, consulta la sezione Connecting to Amazon Redshift Serverless nella documentazione di Amazon Redshift.

Configurazione: nelle opzioni della funzione identificherai i parametri di connessione con url, dbtable, user e password. Identificherai la tua directory temporanea Amazon S3 con redshift_tmp_dir. Puoi specificare il tuo IAM ruolo utilizzando aws_iam_role when you usefrom_options. La sintassi è simile alla connessione tramite Catalogo dati, ma è necessario inserire i parametri nella mappa connection_options.

È una cattiva pratica codificare le password negli script AWS Glue. Valuta la possibilità di archiviare le password AWS Secrets Manager e recuperarle nello script con for SDK Python (Boto3).

my_conn_options = { "url": "jdbc:redshift://host:port/redshift-database-name", "dbtable": "redshift-table-name", "user": "username", "password": "password", "redshiftTmpDir": args["temp-s3-dir"], "aws_iam_role": "arn:aws:iam::account id:role/rs-role-name" } df = glueContext.create_dynamic_frame.from_options("redshift", my_conn_options)

Esempio: scrittura su tabelle Amazon Redshift

È possibile scrivere su cluster Amazon Redshift e ambienti Amazon Redshift serverless.

Prerequisiti: un cluster Amazon Redshift e segui i passaggi nella Configurazione delle connessioni Redshift sezione precedente, dopodiché dovresti avere Amazon URI S3 per una directory temporanea, temp-s3-dir e un ruolo, IAM rs-role-name, (nell'account role-account-id). Avrai anche bisogno di un file di DynamicFrame cui desideri scrivere il contenuto nel database.

Using the Data Catalog

Prerequisiti aggiuntivi: un database Catalogo dati sul quale desideri che scrivano il cluster e la tabella Amazon Redshift. Per ulteriori informazioni su Catalogo dati, consulta la pagina Scoperta e catalogazione dei dati in AWS Glue. Identificherai la tua connessione con redshift-dc-database-name e la tabella degli obiettivi con redshift-table-name.

Configurazione: nelle opzioni della funzione identificherai il database di Catalogo dati con il parametro database, quindi fornirai la tabella con table_name. Identificherai la tua directory temporanea Amazon S3 con redshift_tmp_dir. Fornirai anche rs-role-name utilizzando la aws_iam_role chiave nel additional_options parametro.

glueContext.write_dynamic_frame.from_catalog( frame = input dynamic frame, database = "redshift-dc-database-name", table_name = "redshift-table-name", redshift_tmp_dir = args["temp-s3-dir"], additional_options = {"aws_iam_role": "arn:aws:iam::account-id:role/rs-role-name"})
Connecting through a AWS Glue connection

È possibile connettersi ad Amazon Redshift direttamente utilizzando il metodo write_dynamic_frame.from_options. Tuttavia, anziché inserire i dettagli di connessione direttamente nello script, puoi fare riferimento ai dettagli di connessione archiviati in una connessione a Catalogo dati con il metodo from_jdbc_conf. È possibile eseguire questa operazione senza effettuare il crawling o creare tabelle di Catalogo dati per il database. Per ulteriori informazioni sulle connessioni a Catalogo dati, consulta la pagina Connessione ai dati.

Prerequisiti aggiuntivi: una connessione a Catalogo dati per il database, una tabella Amazon Redshift da cui desideri leggere

Configurazione: identificherai la tua connessione al Data Catalog con dc-connection-name. Identificherai il database e la tabella Amazon Redshift con redshift-table-name e redshift-database-name. Fornirai le informazioni di connessione del tuo Data Catalog catalog_connection e le informazioni relative ad Amazon Redshift con dbtable e. database La sintassi è simile alla connessione tramite Catalogo dati, ma è necessario inserire i parametri nella mappa connection_options.

my_conn_options = { "dbtable": "redshift-table-name", "database": "redshift-database-name", "aws_iam_role": "arn:aws:iam::role-account-id:role/rs-role-name" } glueContext.write_dynamic_frame.from_jdbc_conf( frame = input dynamic frame, catalog_connection = "dc-connection-name", connection_options = my_conn_options, redshift_tmp_dir = args["temp-s3-dir"])

Indicazioni di riferimento alle opzione di connessione ad Amazon Redshift

Le opzioni di connessione di base utilizzate per tutte le JDBC connessioni AWS Glue per impostare informazioni come url user e password sono coerenti per tutti i JDBC tipi. Per ulteriori informazioni sui JDBC parametri standard, vedereIndicazioni di riferimento alle opzioni di connessione a JDBC.

Il tipo di connessione Amazon Redshift richiede alcune opzioni di connessione aggiuntive:

  • "redshiftTmpDir": (obbligatorio) il percorso Amazon S3 in cui i dati temporanei possono essere caricati durante la copia dal database.

  • "aws_iam_role": (Facoltativo) ARN per un IAM ruolo. Il job AWS Glue passerà questo ruolo al cluster Amazon Redshift per concedere al cluster le autorizzazioni necessarie per completare le istruzioni del job.

Opzioni di connessione aggiuntive disponibili in AWS Glue 4.0+

Puoi anche passare le opzioni per il nuovo connettore Amazon Redshift tramite le opzioni di connessione AWS Glue. Per un elenco completo delle opzioni di connettore supportate, consulta la sezione SQLParametri Spark nell'integrazione di Amazon Redshift per Apache Spark.

Per comodità, ribadiamo di seguito alcune nuove opzioni:

Nome Obbligatorio Predefinito Descrizione

autopushdown

No TRUE

Applica il pushdown di predicati e interrogazioni acquisendo e analizzando i piani operativi logici di Spark. SQL Le operazioni vengono tradotte in una SQL query e quindi eseguite in Amazon Redshift per migliorare le prestazioni.

autopushdown.s3_result_cache

No FALSE

Memorizza nella cache la SQL query per scaricare i dati per la mappatura dei percorsi di Amazon S3 in memoria in modo che la stessa query non debba essere eseguita nuovamente nella stessa sessione Spark. Supportato solo quando autopushdown è abilitato.

unload_s3_format

No PARQUET

PARQUET- Scarica i risultati della query in formato Parquet.

TEXT- Scarica i risultati dell'interrogazione in un formato di testo delimitato da tubi.

sse_kms_key

No N/D

La KMS chiave AWS SSE - da utilizzare per la crittografia durante UNLOAD le operazioni anziché la crittografia predefinita per. AWS

extracopyoptions

No N/D

Un elenco di opzioni aggiuntive da aggiungere al comando Amazon COPY Redshift durante il caricamento dei dati, ad esempio TRUNCATECOLUMNS MAXERROR n o (per altre opzioni COPYvedi: Parametri opzionali).

È importante notare che, poiché queste opzioni vengono aggiunte alla fine del comando COPY, è possibile utilizzare solo le opzioni rilevanti alla fine del comando. Questo dovrebbe coprire la maggior parte dei casi d'uso possibili.

cvsnullstring (sperimentale)

No NULL

Il valore String da scrivere per i valori null quando si utilizza. CSV tempformat Dovrebbe trattarsi di un valore che non è presente nei dati effettivi.

Questi nuovi parametri possono essere utilizzati nei seguenti modi.

Nuove opzioni per il miglioramento delle prestazioni

Il nuovo connettore introduce alcune nuove opzioni di miglioramento delle prestazioni:

  • autopushdown: abilitato per impostazione predefinita.

  • autopushdown.s3_result_cache: disabilitato per impostazione predefinita.

  • unload_s3_format: PARQUET per impostazione predefinita.

Per informazioni sull'utilizzo di queste opzioni, consulta Integrazione di Amazon Redshift per Apache Spark. Si consiglia di non attivare autopushdown.s3_result_cache quando si eseguono operazioni di lettura e scrittura miste perché i risultati memorizzati nella cache potrebbero contenere informazioni obsolete. L'opzione unload_s3_format è impostata su PARQUET per impostazione predefinita per il comando UNLOAD per migliorare le prestazioni e ridurre i costi di archiviazione. Per utilizzare il comportamento predefinito del comando UNLOAD, reimposta l'opzione su TEXT.

Nuova opzione di crittografia per la lettura

Per impostazione predefinita, i dati nella cartella temporanea utilizzata da AWS Glue durante la lettura dei dati dalla tabella Amazon Redshift vengono crittografati tramite la crittografia SSE-S3. Per utilizzare le chiavi gestite dai clienti di AWS Key Management Service (AWS KMS) per crittografare i dati, puoi impostare la ("sse_kms_key" → kmsKey) ksmKey provenienza dell'ID della chiave AWS KMS, anziché l'opzione di impostazione precedente ("extraunloadoptions" → s"ENCRYPTED KMS_KEY_ID '$kmsKey'") nella AWS Glue versione 3.0.

datasource0 = glueContext.create_dynamic_frame.from_catalog( database = "database-name", table_name = "table-name", redshift_tmp_dir = args["TempDir"], additional_options = {"sse_kms_key":"<KMS_KEY_ID>"}, transformation_ctx = "datasource0" )
Basato IAM su Support JDBC URL

Il nuovo connettore supporta un sistema IAM basato JDBCURL, quindi non è necessario inserire un utente/password o un segreto. Con un IAM basato JDBCURL, il connettore utilizza il ruolo Job Runtime per accedere alla fonte di dati Amazon Redshift.

Fase 1: collegamento della seguente politica minima obbligatoria al ruolo di runtime del processo AWS Glue.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": [ "arn:aws:redshift:<region>:<account>:dbgroup:<cluster name>/*", "arn:aws:redshift:*:<account>:dbuser:*/*", "arn:aws:redshift:<region>:<account>:dbname:<cluster name>/<database name>" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "redshift:DescribeClusters", "Resource": "*" } ] }

Passaggio 2: utilizza il modello IAM basato JDBC URL come segue. Specifica una nuova opzione DbUser con il nome utente Amazon Redshift con cui ti stai connettendo.

conn_options = { // IAM-based JDBC URL "url": "jdbc:redshift:iam://<cluster name>:<region>/<database name>", "dbtable": dbtable, "redshiftTmpDir": redshiftTmpDir, "aws_iam_role": aws_iam_role, "DbUser": "<Redshift User name>" // required for IAM-based JDBC URL } redshift_write = glueContext.write_dynamic_frame.from_options( frame=dyf, connection_type="redshift", connection_options=conn_options ) redshift_read = glueContext.create_dynamic_frame.from_options( connection_type="redshift", connection_options=conn_options )
Nota

DynamicFrameAttualmente A supporta solo un modello IAM basato JDBC URL con a DbUser nel GlueContext.create_dynamic_frame.from_options flusso di lavoro.

Migrazione da AWS Glue versione 3.0 alla versione 4.0

In AWS Glue 4.0, i ETL lavori hanno accesso a un nuovo connettore Amazon Redshift Spark e a un nuovo JDBC driver con diverse opzioni e configurazioni. Il nuovo connettore e driver Amazon Redshift sono stati progettati per le prestazioni e garantiscono la coerenza transazionale dei dati. Questi prodotti sono illustrati nella documentazione di Amazon Redshift. Per ulteriori informazioni, consultare:

Restrizione dei nomi e degli identificatori di tabelle/colonne

Il nuovo connettore e il driver Amazon Redshift Spark hanno un requisito più limitato per il nome della tabella Redshift. Per ulteriori informazioni, consulta Nomi e identificatori per definire il nome della tabella Amazon Redshift. Il flusso di lavoro relativo ai segnalibri del processo potrebbe non funzionare con un nome di tabella che non corrisponde alle regole e con determinati caratteri, ad esempio uno spazio.

Se hai tabelle legacy con nomi non conformi alle regole dei nomi e degli identificatori e riscontri problemi con i segnalibri (processi che rielaborano i vecchi dati delle tabelle Amazon Redshift), ti consigliamo di rinominare le tabelle. Per ulteriori informazioni, consulta ALTERTABLEalcuni esempi.

Modifica del formato temporale predefinito in Dataframe

La AWS Glue versione 3.0 del connettore Spark imposta come impostazione predefinita CSV durante la scrittura tempformat su Amazon Redshift. Per continuità, in AWS Glue versione 3.0, DynamicFrame è ancora impostato su tempformat per l'uso di CSV. Se in precedenza hai utilizzato Spark Dataframe APIs direttamente con il connettore Amazon Redshift Spark, puoi impostarlo in modo esplicito nelle opzioni/. tempformat CSV DataframeReader Writer Altrimenti, tempformat è impostato su AVRO nel nuovo connettore Spark.

Modifica del comportamento: mappatura del tipo di dati Amazon Redshift sul tipo REAL di dati Spark anziché FLOAT DOUBLE

In AWS Glue versione 3.0, Amazon Redshift REAL viene convertito in un tipo DOUBLE Spark. Il nuovo connettore Amazon Redshift Spark ha aggiornato il comportamento in modo che il tipo REAL Amazon Redshift venga viene convertito e di nuovo dal tipo FLOAT Spark. Se hai un caso d'uso precedente in cui desideri ancora che il tipo REAL Amazon Redshift sia mappato a un tipo DOUBLE Spark, puoi utilizzare la seguente soluzione alternativa:

  • Per un DynamicFrame, mappa il tipo Float a un tipo Double con DynamicFrame.ApplyMapping. Per un Dataframe, è necessario usare cast.

Esempio di codice:

dyf_cast = dyf.apply_mapping([('a', 'long', 'a', 'long'), ('b', 'float', 'b', 'double')])