如何防止记录加密的气流变量?

时间:2018-11-21 12:08:10

标签: etl airflow

我已经设置了一个气流,该气流具有声明的加密变量。我正在使用BigQueryOperator。我在提供给该类的SQL中使用加密的变量。但是气流在解密变量后记录了SQL。如何防止这种情况发生?

1 个答案:

答案 0 :(得分:2)

不幸的是,没有内置的方法可以实现这一目标。

可能的解决方法是删除self.log.info('Executing: %s', self.sql)中的BigQueryOperator行,或创建一个继承BigQueryOperator的新运算符,如下所示:

class CustomBQOperator(BigQueryOperator):
    @apply_defaults
    def __init__(self, *args, **kwargs):
        super(CustomBQOperator).__init__(*args, **kwargs)

    def execute(self, context):
        if self.bq_cursor is None:

            hook = BigQueryHook(
                bigquery_conn_id=self.bigquery_conn_id,
                use_legacy_sql=self.use_legacy_sql,
                delegate_to=self.delegate_to)
            conn = hook.get_conn()
            self.bq_cursor = conn.cursor()
        self.bq_cursor.run_query(
            self.sql,
            destination_dataset_table=self.destination_dataset_table,
            write_disposition=self.write_disposition,
            allow_large_results=self.allow_large_results,
            flatten_results=self.flatten_results,
            udf_config=self.udf_config,
            maximum_billing_tier=self.maximum_billing_tier,
            maximum_bytes_billed=self.maximum_bytes_billed,
            create_disposition=self.create_disposition,
            query_params=self.query_params,
            labels=self.labels,
            schema_update_options=self.schema_update_options,
            priority=self.priority,
            time_partitioning=self.time_partitioning,
            api_resource_configs=self.api_resource_configs,
            cluster_fields=self.cluster_fields,
        )

然后使用此CustomBQOperator代替BigQueryOperator