Snowflake Notebooks でコードを開発し、実行します。¶
このトピックでは、 Snowflake Notebooks でコードを書いて実行する方法について説明します。
ノートブックセルの基本¶
このセクションでは基本的なセル操作について紹介します。 ノートブックを作成 すると、3つのセル例が表示されます。これらのセルを変更したり、新しいセルを追加することができます。
新しいセルを作成する¶
Snowflake Notebooks は3種類のセルをサポートしています: SQL、Python、Markdown。新しいセルを作成するには、既存のセルにカーソルを合わせるか、ノートブックの一番下までスクロールして、追加したいセルタイプのボタンのいずれかを選択します。
セルを作成した後でも、2つの方法のいずれかを使って、セルの言語を随時変更することができます。
言語ドロップダウンメニューを選択し、別の言語を選択します。
セルを移動する¶
セルを移動するには、マウスを使ってセルをドラッグ・アンド・ドロップするか、アクションメニューを使います。
(オプション1)移動する既存のセルにマウスを合わせます。マウスでドラッグ&ドロップアイコンを選択し、セルを新しい場所に移動します。
(オプション2)垂直省略記号
(アクション)メニューを選択します。次に、適切なアクションを選択します。
注釈
セル間でフォーカスを移動させるには、Up、:kbd:`Down`を使用します。
セルを削除する¶
セルを削除するには、ノートブックで次の手順を実行します。
キーボードショートカット を使ってセルを削除することもできます。
PythonとSQLセルを使用する際の注意点については、 ノートブックを実行する際の注意点 をご参照ください。
Snowflake Notebooks でPythonと SQL セルをを実行する¶
Snowflake Notebooks でPythonと SQL セルを実行するには、次を行うことができます。
シングルセルを実行: コードの更新を頻繁に行う場合は、このオプションを選択してください。
ノートブック内のすべてのセルを連続した順序で実行: ノートブックを提示または共有する前にこのオプションを選択すると、受信者に最新の情報が表示されます。
Macキーボードで:kbd:
CMD
+ Shift + Return を押すか、またはWindowsキーボードで:kbd:CTRL
+ Shift + Enter を押します。Run all を選択します。
セルを実行して次のセルに進む: セルを実行して次のセルに進むにはこのオプションを選んでください。
Macキーボードで:kbd:
Shift
+ Return を押すか、またはWindowsキーボードで:kbd:Shift
+ Enter を押します。セルの垂直省略記号(その他のアクション)を選択し、 Run cell and advance を選択します。
上記すべてを実行:以前のセルの結果を参照するセルを実行する場合、このオプションを選択します。
セルの垂直省略記号(その他のアクション)を選択し、 Run all above を選択します。
以下すべて実行:後続のセルに依存するセルを実行する場合、このオプションを選択します。このオプションは、現在のセルとそれに続くすべてのセルを実行します。
セルの垂直省略記号(その他のアクション)を選択し、 Run all below を選択します。
あるセルが動作しているとき、他の実行要求はキューに入れられ、アクティブに動作しているセルが終了すると実行されます。
セルステータスを検査する¶
セルが表示する色によって、セルの実行状態が示されます。このステータスの色はセルの左の壁と右のセルナビゲーションマップ の2箇所に表示されます。
セルステータスの色:
青い点 - セルが変更されたが、まだ実行されていないことを示します。
赤 - エラーが発生しました。
緑 - 実行に成功しました。
動いている緑 - 現在セルが実行されています。
グレーの点滅 - セルは実行待ちです。このステータスは、複数のセルがトリガーされたときに発生します。
注釈
マークダウンのセルにはステータスが表示されません。
セルの実行が終わると、実行にかかった時間がセルの上部に表示されます。このテキストを選択すると、実行詳細ウィンドウが表示されます。実行開始時刻、終了時刻、総経過時間など、実行の詳細を表示することができます。
SQLセルには、クエリの実行に使用されたウェアハウス、返された行、クエリIDページへのハイパーリンクなどの追加情報が含まれます。
実行中のセルを停止¶
現在実行中のコードセルの実行を停止するには、セルの右上にある停止ボタンを選択します。
これにより、現在実行中のセルと、それ以降に実行がスケジュー ルされているすべてのセルの実行が停止されます。
Markdownでテキストをフォーマット¶
ノートブックにMarkdownを含めるには、Markdownセルを追加してください:
キーボードショートカット を使用し、 Markdown を選択するか、 + Markdown を選択します。
Edit markdown 鉛筆アイコンを選択するか、セルをダブルクリックして、Markdownを書き始めます。
有効なMarkdownを入力して、テキストセルをフォーマットすることができます。入力すると、Markdown構文の下にフォーマットされたテキストが表示されます。

書式付きテキストのみを表示するには、 Done editing チェックマークアイコンを選択します。

注釈
マークダウンのセルは現在、HTMLのレンダリングをサポートしていません。
Markdownの基本¶
このセクションでは、Markdownを使い始める上での基本的な構文について説明します。
ヘッダー
ヘディングレベル |
Markdown構文 |
例 |
---|---|---|
最上位 |
# Top-level Header
|
![]() |
第2レベル |
## 2nd-level Header
|
![]() |
第3レベル |
### 3rd-level Header
|
![]() |
インラインテキストの書式設定
テキスト形式 |
Markdown構文 |
例 |
---|---|---|
斜体 |
*italicized text*
|
![]() |
太字 |
**bolded text**
|
![]() |
リンク |
[Link text](url)
|
![]() |
リスト
リストタイプ |
Markdown構文 |
例 |
---|---|---|
順序付きリスト |
1. first item
2. second item
1. Nested first
2. Nested second
|
![]() |
順序なしリスト |
- first item
- second item
- Nested first
- Nested second
|
![]() |
コードの書式設定
言語 |
Markdown構文 |
例 |
---|---|---|
Python |
```python
import pandas as pd
df = pd.DataFrame([1,2,3])
```
|
![]() |
SQL |
```sql
SELECT * FROM MYTABLE
```
|
![]() |
画像の埋め込み
ファイルタイプ |
Markdown構文 |
例 |
---|---|---|
画像 |

