e04ed9c211
CF: Deploy Dev Docs / deploy (push) Has been cancelled
Sync Labels / build (push) Has been cancelled
tests / unit tests (macos-latest) (push) Has been cancelled
tests / unit tests (windows-latest) (push) Has been cancelled
tests / unit tests (ubuntu-latest) (push) Has been cancelled
145 lines
5.1 KiB
YAML
145 lines
5.1 KiB
YAML
# Copyright 2026 Google LLC
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
kind: source
|
|
name: snowflake-source
|
|
type: snowflake
|
|
account: ${SNOWFLAKE_ACCOUNT}
|
|
user: ${SNOWFLAKE_USER}
|
|
password: ${SNOWFLAKE_PASSWORD}
|
|
database: ${SNOWFLAKE_DATABASE}
|
|
schema: ${SNOWFLAKE_SCHEMA}
|
|
warehouse: ${SNOWFLAKE_WAREHOUSE}
|
|
role: ${SNOWFLAKE_ROLE}
|
|
---
|
|
kind: tool
|
|
name: execute_sql
|
|
type: snowflake-execute-sql
|
|
source: snowflake-source
|
|
description: Use this tool to execute SQL.
|
|
---
|
|
kind: tool
|
|
name: list_tables
|
|
type: snowflake-sql
|
|
source: snowflake-source
|
|
description: Lists detailed schema information (object type, columns, constraints, indexes, owner, comment) as JSON for user-created tables. Filters by a comma-separated list of names. If names are omitted, lists all tables in the specified database and schema.
|
|
statement: |
|
|
WITH
|
|
input_param AS (
|
|
SELECT ? AS param -- Single bind variable here
|
|
)
|
|
,
|
|
all_tables_mode AS (
|
|
SELECT COALESCE(TRIM(param), '') = '' AS is_all_tables
|
|
FROM input_param
|
|
) --SELECT * FROM all_tables_mode;
|
|
,
|
|
filtered_table_names AS (
|
|
SELECT DISTINCT TRIM(LOWER(value)) AS table_name
|
|
FROM input_param, all_tables_mode, TABLE(SPLIT_TO_TABLE(param, ','))
|
|
WHERE NOT is_all_tables
|
|
) -- SELECT * FROM filtered_table_names;
|
|
,
|
|
table_info AS (
|
|
SELECT
|
|
t.TABLE_CATALOG,
|
|
t.TABLE_SCHEMA,
|
|
t.TABLE_NAME,
|
|
t.TABLE_TYPE,
|
|
t.TABLE_OWNER,
|
|
t.COMMENT
|
|
FROM
|
|
all_tables_mode
|
|
CROSS JOIN ${SNOWFLAKE_DATABASE}.INFORMATION_SCHEMA.TABLES T
|
|
WHERE
|
|
t.TABLE_TYPE = 'BASE TABLE'
|
|
AND t.TABLE_SCHEMA NOT IN ('INFORMATION_SCHEMA')
|
|
AND t.TABLE_SCHEMA = '${SNOWFLAKE_SCHEMA}'
|
|
AND is_all_tables OR LOWER(T.TABLE_NAME) IN (SELECT table_name FROM filtered_table_names)
|
|
) -- SELECT * FROM table_info;
|
|
,
|
|
columns_info AS (
|
|
SELECT
|
|
c.TABLE_CATALOG AS database_name,
|
|
c.TABLE_SCHEMA AS schema_name,
|
|
c.TABLE_NAME AS table_name,
|
|
c.COLUMN_NAME AS column_name,
|
|
c.DATA_TYPE AS data_type,
|
|
c.ORDINAL_POSITION AS column_ordinal_position,
|
|
c.IS_NULLABLE AS is_nullable,
|
|
c.COLUMN_DEFAULT AS column_default,
|
|
c.COMMENT AS column_comment
|
|
FROM
|
|
${SNOWFLAKE_DATABASE}.INFORMATION_SCHEMA.COLUMNS c
|
|
INNER JOIN table_info USING (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME)
|
|
)
|
|
,
|
|
constraints_info AS (
|
|
SELECT
|
|
tc.TABLE_CATALOG AS database_name,
|
|
tc.TABLE_SCHEMA AS schema_name,
|
|
tc.TABLE_NAME AS table_name,
|
|
tc.CONSTRAINT_NAME AS constraint_name,
|
|
tc.CONSTRAINT_TYPE AS constraint_type
|
|
FROM
|
|
${SNOWFLAKE_DATABASE}.INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc
|
|
INNER JOIN table_info USING (TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME)
|
|
GROUP BY
|
|
tc.TABLE_CATALOG, tc.TABLE_SCHEMA, tc.TABLE_NAME, tc.CONSTRAINT_NAME, tc.CONSTRAINT_TYPE
|
|
)
|
|
SELECT
|
|
ti.TABLE_SCHEMA AS schema_name,
|
|
ti.TABLE_NAME AS object_name,
|
|
OBJECT_CONSTRUCT(
|
|
'schema_name', ti.TABLE_SCHEMA,
|
|
'object_name', ti.TABLE_NAME,
|
|
'object_type', ti.TABLE_TYPE,
|
|
'owner', ti.TABLE_OWNER,
|
|
'comment', ti.COMMENT,
|
|
'columns', COALESCE(
|
|
(SELECT ARRAY_AGG(
|
|
OBJECT_CONSTRUCT(
|
|
'column_name', ci.column_name,
|
|
'data_type', ci.data_type,
|
|
'ordinal_position', ci.column_ordinal_position,
|
|
'is_nullable', ci.is_nullable,
|
|
'column_default', ci.column_default,
|
|
'column_comment', ci.column_comment
|
|
)
|
|
) FROM columns_info ci WHERE ci.table_name = ti.TABLE_NAME AND ci.schema_name = ti.TABLE_SCHEMA),
|
|
ARRAY_CONSTRUCT()
|
|
),
|
|
'constraints', COALESCE(
|
|
(SELECT ARRAY_AGG(
|
|
OBJECT_CONSTRUCT(
|
|
'constraint_name', cons.constraint_name,
|
|
'constraint_type', cons.constraint_type
|
|
)
|
|
) FROM constraints_info cons WHERE cons.table_name = ti.TABLE_NAME AND cons.schema_name = ti.TABLE_SCHEMA),
|
|
ARRAY_CONSTRUCT()
|
|
)
|
|
) AS object_details
|
|
FROM table_info ti
|
|
ORDER BY ti.TABLE_SCHEMA, ti.TABLE_NAME;
|
|
parameters:
|
|
- name: table_names
|
|
type: string
|
|
description: "Optional: A comma-separated list of table names. If empty, details for all tables in the specified database and schema will be listed."
|
|
---
|
|
kind: toolset
|
|
name: snowflake_tools
|
|
tools:
|
|
- execute_sql
|
|
- list_tables
|