Skip to main content

Snowflake

ShanoneのSnowflake連携は、SQL実行、オブジェクトモデル全体(データベース、スキーマ、テーブル、ビュー、ウェアハウス)、データエンジニアリング用プリミティブ(ストリーム、タスク、パイプ、動的/Icebergテーブル)、ガバナンス(ロール、権限、ネットワークポリシー)、Cortex AIにまたがる142個のツールをエージェントに提供します——データプラットフォームの運用の大半をエージェントから直接実行できます。

はじめに

1

キーペアを生成する

Snowflakeは単純なトークンではなくキーペア認証を使用します。RSAキーペアを生成し、公開鍵をSnowflakeユーザーに設定します(ALTER USER ... SET RSA_PUBLIC_KEY = '...')。
2

Shanoneで認証情報を接続する

エージェントにSnowflake関連の作業を依頼(例: 「すべてのウェアハウスと現在のサイズを一覧表示して」)するか、Shanoneダッシュボードの連携からAccount Identifier、Username、Private Key(PEM)を事前に登録しておきます。3つすべてが必須です。
3

リクエストを再実行する

接続が完了すると、snowflake_*ツールに対するshanone_execute_tool呼び出しが成功するようになります。

利用可能なツール

ShanoneはSnowflake向けに142個のツールを、以下のカテゴリに整理して提供しています。
snowflake_execute_sql, snowflake_get_statement_status, snowflake_get_statement_result, snowflake_cancel_statement, snowflake_query, snowflake_execute_dml, snowflake_execute_ddl, snowflake_execute_multi_statements, snowflake_execute_async, snowflake_poll_until_complete, snowflake_describe_table
snowflake_list_databases, snowflake_get_database, snowflake_create_database, snowflake_delete_database, snowflake_list_schemas, snowflake_get_schema, snowflake_create_schema, snowflake_delete_schema, snowflake_list_roles, snowflake_get_role, snowflake_create_role, snowflake_delete_role, snowflake_list_database_roles, snowflake_get_database_role, snowflake_create_database_role, snowflake_delete_database_role, snowflake_list_users, snowflake_get_user, snowflake_create_user, snowflake_delete_user
snowflake_list_tables, snowflake_get_table, snowflake_delete_table, snowflake_create_table, snowflake_update_table, snowflake_clone_table, snowflake_undrop_table, snowflake_list_views, snowflake_get_view, snowflake_create_view, snowflake_delete_view, snowflake_list_iceberg_tables, snowflake_get_iceberg_table, snowflake_create_iceberg_table, snowflake_create_iceberg_table_as_select, snowflake_create_iceberg_from_glue, snowflake_create_iceberg_from_delta, snowflake_create_iceberg_from_files, snowflake_create_iceberg_from_rest, snowflake_delete_iceberg_table, snowflake_resume_iceberg_recluster, snowflake_list_dynamic_tables, snowflake_get_dynamic_table, snowflake_create_dynamic_table, snowflake_delete_dynamic_table, snowflake_suspend_dynamic_table, snowflake_resume_dynamic_table, snowflake_refresh_dynamic_table
snowflake_list_warehouses, snowflake_get_warehouse, snowflake_create_warehouse, snowflake_delete_warehouse, snowflake_resume_warehouse, snowflake_suspend_warehouse, snowflake_list_compute_pools, snowflake_get_compute_pool, snowflake_create_compute_pool, snowflake_update_compute_pool, snowflake_delete_compute_pool, snowflake_resume_compute_pool, snowflake_suspend_compute_pool, snowflake_stop_all_services
snowflake_list_streams, snowflake_get_stream, snowflake_create_stream, snowflake_delete_stream, snowflake_clone_stream, snowflake_list_tasks, snowflake_get_task, snowflake_create_task, snowflake_update_task, snowflake_delete_task, snowflake_execute_task, snowflake_resume_task, snowflake_list_pipes, snowflake_get_pipe, snowflake_create_pipe, snowflake_delete_pipe, snowflake_refresh_pipe
snowflake_list_functions, snowflake_get_function, snowflake_create_function, snowflake_delete_function, snowflake_execute_function, snowflake_list_procedures, snowflake_get_procedure, snowflake_create_procedure, snowflake_delete_procedure, snowflake_call_procedure, snowflake_list_stages, snowflake_get_stage, snowflake_create_stage, snowflake_delete_stage, snowflake_list_stage_files, snowflake_get_presigned_url
snowflake_grant_privileges, snowflake_revoke_privileges, snowflake_list_grants, snowflake_list_network_policies, snowflake_get_network_policy, snowflake_create_network_policy, snowflake_delete_network_policy, snowflake_list_network_rules, snowflake_create_network_rule, snowflake_delete_network_rule, snowflake_list_secrets, snowflake_get_secret, snowflake_create_secret, snowflake_delete_secret, snowflake_list_tags, snowflake_get_tag, snowflake_create_tag
snowflake_list_alerts, snowflake_get_alert, snowflake_create_alert, snowflake_delete_alert, snowflake_execute_alert, snowflake_list_notification_integrations, snowflake_get_notification_integration, snowflake_create_notification_integration, snowflake_delete_notification_integration
snowflake_list_image_repositories, snowflake_get_image_repository, snowflake_create_image_repository, snowflake_delete_image_repository, snowflake_list_external_volumes
snowflake_cortex_chat_completion, snowflake_cortex_embed, snowflake_cortex_search, snowflake_cortex_inference, snowflake_cortex_messages

よくあるユースケース

アドホック分析

ウェアハウスに対してSQLクエリを実行し、結果セットを自然言語で要約する

コスト管理

ウェアハウスを一覧表示し、稼働中のものを確認して、アイドル状態のものをサスペンドしコンピュートコストを削減する

アクセスレビュー

インシデントレビューの前に、データベースの権限とロールを一覧表示して書き込み権限を持つユーザーを監査する

パイプラインの監視

スキーマ全体のタスクとストリームの状態を確認し、壊れたELTパイプラインを検出する

トラブルシューティング

SnowflakeはAccount Identifier、Username、Private Keyの3つすべてを必要とします——一部だけでは認証できません。Private KeyがSnowflakeユーザーに登録された公開鍵に対応する、暗号化されていないPEM形式であることを再確認してください。
実行時間の長いクエリは非同期で実行されます——返されたステートメントハンドルでsnowflake_get_statement_statusとsnowflake_get_statement_resultをポーリングするか、snowflake_poll_until_completeを使って自動的に完了を待ってください。
ほとんどのcreate/delete/grant操作は、接続ユーザーのロールに対応するオブジェクト権限が必要です——不具合と決めつける前に、snowflake_list_grantsで現在のロールが実際にできることを確認してください。
動的テーブルとストリームは、設定されたラグ/スケジュールに従うか明示的にトリガーされた場合のみ更新されます——snowflake_refresh_dynamic_tableを使うか、オブジェクトのTARGET_LAG設定を確認してください。