You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "Locustv2 (via GitHub)" <gi...@apache.org> on 2024/05/29 13:49:43 UTC
[I] Using XComArg in BigQueryInsertJobOperator `params` [airflow]
Locustv2 opened a new issue, #39914:
URL: https://github.com/apache/airflow/issues/39914
### Description
Hey guys,
So i have been dealing with this issue for a while now without any light...
I have a DAG that queries data from BigQuery, and depending on the results some Dynamic Task Mappings are created to insert an entry in another BigQuery table using `BigQueryInsertJobOperator`...
For Example:
```
from airflow import DAG
from airflow.providers.google.cloud.operators.bigquery import BigQueryGetDataOperator, BigQueryInsertJobOperator
from airflow.utils.dates import days_ago
from airflow.decorators import task
from airflow import XComArg
default_args = {
'owner': 'airflow',
'start_date': days_ago(1),
'retries': 1,
}
dag = DAG(
dag_id='bigquery_data_transfer_mapped_correct',
default_args=default_args,
schedule_interval="@daily",
catchup=False,
tags=['example'],
)
@task
def get_data(sql):
bq_hook = BigQueryHook(...)
self.log.info('Fetching Data from:')
self.log.info('Query: %s', sql)
bq_client = bq_hook.get_client()
query_job = bq_client.query(sql)
client_results = query_job.result() # Waits for the query to finish
results = list(dict(result) for result in client_results)
self.log.info(f"Retrieved {len(results)} rows from BigQuery")
self.log.info('Response: %s', results)
return results
query_data = get_data("SELECT * FROM some_table WHERE some_conditions;")
insert = BigQueryInsertJobOperator.partial(
task_id=f"insert_data",
configuration={
'query': {
'query': "INSERT INTO `project.dataset.table` (field1, field2) VALUES ('{{ params.field1 }}', '{{ params.field2 }}')",
'useLegacySql': False,
}
}
).expand(
params=XComArg(query_data)
)
query_data >> insert
```
Please note that this code is just a basic example that i just wrote and in my usecase, i actually have a task_group that expands and takes in a parameter to be sent to the `params` in one of the `BigQueryInsertJobOperator` task.
After running my DAG i get an error saying:
```
Broken DAG: [/opt/airflow/dags/src/dag.py] Traceback (most recent call last):
File "/home/airflow/.local/lib/python3.11/site-packages/airflow/models/baseoperator.py", line 407, in apply_defaults
default_args, merged_params = get_merged_defaults(
^^^^^^^^^^^^^^^^^^^^
File "/home/airflow/.local/lib/python3.11/site-packages/airflow/models/baseoperator.py", line 167, in get_merged_defaults
raise TypeError("params must be a mapping")
TypeError: params must be a mapping
```
The airflow version is:
```
Version: [v2.8.1](https://pypi.python.org/pypi/apache-airflow/2.8.1)
Git Version: .release:c0ffa9c5d96625c68ded9562632674ed366b5eb3
```
### Use case/motivation
I would like to be able to use dynamic task mapping to create multiple instances of `BigQueryInsertJobOperator` with dynamic `params` attribute.
### Related issues
_No response_
### Are you willing to submit a PR?
- [ ] Yes I am willing to submit a PR!
### Code of Conduct
- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] Using XComArg in BigQueryInsertJobOperator `params` [airflow]
Posted by "boring-cyborg[bot] (via GitHub)" <gi...@apache.org>.
boring-cyborg[bot] commented on issue #39914:
URL: https://github.com/apache/airflow/issues/39914#issuecomment-2137465998
Thanks for opening your first issue here! Be sure to follow the issue template! If you are willing to raise PR to address this issue please do so, no need to wait for approval.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
Re: [I] Using XComArg in BigQueryInsertJobOperator `params` [airflow]
Posted by "josh-fell (via GitHub)" <gi...@apache.org>.
josh-fell closed issue #39914: Using XComArg in BigQueryInsertJobOperator `params`
URL: https://github.com/apache/airflow/issues/39914
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org