Bird
Raised Fist0
Apache Airflowdevops~20 mins

SqlOperator for database queries in Apache Airflow - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
SqlOperator Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
2:00remaining
What is the output of this Airflow SqlOperator task?
Given the following Airflow DAG snippet, what will be the output in the Airflow logs when the task runs successfully?
Apache Airflow
from airflow import DAG
from airflow.providers.postgres.operators.postgres import PostgresOperator
from datetime import datetime

default_args = {'start_date': datetime(2024, 1, 1)}

dag = DAG('test_sql_operator', default_args=default_args, schedule_interval='@once')

run_query = PostgresOperator(
    task_id='run_query',
    postgres_conn_id='my_postgres',
    sql='SELECT COUNT(*) FROM users;',
    dag=dag
)
AThe task will succeed but no output will be shown in logs by default.
BThe task will fail because SqlOperator cannot run SELECT queries.
CThe task logs will show the count of rows in the users table as a result.
DThe task will raise a syntax error due to missing parameters.
Attempts:
2 left
💡 Hint
Think about what SqlOperator does with SELECT queries and how results are handled.
❓ Configuration
intermediate
2:00remaining
Which configuration correctly runs a SQL script file using SqlOperator?
You want to run a SQL script stored in '/sql_scripts/create_tables.sql' using Airflow's SqlOperator. Which option correctly configures the operator?
APostgresOperator(task_id='create_tables', postgres_conn_id='my_postgres', sql=open('/sql_scripts/create_tables.sql').read(), dag=dag)
BPostgresOperator(task_id='create_tables', postgres_conn_id='my_postgres', sql='RUN /sql_scripts/create_tables.sql', dag=dag)
CPostgresOperator(task_id='create_tables', postgres_conn_id='my_postgres', sql='@/sql_scripts/create_tables.sql', dag=dag)
DPostgresOperator(task_id='create_tables', postgres_conn_id='my_postgres', sql='/sql_scripts/create_tables.sql', dag=dag)
Attempts:
2 left
💡 Hint
SqlOperator's sql parameter accepts a string containing the SQL commands.
❓ Troubleshoot
advanced
2:00remaining
Why does this SqlOperator task fail with 'could not connect to server' error?
You have this task: PostgresOperator(task_id='check_data', postgres_conn_id='wrong_conn', sql='SELECT 1;', dag=dag) It fails with 'could not connect to server' error. What is the most likely cause?
AThe DAG start_date is in the future, so the task cannot connect.
BThe SQL query 'SELECT 1;' is invalid and causes connection failure.
CThe postgres_conn_id 'wrong_conn' is not defined or has wrong connection details in Airflow connections.
DThe PostgresOperator requires extra parameters to connect, missing here.
Attempts:
2 left
💡 Hint
Check the connection ID and its configuration in Airflow UI.
🔀 Workflow
advanced
2:00remaining
How to chain multiple SqlOperator tasks to run sequentially?
You have three SQL tasks: create_table, insert_data, and verify_data. How do you set them to run one after another in Airflow?
Apache Airflow
create_table = PostgresOperator(task_id='create_table', postgres_conn_id='my_postgres', sql='CREATE TABLE test(id INT);', dag=dag)
insert_data = PostgresOperator(task_id='insert_data', postgres_conn_id='my_postgres', sql='INSERT INTO test VALUES (1);', dag=dag)
verify_data = PostgresOperator(task_id='verify_data', postgres_conn_id='my_postgres', sql='SELECT COUNT(*) FROM test;', dag=dag)
Acreate_table | insert_data | verify_data
Bcreate_table & insert_data & verify_data
Ccreate_table + insert_data + verify_data
Dcreate_table >> insert_data >> verify_data
Attempts:
2 left
💡 Hint
Airflow uses bitshift operators to set task dependencies.
✅ Best Practice
expert
2:00remaining
What is the best practice to handle sensitive database credentials with SqlOperator?
You want to run SQL queries securely in Airflow without exposing database passwords in DAG code. What is the best practice?
ASave credentials in a plain text file and read them in the DAG code.
BStore credentials in Airflow Connections and reference them by connection ID in SqlOperator.
CHardcode the username and password directly in the sql parameter string.
DUse environment variables inside the sql parameter string to pass credentials.
Attempts:
2 left
💡 Hint
Airflow has a built-in way to manage secrets and connections.

Practice

(1/5)
1. What is the primary purpose of the SqlOperator in Airflow?
easy
A. To run SQL commands as part of an Airflow task
B. To schedule Python scripts
C. To monitor server health
D. To send email notifications

Solution

  1. Step 1: Understand the role of SqlOperator

    The SqlOperator is designed to execute SQL commands within Airflow tasks, automating database operations.
  2. Step 2: Compare with other options

    Scheduling Python scripts, monitoring servers, and sending emails are handled by other operators or components, not SqlOperator.
  3. Final Answer:

    To run SQL commands as part of an Airflow task -> Option A
  4. Quick Check:

    SqlOperator runs SQL commands = D [OK]
