
SQL
イベント
該当するコンテンツが見つかりませんでした
マガジン
技術ブログ
こんにちは!SCSKサイトーです🐧 Snowflakeに Cortex Code がリリースされました。 これが、もう、とても便利です。 「あ、これSQL初心者のSnowflakeライフが、かなり改善されるやつだ」 と素直に思いました。 どう改善されたのかをぜひお伝えしたい! ──そう思い、戦い形式でお届けします。 ※利用しているデータはすべてサンプルデータです Snowflake Cortex Codeとは Snowflake Cortex Codeを端的に言えば、 SnowflakeにてSQL/Pythonコードを考えるだけでなく、作ってくれるAI機能 今回紹介するのは Snowsight(Web UI)版 の Cortex Codeです! なお使う為には以下設定が必要です👇 利用アカウントが クロスリージョン推論 を有効 利用ユーザーが SNOWFLAKE.COPILOT_USER & “SNOWFLAKE.CORTEX_USER または SNOWFLAKE.CORTEX_AGENT_USER” ロールを保持 第1回戦:しょうもない誤字 まずは初心者やりがちの事故から(お分かりいただけただろうか…) テーブル名がスペルミス ついでにSQL句も間違ってる ということがありました。 エラー文の下部「修正」をクリックすると、Cortex Codeが正しい回答を教えてくれます。 しかもなんと「保持」をクリックすると、正しいSQL文に書き換えてくれます。 これで「上司に勇気出してエラー相談したら、ただの誤字だった」問題とサヨナラ! 第2回戦:既存SQLの解説 「毎月のデータを抽出して。よしなにこのSQLを使い回せばいいから」と言われたとき 過去の賢人が作った長いSQLを見て どこを直せばいいのか、そもそも何しているのかすら分からん…。 そんなときもCortex Code! 雑なプロンプトを投げるだけで、SQL文の解説をしてくれます! 第3回戦:そもそも0から作る そして最大の山場 SQLが作れない ORDER BY? DESC?ASC? 正直、その場その場で検索していました。 そんな状態でも Cortex Codeは助けてくれます! プロンプトで指示するだけで 対象テーブルの中身に沿ったSQL を生成してくれます! 「SQLを知らないからSnowflake触れない。。」 という前提が、少しずつ崩れています! まだまだ戦いは続く ここで重要なポイント! Cortex Codeがすごいのは、 ✅ 実際のテーブル名・カラム名を含めて考えてくれること 普通の生成AIだと、 テンプレSQLは出る でも「どこを置き換えるか」が分からない ということがよくあります。 Cortex Codeは、 Snowflake内の実データを用いて、そのまま使える代案を出してくれます! 唯一の欠点は、「元に戻す」「保持」という選択肢が分かりづらいです。(個人の感想) 代案を書いてもらった後に、「保持って代案が残るの?私が書いたのが残るの?」と時々迷います…(正解は前者です) 我々の戦いはまだまだ続いていきます! まとめ ここまで読んでいただいて、 「Cortex Code、便利そうだな」 と少しでも思ってもらえたら嬉しいです! 今回はSQLの話でしたが、Pythonコードにも使えます。 Cortex Codeを使ってPythonでStreamlitアプリ作成するといった上級者向けの使い方も ゆくゆくは試していきたいです!
慶應義塾大学の宮崎・中森・李です。私たちは、2025年度未踏IT人材発掘・育成事業において、高性能で耐故障なMySQLの開発に取り組みました。このプロジェクトで我々が開発したのは、MySQL互換DBMS「Kamo」です。 […]
はじめに こんにちは。 開発本部 開発1部 デリッシュリサーチでデータエンジニアをしている吉田です。 今回は、DatabricksのUnity Catalog管理下のテーブルを、自然言語で検索できるClaude Codeスキルを構築した話を紹介します。 背景 以前の記事 では、Databricks Managed MCP Serverを通してUnity Catalog Functionを実行することでテーブルのスキーマ情報を取得する方法を紹介しました。 この仕組みは便利でしたが、テーブルのパスを把握していることが前提でした。 しかし実際の運用では「あのデータはどのテーブルだっけ?」というケースが多く、テーブルがわからない状態から対象のテーブルを探したいというニーズがありました。 そこで今回は、社内で活用が進んでいるClaude Codeのスキルとして、自然言語でテーブルを検索するスキルを作成します。 スキルの概要 スキルの動作フローは以下のようになります。 ユーザが質問 : 「アプリの動画視聴ログはどこ?」 Claude CodeがSkillを起動 質問文からLLMが文脈に応じてキーワードを抽出 : アプリ/動画/視聴/app/search など scriptを利用して検索SQLを作成 Databricks DBSQL MCPを使ってsystemテーブルに対してクエリを発行 結果を受け取り解釈、イマイチな場合、キーワードを変えて再検索 Claude Codeが回答 : 「最有力候補は以下です。その他候補は ~ です」 アプローチとしてテーブル情報をVector Searchすることも考えましたが、今回は簡単な手法を選択しました。 Databricks Managed MCPの活用 今回のスキルでは、Databricksが提供するManaged MCP ServerのDBSQLを利用しています。 https://docs.databricks.com/gcp/ja/generative-ai/mcp/managed-mcp 以前の記事ではUnity Catalog FunctionsのMCP Serverを使い、事前に定義した関数を呼び出すアプローチでした。 今回は任意のクエリを実行できるDBSQLのMCP Serverを使い、SQLを直接実行するアプローチを取っています。 DBSQL MCPでは以下のツールを提供しています。 execute_sql 任意クエリの実行ツール execute_sql_read_only Select,Showなど読み取りクエリの実行ツール poll_sql_result 長時間実行されるクエリの結果を取得するツール execute_sql ツールは、 Delete , Drop などの危険なクエリを発行できるため、必要に応じて利用制限を行うのが良いです。 // settings.json { " permissions ": { " deny ": [ " mcp__<mcp_name>__execute_sql " ] } } DBSQL MCPは標準で提供されており、すぐに利用する事ができます。 systemテーブルによるメタデータ検索 Databricksの system.information_schema にはカタログ配下のオブジェクトに関するメタデータが保存されています。 https://docs.databricks.com/aws/ja/sql/language-manual/sql-ref-information-schema 主に system.information_schema.tables を利用してテーブル名やコメント名に対してLIKE検索を行うことでテーブルを探しています。 SELECT table_catalog, table_schema, table_name FROM system.information_schema.tables WHERE LOWER (table_name) LIKE ' %<keyword1>% ' OR LOWER ( comment ) LIKE ' %<keyword1>% ' Claude Codeスキルとして実装 スキルの構成 Claude Codeのスキルは SKILL.md というファイルで定義します。 今回のスキルのディレクトリ構成は以下のとおりです。 ~/.claude/skills/<skill-name>/ ├── SKILL.md # スキル定義 └── scripts/ ├── _common.py # 共通ユーティリティ ├── gen_search_table_query.py # テーブル検索(基本) ├── gen_get_columns_query.py # カラム情報取得 └── gen_get_sample_data_query.py # サンプルデータ取得 SKILL.mdのfrontmatterで、スキルが使用できるツールを制限しています。 --- name : <skill-name> description : Databricks Unity Catalogのテーブル検索スキル。 context : fork allowed-tools : - Bash - mcp__databricks-sql-mcp__execute_sql_read_only - mcp__databricks-sql-mcp__poll_sql_result --- context: fork スキルを独立したサブプロセスで実行し、メインの会話コンテキストを汚さない allowed-tools Bashに加え、読み取り専用のMCPツールのみを許可 SKILL.md の本文にはワークフロー(検索の手順)や出力ルール(最有力候補1件+その他最大4件に絞り込む等)を記述しており、Claude Codeはこの指示に従ってSQLを生成・実行します。 sqlglotによるSQL生成 SQLは sqlglot ライブラリを利用したpythonスクリプトで生成しています。 https://sqlglot.com/sqlglot.html プロンプトでSQLの生成をAgentに任せる方法と比べて、確実に目的のクエリを作成することができます。 SKILL.md中に以下のようなコマンドを指示することでSQLを作成しています。 uv run --no-project --with sqlglot scripts/<スクリプト名>.py <パラメータ> sqlglotでのクエリ生成は以下のようにして行っています。 gen_search_table_query.py,_common.pyから抜粋 # gen_search_table_query.py from sqlglot import exp, select from _common import like_or def build_query (keywords: list [ str ]) -> exp.Expression: return ( select( "table_catalog" , "table_schema" , "table_name" , "comment" ) .from_( "system.information_schema.tables" ) .where(like_or([( "table_name" , None ), ( "comment" , None )], keywords)) ) # _common.py def like_or ( columns: list [ tuple [ str , str | None ]], keywords: list [ str ] ) -> exp.Expression: """Build OR chain: LOWER(col) LIKE '%kw%' for each (column, keyword) pair.""" conditions = [ exp.Like( this=exp.Lower( this=exp.Column( this=exp.to_identifier(col), table=exp.to_identifier(tbl) if tbl else None , ) ), expression=exp.Literal.string(f "%{kw}%" ), ) for kw in keywords for col, tbl in columns ] return reduce ( lambda a, b: exp.Or(this=a, expression=b), conditions) 検索精度とデータカタログの重要性 今回のスキルの検索精度は、テーブルやスキーマに付与されたコメントの充実度に強く依存します。 テーブル名とコメントをLIKEで検索するため、コメントが空のテーブルはテーブル名のみでしかマッチしません。 十分な結果が得られなかった場合はサンプルデータの取得や別キーワードでの再検索など探索的にテーブルを探しますが、判断材料としてコメントは非常に重要です。 データカタログの育成こそが、データ活用全体の効率化につながると考えています。 まとめ Databricks Managed MCP ServerのDBSQLとsystemテーブルを組み合わせることで、Unity Catalogのテーブルを自然言語で探索できるClaude Codeスキルを構築しました。
















