@deepnote/database-integrations
v1.4.3
Published
Deepnote database integration definitions
Downloads
1,934
Keywords
Readme
@deepnote/database-integrations
The database-integrations package defines the Deepnote database integrations.
Overview
This package provides TypeScript types and utilities for working with Deepnote SQL block integrations and other database integrations, including:
- Integration types
- Authentication method types
- Integration metadata schemas
Supported Integrations
- DataFrame SQL (
pandas-dataframe) - Amazon Athena (
athena) - Amazon Redshift (
redshift) - ClickHouse (
clickhouse) - Databricks (
databricks) - Dremio (
dremio) - Google AlloyDB (
alloydb) - Google BigQuery (
big-query) - Google Spanner (
spanner) - MariaDB (
mariadb) - Materialize (
materialize) - Microsoft SQL Server (Azure SQL) (
sql-server) - MindsDB (
mindsdb) - MongoDB (
mongodb) - MySQL (
mysql) - PostgreSQL (
pgsql) - Snowflake (
snowflake) - Trino (
trino)
API reference
Integration types
- types
type DatabaseIntegrationType– All supported database integration typestype DatabaseIntegrationTypeWithSslSupport– Database integration types that support SSL (subset ofDatabaseIntegrationType)type SqlIntegrationType– SQL integration types (subset ofDatabaseIntegrationType), excludesmongodb
- runtime values
databaseIntegrationTypes– Array of all supported database integration types (DatabaseIntegrationType[])databaseIntegrationTypesWithSslSupport– Array of all database integration types that support SSL (DatabaseIntegrationTypeWithSslSupport[])sqlIntegrationTypes– Array of all SQL integration types (SqlIntegrationType[])
Integration metadata
- zod schemas
databaseMetadataSchemasByType– Zod schemas for validating integration metadata by integration typedatabaseMetadataSchemasByType['big-query'].safeParse({ ... })
- types
type DatabaseIntegrationMetadataByType– Integration metadata types by integration typeconst metadata: DatabaseIntegrationMetadataByType['big-query'] = { ... }
Environment variables and configuration
- utilities
getEnvironmentVariablesForIntegrations(integrations: Array<DatabaseIntegrationConfig>, params: { projectRootDirectory: string, snowflakePartnerIdentifier?: string })– Creates a list of environment variables to be set when executing a notebook that uses the integrations, the variables are in a format consumed by the Deepnote Toolkit- arguments:
integrations– list of active integrationsparams.projectRootDirectory– project root directory, used to construct paths to CA certificatesparams.snowflakePartnerIdentifier(optional) – Snowflake partner identifier, used to construct Snowflake connection URLs; it is used for Snowflake's internal telemetry/analytics, it does not affect the functionality of the integration
- returns:
envVars: Array<EnvVar>– List of environment variables to be set when executing a notebook that uses the integrations- The variable names produced have the following format:
*INTEGRATION_NAME*_*METADATA_KEY*- for each metadata field of the integrationSQL_*INTEGRATION_ID*- SQL Alchemy config for each SQL integration
- The variable names produced have the following format:
errors: Array<Error>– List of errors that occurred when generating the environment variables. These are not thrown to allow partial functionality, even when some integrations are misconfigured.
- arguments:
getSqlAlchemyInput(sqlIntegration: SqlIntegrationConfig, params: { projectRootDirectory: string, snowflakePartnerIdentifier?: string })– Creates a SQL Alchemy config for a SQL integration, used to connect to the database from SQL blocks. This is used internally withingetEnvironmentVariablesForIntegrations().- arguments:
sqlIntegration– SQL integration configurationparams.projectRootDirectory– project root directory, used to construct paths to CA certificatesparams.snowflakePartnerIdentifier(optional) – see above
- returns:
SqlAlchemyInput | null– SQL Alchemy config for the integration,nullwhen the integration has federated authentication
- throws:
BigQueryServiceAccountParseError– when parsing BigQuery service account failsSpannerServiceAccountParseError– when parsing Spanner service account fails
- arguments:
- types
type DatabaseIntegrationConfig– Configuration for an integration when generating environment variablestype– integration typeid– integration ID (usually UUID)name– integration namemetadata– integration metadatafederated_auth_method(optional) – federated authentication method, used only when the integration has federated authentication enabled. The auth method configured via the metadata is also checked, these should match.
type SqlIntegrationConfig– Configuration for a SQL integration when generating environment variables (subset ofDatabaseIntegrationConfig, excluding non-SQL integrations)type SqlAlchemyInput- SQL Alchemy config for a SQL integration
- errors
BigQueryServiceAccountParseError– When parsing BigQuery service account failscause: Error– The original error
SpannerServiceAccountParseError– When parsing Spanner service account failscause: Error– The original error
Auth methods
These values can be used to configure the integrations that have multiple methods for authentication.
- types
type DatabaseAuthMethod– Authentication method for a database integrationtype AwsAuthMethod– Authentication method for an AWS integrationtype BigQueryAuthMethod– Authentication method for a BigQuery integrationtype SnowflakeAuthMethod– Authentication method for a Snowflake integrationtype FederatedAuthMethod– Authentication method for a federated authentication integration
- runtime values
AwsAuthMethods– All supported AWS authentication methodsBigQueryAuthMethods– All supported BigQuery authentication methodsDatabaseAuthMethods– All supported database authentication methodsSnowflakeAuthMethods– All supported Snowflake authentication methodsfederatedAuthMethods– All supported federated authentication methods
Usage in TypeScript
Example: Show list of available integrations
import { databaseIntegrationTypes } from "@deepnote/database-integrations";
console.log(databaseIntegrationTypes); // ['athena', 'redshift', …]Example: Validate integration metadata
import { databaseMetadataSchemasByType } from "@deepnote/database-integrations";
const validationResult = databaseMetadataSchemasByType["big-query"].safeParse({
authMethod: BigQueryAuthMethods.ServiceAccount,
service_account: "my-account",
});
if (validationResult.error) {
console.error(validationResult.error);
}Example: Getting environment variables for configured integrations
import { getEnvironmentVariablesForIntegrations } from "@deepnote/database-integrations";
const integrations = [
{
type: "pgsql",
id: "my-postgres",
name: "My PostgreSQL Integration",
metadata: {
host: "my-host",
user: "my-user",
password: "my-password",
database: "my-database",
},
},
];
const { envVars } = getEnvironmentVariablesForIntegrations(integrations, {
projectRootDirectory: "/path/to/project",
});
// envVars = [
// { name: "INTEGRATION_MY_POSTGRES_HOST", value: "my-host" },
// { name: "INTEGRATION_MY_POSTGRES_USER", value: "my-user" },
// { name: "INTEGRATION_MY_POSTGRES_PASSWORD", value: "my-password" },
// { name: "INTEGRATION_MY_POSTGRES_DATABASE", value: "my-database" },
// { name: "SQL_MY_POSTGRES", value: '{"url": "postgresql://my-user:my-password@my-host/my-database", "params": {}, "param_style": "pyformat"}' },
// ]Example: Mapped types
import {
type DatabaseIntegrationMetadataByType,
type DatabaseIntegrationType,
} from "@deepnote/database-integrations";
const myIntegrationDocsLinks: Record<
DatabaseIntegrationType,
{ docsLink: string }
> = {
"big-query": { docsLink: "https://example.com/my-docs/bq" },
// …
};Usage in notebooks
SQL block execution (set up in @deepnote/blocks) picks the environment variables and passes them to the Deepnote Toolkit (_dntk.execute_sql())
MongoDB usage
MongoDB is not a SQL integration, it is not used via SQL blocks but rather via code blocks and pymongo.
import os
from pymongo import MongoClient
# Connect to MongoDB using the connection string from environment variables
client = MongoClient(os.environ["INTEGRATION_NAME_CONNECTION_STRING"])
db = client[os.environ["INTEGRATION_NAME_DATABASE"]]
# Get the users collection
users_collection = db["users"]
# Find all documents in the users collection
users = list(users_collection.find())Note: The INTEGRATION_NAME_ prefix of the env variables is constructed using the following logic.
Environment variable names used by the utilities in the Shell and Utilities volume of IEEE Std 1003.1-2001 consist solely of uppercase letters, digits, and the '_' (underscore) from the characters defined in the Portable Character Set and do not begin with a digit.
import re
def convert_to_environment_variable_name(integration_name: str) -> str:
without_first_digit = f"_{integration_name}" if re.match(r'^\d', integration_name) else integration_name
upper_cased = without_first_digit.upper()
return re.sub(r'[^\w]', '_', upper_cased)