Hint: SqlOperator always runs SQL queries inside tasks [OK]
Common Mistakes:
  • Confusing SqlOperator with PythonOperator
  • Thinking SqlOperator schedules scripts
  • Assuming SqlOperator sends emails
2. Which of the following is the correct way to create a SqlOperator task in Airflow?
easy
A. SqlOperator(id='run_query', query='SELECT * FROM table', connection='my_db')
B. SqlOperator(name='run_query', sql_command='SELECT * FROM table', conn='my_db')
C. SqlOperator(task='run_query', command='SELECT * FROM table', connection_id='my_db')
D. SqlOperator(task_id='run_query', sql='SELECT * FROM table', conn_id='my_db')

Solution

  1. Step 1: Check parameter names for SqlOperator

    The correct parameters are task_id, sql, and conn_id.
  2. Step 2: Validate each option

    Only SqlOperator(task_id='run_query', sql='SELECT * FROM table', conn_id='my_db') uses the correct parameter names and syntax for SqlOperator.
  3. Final Answer:

    SqlOperator(task_id='run_query', sql='SELECT * FROM table', conn_id='my_db') -> Option D
  4. Quick Check:

    Correct parameters = B [OK]
Hint: Remember: task_id, sql, conn_id are required parameters [OK]
Common Mistakes:
  • Using wrong parameter names like 'id' or 'query'
  • Mixing connection parameter names
  • Omitting task_id or sql
3. Given this Airflow task using SqlOperator:
task = SqlOperator(
    task_id='count_users',
    sql='SELECT COUNT(*) FROM users;',
    conn_id='my_postgres'
)

What will be the main effect when this task runs?
medium
A. It will create a new table named 'count_users'
B. It will return the count of users and store it in Airflow logs
C. It will delete all records from the users table
D. It will send an email with the user count

Solution

  1. Step 1: Understand the SQL command

    The SQL command SELECT COUNT(*) FROM users; counts the number of rows in the users table.
  2. Step 2: Understand SqlOperator behavior

    SqlOperator runs the query and logs the output; it does not create tables, delete data, or send emails by default.
  3. Final Answer:

    It will return the count of users and store it in Airflow logs -> Option B
  4. Quick Check:

    SELECT COUNT(*) logs result = A [OK]
Hint: SELECT queries log results; no table creation or deletion [OK]
Common Mistakes:
  • Thinking SELECT creates or deletes tables
  • Assuming SqlOperator sends emails automatically
  • Confusing query effects with task side effects
4. You wrote this SqlOperator task:
task = SqlOperator(
    task_id='update_status',
    sql='UPDATE orders SET status = 'shipped' WHERE id = 10;',
    conn_id='my_db'
)

But Airflow throws a syntax error. What is the problem?
medium
A. conn_id should be connection_id
B. The task_id is missing
C. The SQL string uses single quotes inside single quotes without escaping
D. SqlOperator cannot run UPDATE statements

Solution

  1. Step 1: Check the SQL string syntax

    The SQL string uses single quotes around the whole string and also inside for 'shipped', causing a conflict.
  2. Step 2: Understand string escaping in Python

    Inner single quotes must be escaped or the string should use double quotes outside to avoid syntax errors.
  3. Final Answer:

    The SQL string uses single quotes inside single quotes without escaping -> Option C
  4. Quick Check:

    Escape inner quotes or use double quotes outside [OK]
Hint: Escape inner quotes or use double quotes outside SQL string [OK]
Common Mistakes:
  • Ignoring string quoting rules in Python
  • Changing parameter names incorrectly
  • Thinking SqlOperator can't run UPDATE
5. You want to run multiple SQL commands in one SqlOperator task to reset a table:
DROP TABLE IF EXISTS temp_data;
CREATE TABLE temp_data (id INT, value TEXT);
INSERT INTO temp_data VALUES (1, 'A'), (2, 'B');

How should you write the sql parameter to run all commands correctly?
hard
A. Use a single string with commands separated by semicolons
B. Pass a list of strings, one per command
C. Use multiple SqlOperator tasks, one per command
D. Put all commands in a file and pass the filename to sql

Solution

  1. Step 1: Understand SqlOperator's sql parameter

    SqlOperator accepts a single string with multiple SQL commands separated by semicolons.
  2. Step 2: Compare other options

    Passing a list is invalid; multiple tasks or a file are alternatives but not the direct answer to the question.
  3. Final Answer:

    Use a single string with commands separated by semicolons -> Option A
  4. Quick Check:

    Multiple SQL commands in one string separated by semicolons [OK]
Hint: Separate SQL commands with semicolons in one string [OK]
Common Mistakes:
  • Passing list instead of string to sql
  • Trying to run multiple commands without semicolons
  • Confusing file input with direct sql parameter
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard