--- title: "Snowflake" id: integrations-snowflake description: "Snowflake integration for Haystack" slug: "/integrations-snowflake" --- ## Module haystack\_integrations.components.retrievers.snowflake.snowflake\_table\_retriever ### SnowflakeTableRetriever Connects to a Snowflake database to execute a SQL query using ADBC and Polars. Returns the results as a Pandas DataFrame (converted from a Polars DataFrame) along with a Markdown-formatted string. For more information, see [Polars documentation](https://docs.pola.rs/api/python/dev/reference/api/polars.read_database_uri.html). and [ADBC documentation](https://arrow.apache.org/adbc/main/driver/snowflake.html). ### Usage examples: #### Password Authentication: ```python executor = SnowflakeTableRetriever( user="", account="", authenticator="SNOWFLAKE", api_key=Secret.from_env_var("SNOWFLAKE_API_KEY"), database="", db_schema="", warehouse="", ) executor.warm_up() ``` #### Key-pair Authentication (MFA): ```python executor = SnowflakeTableRetriever( user="", account="", authenticator="SNOWFLAKE_JWT", private_key_file=Secret.from_env_var("SNOWFLAKE_PRIVATE_KEY_FILE"), private_key_file_pwd=Secret.from_env_var("SNOWFLAKE_PRIVATE_KEY_PWD"), database="", db_schema="", warehouse="", ) executor.warm_up() ``` #### OAuth Authentication (MFA): ```python executor = SnowflakeTableRetriever( user="", account="", authenticator="OAUTH", oauth_client_id=Secret.from_env_var("SNOWFLAKE_OAUTH_CLIENT_ID"), oauth_client_secret=Secret.from_env_var("SNOWFLAKE_OAUTH_CLIENT_SECRET"), oauth_token_request_url="", database="", db_schema="", warehouse="", ) executor.warm_up() ``` #### Running queries: ```python query = "SELECT * FROM table_name" results = executor.run(query=query) >> print(results["dataframe"].head(2)) column1 column2 column3 0 123 'data1' 2024-03-20 1 456 'data2' 2024-03-21 >> print(results["table"]) shape: (3, 3) | column1 | column2 | column3 | |---------|---------|------------| | int | str | date | |---------|---------|------------| | 123 | data1 | 2024-03-20 | | 456 | data2 | 2024-03-21 | | 789 | data3 | 2024-03-22 | ``` #### SnowflakeTableRetriever.\_\_init\_\_ ```python def __init__(user: str, account: str, authenticator: Literal["SNOWFLAKE", "SNOWFLAKE_JWT", "OAUTH"] = "SNOWFLAKE", api_key: Optional[Secret] = Secret.from_env_var( "SNOWFLAKE_API_KEY", strict=False), database: Optional[str] = None, db_schema: Optional[str] = None, warehouse: Optional[str] = None, login_timeout: Optional[int] = 60, return_markdown: bool = True, private_key_file: Optional[Secret] = Secret.from_env_var( "SNOWFLAKE_PRIVATE_KEY_FILE", strict=False), private_key_file_pwd: Optional[Secret] = Secret.from_env_var( "SNOWFLAKE_PRIVATE_KEY_PWD", strict=False), oauth_client_id: Optional[Secret] = Secret.from_env_var( "SNOWFLAKE_OAUTH_CLIENT_ID", strict=False), oauth_client_secret: Optional[Secret] = Secret.from_env_var( "SNOWFLAKE_OAUTH_CLIENT_SECRET", strict=False), oauth_token_request_url: Optional[str] = None, oauth_authorization_url: Optional[str] = None) -> None ``` **Arguments**: - `user`: User's login. - `account`: Snowflake account identifier. - `authenticator`: Authentication method. Required. Options: "SNOWFLAKE" (password), "SNOWFLAKE_JWT" (key-pair), or "OAUTH". - `api_key`: Snowflake account password. Required for SNOWFLAKE authentication. - `database`: Name of the database to use. - `db_schema`: Name of the schema to use. - `warehouse`: Name of the warehouse to use. - `login_timeout`: Timeout in seconds for login. - `return_markdown`: Whether to return a Markdown-formatted string of the DataFrame. - `private_key_file`: Secret containing the path to private key file. Required for SNOWFLAKE_JWT authentication. - `private_key_file_pwd`: Secret containing the passphrase for private key file. Required only when the private key file is encrypted. - `oauth_client_id`: Secret containing the OAuth client ID. Required for OAUTH authentication. - `oauth_client_secret`: Secret containing the OAuth client secret. Required for OAUTH authentication. - `oauth_token_request_url`: OAuth token request URL for Client Credentials flow. - `oauth_authorization_url`: OAuth authorization URL for Authorization Code flow. #### SnowflakeTableRetriever.warm\_up ```python def warm_up() -> None ``` Warm up the component by initializing the authenticator handler and testing the database connection. #### SnowflakeTableRetriever.to\_dict ```python def to_dict() -> Dict[str, Any] ``` Serializes the component to a dictionary. **Returns**: Dictionary with serialized data. #### SnowflakeTableRetriever.from\_dict ```python @classmethod def from_dict(cls, data: Dict[str, Any]) -> "SnowflakeTableRetriever" ``` Deserializes the component from a dictionary. **Arguments**: - `data`: Dictionary to deserialize from. **Returns**: Deserialized component. #### SnowflakeTableRetriever.run ```python @component.output_types(dataframe=DataFrame, table=str) def run(query: str, return_markdown: Optional[bool] = None) -> Dict[str, Any] ``` Executes a SQL query against a Snowflake database using ADBC and Polars. **Arguments**: - `query`: The SQL query to execute. - `return_markdown`: Whether to return a Markdown-formatted string of the DataFrame. If not provided, uses the value set during initialization. **Returns**: A dictionary containing: - `"dataframe"`: A Pandas DataFrame with the query results. - `"table"`: A Markdown-formatted string representation of the DataFrame.