メインコンテンツへスキップ
このデータセットは New York Public Library が作成したもので、ホテル、レストラン、カフェのメニューに関する歴史的データと、料理およびその価格が収録されています。 出典: http://menus.nypl.org/data このデータはパブリックドメインです。 このデータは図書館のアーカイブに由来するため、不完全な部分があったり、統計分析には扱いにくかったりする場合があります。それでも、なかなか食欲をそそる内容でもあります。 メニューに掲載された料理に関するレコード数はわずか130万件で、ClickHouse にとっては非常に小規模なデータですが、それでも良い例です。

データセットをダウンロードする

以下のコマンドを実行します。
必要に応じて、リンクを http://menus.nypl.org/data の最新のものに置き換えてください。 ダウンロードサイズは約35 MBです。

データセットを展開する

非圧縮サイズは約 150 MB です。 データは正規化されており、4 つのテーブルで構成されています。
  • Menu — メニューに関する情報: レストラン名、メニューが確認された日付など。
  • Dish — 料理に関する情報: 料理名と、その特徴に関する情報。
  • MenuPage — メニュー内のページに関する情報。各ページはいずれかのメニューに属します。
  • MenuItem — メニューの項目です。あるメニューページ上の料理とその価格を表し、料理とメニューページへのリンクを持ちます。

テーブルを作成する

価格の保存には、Decimal 型を使用します。

データをインポートする

ClickHouse にデータを取り込むには、次を実行します:
データはヘッダー付きの CSV で表現されるため、CSVWithNames フォーマットを使用します。 データ フィールドでは二重引用符のみを使用し、単一引用符は値の中に含まれる可能性があるため、CSV パーサーが混乱しないように format_csv_allow_single_quotes を無効にします。 データには NULL が含まれないため、input_format_null_as_default を無効にします。そうしないと、ClickHouse は \N シーケンスを解析しようとして、データ内の \ と混同するおそれがあります。 設定 date_time_input_format best_effort を使うと、DateTime フィールドをさまざまなフォーマットで解析できます。たとえば、秒を含まない ISO-8601 形式の ‘2000-01-01 01:02’ も認識されます。この設定がない場合は、固定の DateTime フォーマットのみが許可されます。

データを非正規化する

データは正規形に基づいて複数のテーブルに分かれています。つまり、たとえばメニュー項目から料理名をクエリしたい場合は、JOINを実行する必要があります。 一般的な分析タスクでは、毎回JOINを実行しなくて済むよう、あらかじめJOINされたデータを扱うほうがはるかに効率的です。これを”非正規化”データと呼びます。 結合されたすべてのデータを含むテーブルmenu_item_denormを作成します:

データを確認する

Query
Response

クエリをいくつか実行する

料理の過去平均価格

Query
Response
あくまで参考程度にしてください。

ハンバーガーの価格

Query
Response

ウォッカ

Query
Response
ウォッカを見つけるには ILIKE '%vodka%' と書く必要があり、これはなかなか強烈です。

キャビア

キャビアの価格を表示してみましょう。また、キャビアを使った料理名も 1 つ表示してみましょう。
Query
Response
少なくとも、ウォッカとキャビアはあります。なかなかいいですね。

オンラインプレイグラウンド

データは ClickHouse Playground にアップロード済みです。
最終更新日 2026年7月2日