Snowflake OCF Connector: Extraction Queries - Versions Before 2.0.0

Note

The queries on this page apply to versions of the Snowflake OCF connector that come before version 2.0.0.

The default extraction queries for the Snowflake data source are listed below. You can customize them to better suit your extraction requirements. Custom queries should be provided on the Metadata Extraction tab of the data source Settings page under Metadata Extraction Queries.

You can customize all or some of the queries.

If specified, custom extraction queries will take precedence over the default MDE queries.

Important

The database name may or may not be present in the JDBC URI. In this case the default queries will differ in the operator of the WHERE filter:

  • If the database name is present, the WHERE filter will equal CATALOG_NAME to the database name.

  • If the database name is not present, the WHERE filter will in most cases use the IN operator and a list of database names that the service account has access to.

Catalog

Make sure that your query has a column labeled as CATALOG in the SELECT statement.

Examples

Database Name Is Provided in JDBC URI

SELECT
  DATABASE_NAME AS CATALOG
FROM
  SNOWFLAKE.ACCOUNT_USAGE.DATABASES
WHERE
  DELETED IS NULL AND DATABASE_NAME = '<database_name>'
ORDER BY
  DATABASE_NAME;

Database Name Is Not Provided in JDBC UR

SELECT
  DATABASE_NAME AS CATALOG
FROM
  SNOWFLAKE.ACCOUNT_USAGE.DATABASES
WHERE
  DELETED IS NULL
  AND DATABASE_NAME IN ('<database_name1>', '<database_name2>')
ORDER BY
  DATABASE_NAME;

Schema

Make sure that your query has a column labeled as CATALOG, SCHEMA in the SELECT statement.

Examples

Database Name Is Provided in JDBC URI

SELECT
  CATALOG_NAME AS CATALOG,
  SCHEMA_NAME AS SCHEMA
FROM
  SNOWFLAKE.ACCOUNT_USAGE.SCHEMATA
WHERE
 DELETED IS NULL
 AND CONCAT(CATALOG_NAME,'.',SCHEMA_NAME) IN ('<database_name>.<schema_name>')
 AND CATALOG_NAME = '<database_name>'
ORDER BY
  DATABASE_NAME;

Database Name Is Not Provided in JDBC URI

SELECT
  CATALOG_NAME AS CATALOG,
  SCHEMA_NAME AS SCHEMA
FROM
  SNOWFLAKE.ACCOUNT_USAGE.SCHEMATA
WHERE
 DELETED IS NULL
 AND CONCAT(CATALOG_NAME,'.',SCHEMA_NAME) IN ('<database_name>.<schema_name>')
 AND CATALOG_NAME IN ('<database_name1>', '<database_name2>')
ORDER BY
  DATABASE_NAME;

Table

Make sure that your query has columns labeled as CATALOG, SCHEMA, TABLE_NAME, TABLE_TYPE, and REMARKS in the SELECT statement.

Examples

Database Name Is Provided in JDBC URI

SELECT
  TABLE_CATALOG AS CATALOG,
  TABLE_SCHEMA AS SCHEMA,
  TABLE_NAME,
  TABLE_TYPE,
  COMMENT AS REMARKS
FROM
  SNOWFLAKE.ACCOUNT_USAGE.TABLES
WHERE
  DELETED IS NULL
  AND TABLE_TYPE = 'BASE TABLE'
  AND CONCAT(TABLE_CATALOG,'.',TABLE_SCHEMA) IN ('<database_name>.<schema_name>')
  AND TABLE_CATALOG = '<database_name>'
  AND TRIM(TABLE_NAME) !=''
ORDER BY
  TABLE_CATALOG;

Database Name Is Not Provided in JDBC URI

SELECT
  TABLE_CATALOG AS CATALOG,
  TABLE_SCHEMA AS SCHEMA,
  TABLE_NAME,
  TABLE_TYPE,
  COMMENT AS REMARKS
FROM
  SNOWFLAKE.ACCOUNT_USAGE.TABLES
WHERE
  DELETED IS NULL
  AND TABLE_TYPE = 'BASE TABLE'
  AND CONCAT(TABLE_CATALOG,'.',TABLE_SCHEMA) IN ('<database_name>.<schema_name>')
  AND TABLE_CATALOG IN ('<database_name1>', '<database_name2>')
  AND TRIM(TABLE_NAME) !=''
ORDER BY
  TABLE_CATALOG;

View

Make sure that your query has columns labeled as DATABASE_NAME, SCHEMA_NAME, NAME, TEXT, IS_MATERIALIZED, and COMMENT in the SELECT statement.

Examples

Database Name Is Provided in JDBC URI

