Source code for airflow.providers.amazon.aws.transfers.exasol_to_s3
## Licensed to the Apache Software Foundation (ASF) under one# or more contributor license agreements. See the NOTICE file# distributed with this work for additional information# regarding copyright ownership. The ASF licenses this file# to you under the Apache License, Version 2.0 (the# "License"); you may not use this file except in compliance# with the License. You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing,# software distributed under the License is distributed on an# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY# KIND, either express or implied. See the License for the# specific language governing permissions and limitations# under the License."""Transfers data from Exasol database into a S3 Bucket."""from__future__importannotationsfromtempfileimportNamedTemporaryFilefromtypingimportTYPE_CHECKING,Sequencefromairflow.modelsimportBaseOperatorfromairflow.providers.amazon.aws.hooks.s3importS3Hookfromairflow.providers.exasol.hooks.exasolimportExasolHookifTYPE_CHECKING:fromairflow.utils.contextimportContext
[docs]classExasolToS3Operator(BaseOperator):""" Export data from Exasol database to AWS S3 bucket. :param query_or_table: the sql statement to be executed or table name to export :param key: S3 key that will point to the file :param bucket_name: Name of the bucket in which to store the file :param replace: A flag to decide whether or not to overwrite the key if it already exists. If replace is False and the key exists, an error will be raised. :param encrypt: If True, the file will be encrypted on the server-side by S3 and will be stored in an encrypted form while at rest in S3. :param gzip: If True, the file will be compressed locally :param acl_policy: String specifying the canned ACL policy for the file being uploaded to the S3 bucket. :param query_params: Query parameters passed to underlying ``export_to_file`` method of :class:`~pyexasol.connection.ExaConnection`. :param export_params: Extra parameters passed to underlying ``export_to_file`` method of :class:`~pyexasol.connection.ExaConnection`. """
[docs]defexecute(self,context:Context):exasol_hook=ExasolHook(exasol_conn_id=self.exasol_conn_id)s3_hook=S3Hook(aws_conn_id=self.aws_conn_id)withNamedTemporaryFile("w+")asfile:exasol_hook.export_to_file(filename=file.name,query_or_table=self.query_or_table,export_params=self.export_params,query_params=self.query_params,)file.flush()self.log.info("Uploading the data as %s",self.key)s3_hook.load_file(filename=file.name,key=self.key,bucket_name=self.bucket_name,replace=self.replace,encrypt=self.encrypt,gzip=self.gzip,acl_policy=self.acl_policy,)self.log.info("Data uploaded")returnself.key