Snowflakeのステージに対するディレクトリテーブルのselectとlistコマンドの違い

# 説明
一個前の投稿

https://qiita.com/a-kamiya/items/c1f2166bd1e60b3e1f40

で以下のように書いたまま、本題からズレるので深追いしなかった部分についてです。
>（なお、外部ステージ作成の際のURLの最後の「/」を忘れると、ディレクトリテーブルのselectだと1件なのにlistコマンドだと12,106件取れてしまい、本題でないところで悩む羽目になります。）

今回はこの部分について深堀したいと思います。

# 実験
QuickStartのCITIBIKEのデータファイルを外部ステージに設定するというのは前回やった手順です。
今回は前回作った外部ステージと、比較用に外部ステージをもう1つ作ります。

前回作成した外部ステージで「citibike_stage」という名前。
![スクリーンショット 2024-09-13 153707.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/231acdc4-cfb6-33da-3ee4-71779561cb98.png)
S3のパス指定で最後にスラッシュをつけたものです。

2つ目は今回作成した外部ステージで「citibike_stage_without_slash」という名前。
![スクリーンショット 2024-09-13 153633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/0eb9e2cb-ebd4-8bfd-0483-8da6da5572f8.png)
S3のパス指定で最後にスラッシュをつけなかったものです。

作成後のGUIでの見え方です。
スラッシュありの外部ステージ
![スクリーンショット 2024-09-13 153753.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/f7b5f43d-1486-5368-b18a-4ae8698abac0.png)
@citibike_stage：1ファイル見えてます。

スラッシュなしの外部ステージ
![スクリーンショット 2024-09-13 153808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/34823319-69d1-0739-a188-63899afa0c43.png)
@citibike_stage_without_slash：1ファイル見えてます。
ここは同じ見え方です。

次にクエリを実行してみます。
ディレクトリテーブルに対するselectです。
スラッシュありの外部ステージ
select count(*) from directory(@citibike_stage);
![スクリーンショット 2024-09-13 153919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/9034c513-cdd0-634c-0b85-c595f84f4d86.png)
@citibike_stage：カウントは1でした。

スラッシュなしの外部ステージ
select count(*) from directory(@citibike_stage_without_slash);
![スクリーンショット 2024-09-13 153953.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/97106e57-0260-a3f6-6bdc-8f2dd33cd25b.png)
@citibike_stage_without_slash：こちらもカウントは1でした。
同じです。

listコマンドです。
スラッシュありの外部ステージ
list @citibike_stage;
![スクリーンショット 2024-09-13 154021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/97cfd074-3986-f246-edc2-ca3e4131b4ac.png)
@citibike_stage：カウントは1でした。

スラッシュなしの外部ステージ
list @citibike_stage_without_slash;
![スクリーンショット 2024-09-13 154056.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/02f2120c-dc4a-034b-618b-b272fc98a39a.png)

@citibike_stage_without_slash：カウントは12,106！？（画面の右側に件数あり）
最初見たときめちゃくちゃビビりました。

# 考察
実際の取得しているファイルのパス、先頭と一番下までスクロールした画面を見てみると
![スクリーンショット 2024-09-13 154118.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/f77fdd70-c4be-6fb4-2061-2d39df7e4c2f.png)
どうやら
s3://snowflake-workshop-lab/citibike-trips/
s3://snowflake-workshop-lab/citibike-trips
外部ステージのURL指定した値で始まるもの、フォルダもファイルもすべてが取得できている模様です。
前方一致で問答無用に取れちゃってます。
スラッシュを付けていればフォルダ配下しか取得できないので意図したとおりになりますね。

そういう仕様だったらまあそうなんでしょうけど、気になるのはディレクトリテーブルに対するselectとlistコマンドの結果が違うというところ。
モヤモヤしたまま解決はしてません。
実は昨日9/12のSnowflakeのイベント、Snowflake World Tour TokyoでSnowflakeブースにいた社員さんに聞いたんですがわかりませんでした。
スラッシュなしのステージ指定みたいなのはあんまり使う用途はないと思うので、ちゃんと最後にスラッシュ付けるというのが注意点になるかと思います、


ここまで下書きしていてググったら、Snowflake Data Superherosのこみぃさんがzennで同じことを書いてました。

https://zenn.dev/dataheroes/articles/d1c7948cffe9a0

こみぃさん的には「多分バグ」とのこと。

# 追記
SnowSQLで試した結果も追記です。

```
baihebu#COMPUTE_WH@TEST_DB.TEST_SCHEMA>list @citibike_stage;
+-----------------------------------------------------------------+----------+------------------------------------+------------------------------+
| name                                                            |     size | md5                                | last_modified                |
|-----------------------------------------------------------------+----------+------------------------------------+------------------------------|
| s3://snowflake-workshop-lab/citibike-trips/trips_2013_0_0_0.csv | 19321996 | 93b24ec74f25538f2a20c7341ef582af-2 | Wed, 5 Oct 2022 00:47:28 GMT |
+-----------------------------------------------------------------+----------+------------------------------------+------------------------------+
1 Row(s) produced. Time Elapsed: 0.428s

baihebu#COMPUTE_WH@TEST_DB.TEST_SCHEMA>list @citibike_stage_without_slash;
～
～ここは一杯出すぎなので省略
～
| s3://snowflake-workshop-lab/citibike-trips-scripts/Workshop_SQL.sql
          |    14796 | 2bcb821e00ad961c2fc781601fee295a   | Mon, 17 Apr 2023 21:49:25 GMT |
| s3://snowflake-workshop-lab/citibike-trips-scripts/reader_query.sql
          |     1295 | 99f1a07693d6c8cc36729fbdf87c3b39   | Tue, 26 Jul 2022 20:58:40 GMT |
| s3://snowflake-workshop-lab/citibike-trips/trips_2013_0_0_0.csv
          | 19321996 | 93b24ec74f25538f2a20c7341ef582af-2 | Wed, 5 Oct 2022 00:47:28 GMT  |
+---------------------------------------------------------------------------------------------------------------------------------+----------+------------------------------------+-------------------------------+
12106 Row(s) produced. Time Elapsed: 10.493s
```
やっぱりSnowSQLでも同じ結果でした。