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
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 esempio DAG per verificare che Amazon MWAA abbia installato le dipendenze e infine utilizzerai il BashOperator
per eseguire il progetto dbt.
Argomenti
Versione
Prerequisiti
Prima di poter completare i seguenti passaggi, avrai bisogno di quanto segue:
-
Un MWAAambiente Amazon che utilizza Apache 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 AmazonMWAA, puoi creare un fork e clonare il progetto dbt starter dal repository dbt-labs
. GitHub
Dipendenze
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.
#!/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 DAG una che convalida se MWAA Amazon ha installato correttamente le dipendenze dbt richieste.
Caricare un progetto dbt su Amazon S3
Per poter utilizzare un progetto dbt con il tuo MWAA ambiente Amazon, puoi caricare l'intera directory del progetto nella dags
cartella del tuo ambiente. Quando l'ambiente si aggiorna, Amazon MWAA scarica la directory dbt usr/local/airflow/dags/
nella cartella locale.
Per caricare un progetto dbt su Amazon S3
-
Passa alla directory in cui hai clonato il progetto dbt starter.
-
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 chiamatadbt
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 delladbt
directory per questo specifico progetto iniziale.$
aws s3 cp
dbt-starter-project
s3://mwaa-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
Usa a per verificare l'installazione della DAG dipendenza da dbt
Quanto segue 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 visualizzare i log delle attività e verificare che dbt e le sue dipendenze siano state installate.
-
Vai alla MWAA console Amazon, quindi scegli Open Airflow UI dall'elenco degli ambienti disponibili.
-
Nell'interfaccia utente di Apache Airflow, individualo
dbt-installation-test
DAG dall'elenco, quindi scegli la data sotto laLast Run
colonna per aprire l'ultima attività riuscita. -
Utilizzando Graph View, scegliete l'
bash_command
attività per aprire i dettagli dell'istanza dell'operazione. -
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 a DAG per eseguire un progetto dbt
Quanto segue 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" )