SELECT
  TABLE_CATALOG AS CATALOG,
  TABLE_SCHEMA AS SCHEMA,
  TABLE_NAME AS VIEW_NAME,
  VIEW_DEFINITION AS VIEW_CREATE_STATEMENT,
  'VIEW' AS VIEW_TYPE,
  COMMENT AS REMARKS
FROM
  SNOWFLAKE.ACCOUNT_USAGE.VIEWS
WHERE
  DELETED IS NULL
  AND CONCAT(TABLE_CATALOG,'.',TABLE_SCHEMA) IN ('<database_name>.<schema_name>')
  AND TABLE_CATALOG = '<database_name>'
ORDER BY
  TABLE_CATALOG;

Database Name Is Not Provided in JDBC URI

SELECT
  TABLE_CATALOG AS CATALOG,
  TABLE_SCHEMA AS SCHEMA,
  TABLE_NAME AS VIEW_NAME,
  VIEW_DEFINITION AS VIEW_CREATE_STATEMENT,
  'VIEW' AS VIEW_TYPE,
  COMMENT AS REMARKS
FROM
  SNOWFLAKE.ACCOUNT_USAGE.VIEWS
WHERE
  DELETED IS NULL
  AND CONCAT(TABLE_CATALOG,'.',TABLE_SCHEMA) IN ('<database_name>.<schema_name>')
  AND TABLE_CATALOG IN ('<database_name1>', '<database_name2>')
ORDER BY
  TABLE_CATALOG;

Column

Make sure that your query has columns labeled as CATALOG, SCHEMA, TABLE_NAME, TYPE_NAME, DATA_TYPE, COLUMN_NAME, ORDINAL_POSITION, IS_NULLABLE, REMARKS, and COLUMN_DEFAULT in the SELECT statement.

Examples

Database Name Is Provided in JDBC URI

SELECT
  TABLE_CATALOG AS CATALOG,
  TABLE_SCHEMA AS SCHEMA,
  TABLE_NAME,
  DECODE(DATA_TYPE,'TEXT','VARCHAR' || '(' || CHARACTER_MAXIMUM_LENGTH || ')','NUMBER',DATA_TYPE || '(' || NUMERIC_PRECISION ||','|| NUMERIC_SCALE || ')', DATA_TYPE) AS TYPE_NAME,
  DATA_TYPE,
  COLUMN_NAME,
  ORDINAL_POSITION,
  IS_NULLABLE,
  COMMENT AS REMARKS,
  COLUMN_DEFAULT
FROM
  SNOWFLAKE.ACCOUNT_USAGE.COLUMNS
WHERE
  DELETED IS NULL
  AND CONCAT(TABLE_CATALOG,'.',TABLE_SCHEMA) IN ('<database_name>.<schema_name>')
  AND TABLE_CATALOG = '<database_name>'
  AND TRIM(COLUMN_NAME) NOT IN ('','SYS_MV_SOURCE_PARTITION')
  AND TRIM(TABLE_NAME) !=''
ORDER BY
  TABLE_CATALOG;

Database Name Is Not Provided in JDBC URI

SELECT
  TABLE_CATALOG AS CATALOG,
  TABLE_SCHEMA AS SCHEMA,
  TABLE_NAME,
  DECODE(DATA_TYPE,'TEXT','VARCHAR' || '(' || CHARACTER_MAXIMUM_LENGTH || ')','NUMBER',DATA_TYPE || '(' || NUMERIC_PRECISION ||','|| NUMERIC_SCALE || ')', DATA_TYPE) AS TYPE_NAME,
  DATA_TYPE,
  COLUMN_NAME,
  ORDINAL_POSITION,
  IS_NULLABLE,
  COMMENT AS REMARKS,
  COLUMN_DEFAULT
FROM
  SNOWFLAKE.ACCOUNT_USAGE.COLUMNS
WHERE
  DELETED IS NULL
  AND CONCAT(TABLE_CATALOG,'.',TABLE_SCHEMA) IN ('<database_name>.<schema_name>')
  AND TABLE_CATALOG  IN ('<database_name1>', '<database_name2>')
  AND TRIM(COLUMN_NAME) NOT IN ('','SYS_MV_SOURCE_PARTITION')
  AND TRIM(TABLE_NAME) !=''
ORDER BY
  TABLE_CATALOG;

Primary and Foreign Keys

If the database name is specified in the JDBC URI, then we use queries SHOW PRIMARY KEYS IN DATABASE <database name> and SHOW EXPORTED KEYS IN DATABASE <database name>.

If database name is not specified, then we use queries SHOW PRIMARY KEYS IN ACCOUNT and SHOW EXPORTED KEYS IN ACCOUNT.

Function

Make sure that your query has columns labeled as CATALOG, SCHEMA, FUNCTION_NAME, and REMARKS in the SELECT statement.

Examples

Database Name Is Provided in JDBC URI

SELECT
  FUNCTION_CATALOG AS CATALOG,
  FUNCTION_SCHEMA AS SCHEMA,
  FUNCTION_NAME,
  COMMENT AS REMARKS,
  '' AS FUNCTION_DEFINITION,
  ARGUMENT_SIGNATURE,
  FUNCTION_ID
FROM SNOWFLAKE.ACCOUNT_USAGE.FUNCTIONS
WHERE DELETED IS NULL
  AND CONCAT(FUNCTION_CATALOG,'.',FUNCTION_SCHEMA) IN ('<database_name>.<schema_name>')
  AND FUNCTION_CATALOG = '<database_name>'
ORDER BY
  FUNCTION_CATALOG;

Database Name Is Not Provided in JDBC URI

SELECT
  FUNCTION_CATALOG AS CATALOG,
  FUNCTION_SCHEMA AS SCHEMA,
  FUNCTION_NAME,
  COMMENT AS REMARKS,
  '' AS FUNCTION_DEFINITION,
  ARGUMENT_SIGNATURE,
  FUNCTION_ID
FROM SNOWFLAKE.ACCOUNT_USAGE.FUNCTIONS
WHERE DELETED IS NULL
  AND CONCAT(FUNCTION_CATALOG,'.',FUNCTION_SCHEMA) IN ('<database_name>.<schema_name>')
  AND FUNCTION_CATALOG IN ('database_name1', 'database_name2')
ORDER BY
  FUNCTION_CATALOG;

Function Definition

Examples

Database Name Is Provided in JDBC URI

WITH FUNCTION_COLUMNS AS
(
SELECT
  FUNCTION_CATALOG,
  FUNCTION_SCHEMA,
  FUNCTION_NAME,
  DATA_TYPE AS TYPE_NAME,
  TRIM(REGEXP_REPLACE(ARGUMENT_SIGNATURE,'(\\\\()|(\\\\))')) AS ARGS,
  ARGUMENT_SIGNATURE
FROM SNOWFLAKE.ACCOUNT_USAGE.FUNCTIONS
WHERE DELETED IS NULL)
SELECT
  FUNCTION_CATALOG AS CATALOG,
  FUNCTION_SCHEMA AS SCHEMA,
  FUNCTION_NAME,
  TYPE_NAME,
  SPLIT_PART(TRIM(FUNCTION_COLUMNS_FLATTENED.VALUE::STRING),' ', 0) AS ARG_NAME,
  SPLIT_PART(TRIM(FUNCTION_COLUMNS_FLATTENED.VALUE::STRING),' ', 2) AS ARG_TYPE
FROM
  FUNCTION_COLUMNS,
  LATERAL FLATTEN(INPUT=>SPLIT(ARGS, ',')) FUNCTION_COLUMNS_FLATTENED
WHERE
  CONCAT(FUNCTION_CATALOG,'.',FUNCTION_SCHEMA) IN ('<database_name>.<schema_name>')
  AND FUNCTION_CATALOG = '<database_name>'
ORDER BY FUNCTION_CATALOG;

Database Name Is Not Provided in JDBC URI

WITH FUNCTION_COLUMNS AS
(
SELECT
  FUNCTION_CATALOG,
  FUNCTION_SCHEMA,
  FUNCTION_NAME,
  DATA_TYPE AS TYPE_NAME,
  TRIM(REGEXP_REPLACE(ARGUMENT_SIGNATURE,'(\\\\()|(\\\\))')) AS ARGS,
  ARGUMENT_SIGNATURE
FROM SNOWFLAKE.ACCOUNT_USAGE.FUNCTIONS
WHERE DELETED IS NULL)
SELECT
  FUNCTION_CATALOG AS CATALOG,
  FUNCTION_SCHEMA AS SCHEMA,
  FUNCTION_NAME,
  TYPE_NAME,
  SPLIT_PART(TRIM(FUNCTION_COLUMNS_FLATTENED.VALUE::STRING),' ', 0) AS ARG_NAME,
  SPLIT_PART(TRIM(FUNCTION_COLUMNS_FLATTENED.VALUE::STRING),' ', 2) AS ARG_TYPE
FROM
  FUNCTION_COLUMNS,
  LATERAL FLATTEN(INPUT=>SPLIT(ARGS, ',')) FUNCTION_COLUMNS_FLATTENED
WHERE
  CONCAT(FUNCTION_CATALOG,'.',FUNCTION_SCHEMA) IN ('<database_name>.<schema_name>')
  AND FUNCTION_CATALOG IN ('database_name1', 'database_name2')
  ORDER BY FUNCTION_CATALOG;