Skip to main content

Better stored procedure management

Project description

Contributors Forks Stargazers Issues LinkedIn


Sprocketship

Better stored procedure management

Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. License

About The Project

sprocketship makes it easy to develop, manage, and deploy stored procedures in Snowflake. Using the language of your choosing, you can write the contents of your stored procedure separately from its configurations (e.g., EXECUTE AS, RETURN TYPE, etc.).

Built With

(back to top)

Getting Started

Installation

pip install sprocketship

Usage

Structure

Currently, sprocketship expects a .sprocketship.yml file in a procedures/ directory.

├── dbt_models
│   ├── customers.sql
│   ├── products.sql
├── procedures
│   ├── useradmin
│   │   ├── create_database_writer_role.js
│   │   ├── create_database_reader_role.js
│   ├── sysadmin
│   │   ├── create_temp_database.js
└── .sprocketship.yml

The yaml path to each procedure in the sprocketship.yml should follow that of the paths to their corresponding files in the procedures/ directory.

procedures:
  development:
    create_temp_database:
      database: !env_var SNOWFLAKE_DATABASE
      schema: !env_var SNOWFLAKE_SCHEMA
      ...

  admin:
    create_database_reader:
      database: !env_var SNOWFLAKE_DATABASE
      schema: !env_var SNOWFLAKE_SCHEMA
      ...

    create_database_writer:
      database: !env_var SNOWFLAKE_DATABASE
      schema: !env_var SNOWFLAKE_SCHEMA
      ...

Directory-level Default Parameters

sprocketship allows providing default parameters at any given level of your project. These defaults will be applied recursively to any procedures defined in any of the subdirectories, unless overridden by a default in one of the subdirectories.

procedures:
  # for all procedures, default to the below database and schema
  +database: !env_var SNOWFLAKE_DATABASE
  +schema: !env_var SNOWFLAKE_SCHEMA
  development:
    # for all procedures in the development directory,
    # default to using the sysadmin role
    +use_role: sysadmin
    create_temp_database:
      args:
        - name: Name of argument
          type: Type of argument
          default: (Optional) default value for the argument
      returns: varchar

File Frontmatter

Thanks to ABSQL, sprocketship also provides the ability to define parameters using file frontmatter. Suppose we have a file create_database_writer_role.js, we can define parameters for the stored procedure within the file using frontmatter:

/*
database: my_database
schema: my_schema
language: javascript
execute_as: owner
use_role: sysadmin
*/

sprocketship will automatically parse and apply the parameters defined in the frontmatter to the stored procedure.

Recommended Configuration

When setting up your sprocketship project, we recommend setting more general parameters (e.g., database, schema, language, etc.) in the .sprocketship.yml file, and anything that's specific to a given procedure should be defined in the file frontmatter of that procedure, such as the args or return type. Example below:

# .sprocketship.yml
procedures:
  +database: my_database
  +schema: my_schema
  +language: javascript
  +execute_as: owner
  sysadmin:
    +use_role: sysadmin
  useradmin:
    +use_role: useradmin

In the above .sprocketship.yml, we've set the database, schema, language, and executor at the highest level. This means that all procedures in the sysadmin and useradmin directories will inherit these defaults unless overridden. Now we can define procedure-specific parameters in the file frontmatter:

// procedures/useradmin/create_role.js
/*
args:
  - name: role_name
    type: varchar
returns: varchar
comment: |
  Creates a role with the provided name
*/

var roleName = ROLE_NAME;
snowflake.execute(`CREATE ROLE IF NOT EXISTS ${roleName}`)

Execution

From here, simply run

$ sprocketship liftoff

from the project directory (or provide the directory, e.g. sprocketship liftoff my/directory/path) and sprocketship will launch your stored procedures into the given directory.

Exhaustive Options for Stored Procedure Configuration

database: The name of the database where the procedure will be stored
schema: The name of the schema where the procedure will be stored
language: The language of the procedure definition
execute_as: caller or owner
use_role: The role you'd like to own the procedure
args:
    - name: Name of argument
      type: Type of argument
      default: (Optional) default value for the argument
returns: The return type, this can include the `NOT NULL` option
comment: Explanation of the procedure

Support

sprocketship currently only supports Javascript-based stored procedures (Python support coming soon!). Additionally, there are a few options from the CREATE STORED PROCEDURE function that are not yet supported:

  • CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT }
  • VOLATILE | IMMUTABLE (deprecated)

License

Distributed under the MIT License. See LICENSE for more information.

(back to top)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sprocketship-1.0.3.tar.gz (7.6 kB view details)

Uploaded Source

Built Distribution

sprocketship-1.0.3-py3-none-any.whl (8.1 kB view details)

Uploaded Python 3

File details

Details for the file sprocketship-1.0.3.tar.gz.

File metadata

  • Download URL: sprocketship-1.0.3.tar.gz
  • Upload date:
  • Size: 7.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for sprocketship-1.0.3.tar.gz
Algorithm Hash digest
SHA256 5ab5cfddd1a2a2d961ddb58abf2b4455893d97649f7adfd49cb34164c56e185a
MD5 e95f35dab8fcefab1bf274c29fbf7280
BLAKE2b-256 5c1f9048bc2da1c8eb9d8dc784d1ece492c28df9e2c6346fe2e79e8ac9507b5a

See more details on using hashes here.

File details

Details for the file sprocketship-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for sprocketship-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 0590eabb1df2c56f99ccb2eedd6a5f204cb25cbe95cc8198700174ff868306d2
MD5 7af40d0b02d78de633c8463ac0ee0ed1
BLAKE2b-256 ef4ddfe2ae2f6b00cbd0366de057b7e6b1912311b9fb62896801f3ba48023fa2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page