Google bigquery 使用BigQueryInsertJobOperator代替BigQueryExecuteQueryOperator

Google bigquery 使用BigQueryInsertJobOperator代替BigQueryExecuteQueryOperator,google-bigquery,airflow,Google Bigquery,Airflow,最近更新的my Airflow和sawBigQueryExecuteQueryOperator已被弃用,取而代之的是BigQueryInsertJobOperator。文档似乎相当模糊,链接到(和)。特别是,我不清楚是否有地方可以指定write\u disposition,destination\u dataset\u table,等等。我想确保我没有让事情变得过于复杂 我现在做的事 # my.sql SELECT * FROM `proj.ds.table_1` ---------------

最近更新的my Airflow和saw
BigQueryExecuteQueryOperator
已被弃用,取而代之的是
BigQueryInsertJobOperator
。文档似乎相当模糊,链接到(和)。特别是,我不清楚是否有地方可以指定
write\u disposition
destination\u dataset\u table
,等等。我想确保我没有让事情变得过于复杂

我现在做的事

# my.sql
SELECT * FROM `proj.ds.table_1`
---------------------------------
# my-dag.py
BigQueryExecuteQueryOperator(
    task_id='copy-table-1',
    sql = 'my.sql',
    destination_dataset_table='proj:ds.table_2',
    write_disposition='WRITE_EMPTY',
    dag=dag
)
我现在需要使用like吗


更不用说以所建议的格式向查询传递参数,而不仅仅是
params={'table':the_table}
..

这是
BigQueryInsertJobOperator
要遵循的API文档:

我不想弄乱Google的参数化SQL查询,而是使用此方法来获取模板化查询以写入BQ:

# my.sql
SELECT * FROM `{PROJECT}.{DATASET}.{TBL_TO_MOVE}`
---------------------------------
# my-dag.py
PROJECT = 'my-project'
DATASET = 'my-dataset'
TBL_TO_MOVE = 'some-table'

DESTINATION_DS = 'other-dataset'
DESTINATION_TBL = 'other-table'

BigQueryInsertJobOperator(
    task_id='copy-table-1',
    configuration={
        'query': {
            'query': open('my.sql', 'r').read().format(**locals()),
            'destinationTable': {
                'projectId': PROJECT,
                'datasetId': DESTINATION_DS,
                'tableId': DESTINATION_TBL
            },
            'useLegacySql': False,
            'allowLargeResults': True,
        }
    },
    dag=dag
)

open('my.sql',…)
读取sql文件,然后使用局部变量代替大括号变量(例如,
{PROJECT}
my PROJECT
替换)。

我在理解新操作符时也遇到了一些问题,但我在气流通道中询问,他们将我指向示例dag,其中显示:
# my.sql
SELECT * FROM `{PROJECT}.{DATASET}.{TBL_TO_MOVE}`
---------------------------------
# my-dag.py
PROJECT = 'my-project'
DATASET = 'my-dataset'
TBL_TO_MOVE = 'some-table'

DESTINATION_DS = 'other-dataset'
DESTINATION_TBL = 'other-table'

BigQueryInsertJobOperator(
    task_id='copy-table-1',
    configuration={
        'query': {
            'query': open('my.sql', 'r').read().format(**locals()),
            'destinationTable': {
                'projectId': PROJECT,
                'datasetId': DESTINATION_DS,
                'tableId': DESTINATION_TBL
            },
            'useLegacySql': False,
            'allowLargeResults': True,
        }
    },
    dag=dag
)