

:mod:`airflow.contrib.hooks.snowflake_hook`
===========================================

.. py:module:: airflow.contrib.hooks.snowflake_hook







Module Contents
---------------






.. py:class:: SnowflakeHook(*args, **kwargs)

   Bases::class:`airflow.hooks.dbapi_hook.DbApiHook`

   

   Interact with Snowflake.

   get_sqlalchemy_engine() depends on snowflake-sqlalchemy


   

   

   .. attribute:: conn_name_attr
      :annotation: = snowflake_conn_id 

      



   

   

   .. attribute:: default_conn_name
      :annotation: = snowflake_default 

      



   

   

   .. attribute:: supports_autocommit
      :annotation: = True 

      



   

   

   

   .. method:: _get_conn_params(self)

      
      one method to fetch connection params as a dict
      used in get_uri() and get_connection()

      



   

   .. method:: get_uri(self)

      
      override DbApiHook get_uri method for get_sqlalchemy_engine()

      



   

   .. method:: get_conn(self)

      
      Returns a snowflake.connection object

      



   

   .. method:: _get_aws_credentials(self)

      
      returns aws_access_key_id, aws_secret_access_key
      from extra

      intended to be used by external import and export statements

      



   

   .. method:: set_autocommit(self, conn, autocommit)

      









