Esempi di utilizzo del connettore Python Amazon Redshift - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

Esempi di utilizzo del connettore Python Amazon Redshift

Di seguito sono riportati degli esempio di utilizzo del connettore Python Amazon Redshift. Per eseguirli, è prima necessario installare il connettore Python. Per ulteriori informazioni sull'installazione del connettore Amazon Redshift Python, consulta Installazione del connettore Amazon Redshift Python. Per ulteriori informazioni sulle opzioni di configurazione che è possibile utilizzare con il connettore Python, consulta Opzioni di configurazione per il connettore Amazon Redshift Python.

Connessione a ed esecuzione di query su un cluster Amazon Redshift utilizzando credenziali AWS

Nell'esempio riportato di seguito viene illustrata la connessione a un cluster Amazon Redshift utilizzando le credenziali AWS, l'esecuzione di query su una tabella e il recupero dei risultati corrispondenti.

#Connect to the cluster >>> import redshift_connector >>> conn = redshift_connector.connect( host='examplecluster.abc123xyz789.us-west-1.redshift.amazonaws.com', database='dev', port=5439, user='awsuser', password='my_password' ) # Create a Cursor object >>> cursor = conn.cursor() # Query a table using the Cursor >>> cursor.execute("select * from book") #Retrieve the query result set >>> result: tuple = cursor.fetchall() >>> print(result) >> (['One Hundred Years of Solitude', 'Gabriel García Márquez'], ['A Brief History of Time', 'Stephen Hawking'])

Abilitazione di autocommit

La proprietà autocommit è disattivata per impostazione predefinita, seguendo la specifica dell'API del database Python. Per attivare la proprietà autocommit della connessione, è possibile utilizzare i comandi riportati di seguito dopo aver eseguito un comando di ripristino dello stato precedente per assicurarsi che non sia in corso una transazione.

#Connect to the cluster >>> import redshift_connector >>> conn = redshift_connector.connect(...) # Run a rollback command >>> conn.rollback() # Turn on autocommit >>> conn.autocommit = True >>> conn.run("VACUUM") # Turn off autocommit >>> conn.autocommit = False

Configurazione del paramstyle del cursore

Il paramstyle di un cursore può essere modificato utilizzando cursor.paramstyle. Il paramstyle predefinito usato è format. I valori validi per il paramstyle sono qmark, numeric, named, format e pyformat.

Di seguito sono riportati alcuni esempi di utilizzo di vari paramstyle per passare i parametri a un'istruzione SQL di esempio.

# qmark redshift_connector.paramstyle = 'qmark' sql = 'insert into foo(bar, jar) VALUES(?, ?)' cursor.execute(sql, (1, "hello world")) # numeric redshift_connector.paramstyle = 'numeric' sql = 'insert into foo(bar, jar) VALUES(:1, :2)' cursor.execute(sql, (1, "hello world")) # named redshift_connector.paramstyle = 'named' sql = 'insert into foo(bar, jar) VALUES(:p1, :p2)' cursor.execute(sql, {"p1":1, "p2":"hello world"}) # format redshift_connector.paramstyle = 'format' sql = 'insert into foo(bar, jar) VALUES(%s, %s)' cursor.execute(sql, (1, "hello world")) # pyformat redshift_connector.paramstyle = 'pyformat' sql = 'insert into foo(bar, jar) VALUES(%(bar)s, %(jar)s)' cursor.execute(sql, {"bar": 1, "jar": "hello world"})

Utilizzo di COPY e UNLOAD rispettivamente per copiare e scrivere dati in un bucket Amazon S3

L'esempio seguente mostra come copiare i dati da un bucket Amazon S3 in una tabella e quindi scaricarli da tale tabella nel bucket.

Un file di testo denominato category_csv.txt contenente i seguenti dati viene caricato in un bucket Amazon S3.

12,Shows,Musicals,Musical theatre 13,Shows,Plays,"All ""non-musical"" theatre" 14,Shows,Opera,"All opera, light, and ""rock"" opera" 15,Concerts,Classical,"All symphony, concerto, and choir concerts"

Di seguito è riportato un esempio del codice Python, che per primo si connette al database Amazon Redshift. Quindi crea una tabella chiamata category e copia i dati CSV dal bucket S3 nella tabella.

#Connect to the cluster and create a Cursor >>> import redshift_connector >>> with redshift_connector.connect(...) as conn: >>> with conn.cursor() as cursor: #Create an empty table >>> cursor.execute("create table category (catid int, cargroup varchar, catname varchar, catdesc varchar)") #Use COPY to copy the contents of the S3 bucket into the empty table >>> cursor.execute("copy category from 's3://testing/category_csv.txt' iam_role 'arn:aws:iam::123:role/RedshiftCopyUnload' csv;") #Retrieve the contents of the table >>> cursor.execute("select * from category") >>> print(cursor.fetchall()) #Use UNLOAD to copy the contents of the table into the S3 bucket >>> cursor.execute("unload ('select * from category') to 's3://testing/unloaded_category_csv.txt' iam_role 'arn:aws:iam::123:role/RedshiftCopyUnload' csv;") #Retrieve the contents of the bucket >>> print(cursor.fetchall()) >> ([12, 'Shows', 'Musicals', 'Musical theatre'], [13, 'Shows', 'Plays', 'All "non-musical" theatre'], [14, 'Shows', 'Opera', 'All opera, light, and "rock" opera'], [15, 'Concerts', 'Classical', 'All symphony, concerto, and choir concerts'])

Se autocommit non è impostato su True, esegui il commit con conn.commit() dopo aver eseguito le istruzioni execute().

I dati vengono scaricati nel file unloaded_category_csv.text0000_part00 nel bucket S3 contenente quanto segue:

12,Shows,Musicals,Musical theatre 13,Shows,Plays,"All ""non-musical"" theatre" 14,Shows,Opera,"All opera, light, and ""rock"" opera" 15,Concerts,Classical,"All symphony, concerto, and choir concerts"