

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

# Usare dbt con Amazon MWAA
<a name="samples-dbt"></a>

Questo argomento dimostra come utilizzare dbt e Postgres con Amazon MWAA. Nei passaggi seguenti, aggiungerai le dipendenze richieste al tuo `requirements.txt` e caricherai un progetto dbt di esempio nel bucket Amazon S3 del tuo ambiente. Quindi, utilizzerai un DAG di esempio per verificare che Amazon MWAA abbia installato le dipendenze e infine utilizzerai il `BashOperator` per eseguire il progetto dbt.

**Topics**
+ [Versione](#samples-dbt-version)
+ [Prerequisiti](#samples-dbt-prereqs)
+ [Dipendenze](#samples-dbt-dependencies)
+ [Caricare un progetto dbt su Amazon S3](#samples-dbt-upload-project)
+ [Utilizzate un DAG per verificare l'installazione della dipendenza da dbt](#samples-dbt-test-dependencies)
+ [Usa un DAG per eseguire un progetto dbt](#samples-dbt-run-project)

## Versione
<a name="samples-dbt-version"></a>

**[È possibile utilizzare l'esempio di codice in questa pagina con **Apache Airflow v2 in Python 3.10 e Apache Airflow v3**[in Python 3.11](https://peps.python.org/pep-0619/).](https://peps.python.org/pep-0664/)**

## Prerequisiti
<a name="samples-dbt-prereqs"></a>

Prima di poter completare i seguenti passaggi, avrai bisogno di quanto segue:
+ Un [ambiente Amazon MWAA che utilizza Apache](get-started.md) Airflow v2.2.2. Questo esempio è stato scritto e testato con la versione 2.2.2. Potrebbe essere necessario modificare l'esempio per utilizzarlo con altre versioni di Apache Airflow.
+ Un esempio di progetto dbt. Per iniziare a usare dbt con Amazon MWAA, puoi creare un fork e clonare il progetto [dbt starter dal repository dbt-labs](https://github.com/dbt-labs/dbt-starter-project). GitHub 

## Dipendenze
<a name="samples-dbt-dependencies"></a>

Per usare Amazon MWAA con dbt, aggiungi il seguente script di avvio al tuo ambiente. Per ulteriori informazioni, consulta [Usare uno script di avvio con Amazon MWAA](using-startup-script.md).

```
#!/bin/bash
			
  if [[ "${MWAA_AIRFLOW_COMPONENT}" != "worker" ]]
    then
      exit 0
  fi
			
  echo "------------------------------"
  echo "Installing virtual Python env"
  echo "------------------------------"
			
  pip3 install --upgrade pip
			
  echo "Current Python version:"
  python3 --version 
  echo "..."
			
  sudo pip3 install --user virtualenv
  sudo mkdir python3-virtualenv
  cd python3-virtualenv
  sudo python3 -m venv dbt-env
  sudo chmod -R 777 *
			
  echo "------------------------------"
  echo "Activating venv in"
  $DBT_ENV_PATH
	  		echo "------------------------------"
			
  source dbt-env/bin/activate
  pip3 list
			
  echo "------------------------------"
  echo "Installing libraries..."
  echo "------------------------------"
			
  # do not use sudo, as it will install outside the venv
  pip3 install dbt-redshift==1.6.1 dbt-postgres==1.6.1
			
  echo "------------------------------"
  echo "Venv libraries..."
  echo "------------------------------"
			
  pip3 list
  dbt --version
			
  echo "------------------------------"
  echo "Deactivating venv..."
  echo "------------------------------"
			
  deactivate
```

Nelle sezioni seguenti, caricherai la tua directory di progetto dbt su Amazon S3 ed eseguirai un DAG che convalida se Amazon MWAA ha installato correttamente le dipendenze dbt richieste.

## Caricare un progetto dbt su Amazon S3
<a name="samples-dbt-upload-project"></a>

Per poter utilizzare un progetto dbt con il tuo ambiente Amazon MWAA, puoi caricare l'intera directory del progetto nella cartella del tuo ambiente. `dags` Quando l'ambiente si aggiorna, Amazon MWAA scarica la directory dbt nella cartella locale. `usr/local/airflow/dags/`

**Per caricare un progetto dbt su Amazon S3**

1. Passa alla directory in cui hai clonato il progetto dbt starter.

1. Esegui il seguente AWS CLI comando Amazon S3 per copiare in modo ricorsivo il contenuto del progetto `dags` nella cartella del tuo ambiente utilizzando il parametro. `--recursive` Il comando crea una sottodirectory chiamata `dbt` che puoi usare per tutti i tuoi progetti dbt. Se la sottodirectory esiste già, i file di progetto vengono copiati nella directory esistente e non viene creata una nuova directory. Il comando crea anche una sottodirectory all'interno della `dbt` directory per questo specifico progetto iniziale.

   ```
   aws s3 cp dbt-starter-project s3://amzn-s3-demo-bucket/dags/dbt/dbt-starter-project --recursive
   ```

   È possibile utilizzare nomi diversi per le sottodirectory del progetto per organizzare più progetti dbt all'interno della directory principale. `dbt`

## Utilizzate un DAG per verificare l'installazione della dipendenza da dbt
<a name="samples-dbt-test-dependencies"></a>

Il seguente DAG utilizza un comando `BashOperator` e un comando bash per verificare se Amazon MWAA ha installato correttamente le dipendenze dbt specificate in. `requirements.txt`

```
from airflow import DAG
			from airflow.operators.bash_operator import BashOperator
			from airflow.utils.dates import days_ago
			
			with DAG(dag_id="dbt-installation-test", schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
			cli_command = BashOperator(
			task_id="bash_command",
			bash_command="/usr/local/airflow/python3-virtualenv/dbt-env/bin/dbt --version"
			)
```

Effettua le seguenti operazioni per accedere ai log delle attività e verificare che dbt e le sue dipendenze siano stati installati.

1. Accedi alla console Amazon MWAA, quindi scegli **Open Airflow UI** dall'elenco degli ambienti disponibili.

1. Nell'interfaccia utente di Apache Airflow, trova `dbt-installation-test` il DAG dall'elenco, quindi scegli la data nella colonna per aprire `Last Run` l'ultima attività riuscita.

1. Utilizzando **Graph View**, scegliete l'`bash_command`attività per aprire i dettagli dell'istanza dell'operazione.

1. Scegliete **Log** per aprire i log delle attività, quindi verificate che i log elencino correttamente la versione dbt in cui è stata specificata. `requirements.txt`

## Usa un DAG per eseguire un progetto dbt
<a name="samples-dbt-run-project"></a>

Il seguente DAG utilizza `BashOperator` a per copiare i progetti dbt caricati su Amazon S3 dalla directory `usr/local/airflow/dags/` locale alla directory `/tmp` accessibile in scrittura, quindi esegue il progetto dbt. I comandi bash presuppongono un progetto dbt iniziale intitolato. `dbt-starter-project` Modifica il nome della directory in base al nome della directory del tuo progetto.

```
from airflow import DAG
			from airflow.operators.bash_operator import BashOperator
			from airflow.utils.dates import days_ago
			
			import os
			
			DAG_ID = os.path.basename(__file__).replace(".py", "")
			
			# assumes all files are in a subfolder of DAGs called dbt
			
			with DAG(dag_id=DAG_ID, schedule_interval=None, catchup=False, start_date=days_ago(1)) as dag:
			cli_command = BashOperator(
			task_id="bash_command",
			bash_command="source /usr/local/airflow/python3-virtualenv/dbt-env/bin/activate;\
			cp -R /usr/local/airflow/dags/dbt /tmp;\
			echo 'listing project files:';\
			ls -R /tmp;\
			cd /tmp/dbt/mwaa_dbt_test_project;\
			/usr/local/airflow/python3-virtualenv/dbt-env/bin/dbt run --project-dir /tmp/dbt/mwaa_dbt_test_project --profiles-dir ..;\
			cat /tmp/dbt_logs/dbt.log;\
			rm -rf /tmp/dbt/mwaa_dbt_test_project"
			)
```