|
![]() |
これらのMarkdownの例を示すノートブックについては、ビジュアルデータストーリーノートブックの Markdownセル セクションをご参照ください。
セル出力の理解¶
Pythonセルを実行すると、そのセルからの次のような出力が結果に表示されます。
print()、ログ、エラー、警告など、コンソールに書き込まれるすべての結果。
Streamlitのインタラクティブテーブルディスプレイ、
st.dataframe()
でデータフレームが自動的に印刷されます。サポートされているデータフレーム表示タイプには、pandas DataFrame、Snowpark DataFrames、Snowpark Tablesがあります。
Snowparkの場合、印刷されたデータフレームは、
.show()
を呼び出すことなく、積極的に評価されます。非対話モードでノートブックを実行する場合など、データフレームを積極的に評価したくない場合は、SnowflakeはSnowparkコードの全体的な実行時間を短縮するために、データフレームのprint文を削除することをお勧めします。
可視化は出力でレンダリングされます。 Snowflake Notebooks でのデータの可視化に関する詳細については、 Snowflake Notebooks のデータを可視化する をご参照ください。
さらに、SQLクエリの結果に Python でアクセスしたり、その逆も可能です。 Snowflake Notebooks の参照セルと変数 をご参照ください。
Snowflake Notebooks の参照セルと変数¶
ノートブックのセルで前のセルの結果を参照できます。たとえば、 SQL セルの結果やPython変数の値を参照したい場合は、以下のテーブルをご参照ください。
注釈
参照のセル名は大文字と小文字を区別し、参照先のセル名と正確に一致する必要があります。
PythonのセルでSQLの出力を参照する:.
参照セルタイプ |
現在のセルタイプ |
参照構文 |
例 |
---|---|---|---|
SQL |
Python |
|
SQL の結果テーブルをSnowpark DataFrame に変換します。
SELECT 'FRIDAY' as SNOWDAY, 0.2 as CHANCE_OF_SNOW
UNION ALL
SELECT 'SATURDAY',0.5
UNION ALL
SELECT 'SUNDAY', 0.9;
セルを参照して、SQLの結果にアクセスできます。 snowpark_df = cell1.to_df()
結果をpandas DataFrame データフレームに変換します。 my_df = cell1.to_pandas()
|
SQLコードの変数を参照します。
重要
SQL コードでは、 string
型のPython変数のみを参照できます。Snowpark DataFrame やpandas DataFrame などのPythonネイティブ DataFrame 形式は参照できません。
参照セルタイプ |
現在のセルタイプ |
参照構文 |
例 |
---|---|---|---|
SQL |
SQL |
|
例えば、 SELECT * FROM {{cell2}} where PRICE > 500
|
Python |
SQL |
|
例えば、 c = "USA"
変数を参照することで、 SELECT * FROM my_table WHERE COUNTRY = {{c}}
|
ノートブックを実行する際の注意点¶
ノートブックは発信者権限を使用して実行されます。その他の留意点については、 ノートブックのセッションコンテキストの変更 をご参照ください。
Pythonライブラリをインポートしてノートブックで使うことができます。詳細については、 ノートブックで使用するPythonパッケージをインポートする をご参照ください。
SQLセルでオブジェクトを参照する場合は、指定したデータベースまたはスキーマのオブジェクト名を参照するのでない限り、完全修飾オブジェクト名を使用する必要があります。 ノートブックのセッションコンテキストの変更 をご参照ください。
ノートブックの下書きは3秒ごとに保存されます。
非アクティブな状態(コード編集やクエリ実行がない)が1時間続くと、ノートブックカーネルはシャットダウンします。Snowflakeでは、ウェアハウスでパラメーターを確認することも推奨しています。 STATEMENT_TIMEOUT_IN_SECONDS または STATEMENT_QUEUED_TIMEOUT_IN_SECONDS を小さな値に設定すると、ノートブックがシャットダウンしたり、起動に失敗したりすることがあります。
ノートブックのバージョンを管理するためにGitの統合を使用することができます。
ノートブックセルの結果は、セッションをまたいでキャッシュされます。ノートブックを開き直すと、UIを使って前回ノートブックを実行したときの過去の結果が表示されます。キャッシュされた結果は、ノートブックを実行した同じユーザーのみに表示されます。
BEGIN ... END (Snowflakeスクリプト) は、SQL セルでサポートされていません。代わりに、Pythonのセルで Session.sql().collect() メソッドを使用してスクリプトブロックを実行します。SQL クエリを即座に実行するために、
collect
の呼び出しでsql
呼び出しをチェーンします。次のコードは
session.sql().collect()
メソッドを使用してSnowflakeスクリプトブロックを実行します。from snowflake.snowpark.context import get_active_session session = get_active_session() code_to_run = """ BEGIN CALL TRANSACTION_ANOMALY_MODEL!DETECT_ANOMALIES( INPUT_DATA => SYSTEM$REFERENCE('TABLE', 'ANOMALY_INFERENCE'), TIMESTAMP_COLNAME =>'DATE', TARGET_COLNAME => 'TRANSACTION_AMOUNT', CONFIG_OBJECT => {'prediction_interval': 0.95} ); LET x := SQLID; CREATE TABLE ANOMALY_PREDICTIONS AS SELECT * FROM TABLE(RESULT_SCAN(:x)); END; """ data = session.sql(code_to_run).collect(block=True);