mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-18 12:22:12 +00:00
193 lines
8.8 KiB
Markdown
193 lines
8.8 KiB
Markdown
|
---
|
|||
|
title: S3バケット内のデータをクエリする方法
|
|||
|
sidebar_label: S3でのクエリ
|
|||
|
slug: /ja/chdb/guides/querying-s3
|
|||
|
description: chDBを使用してS3バケット内のデータをクエリする方法を学びます。
|
|||
|
keywords: [chdb, s3]
|
|||
|
---
|
|||
|
|
|||
|
世界中の多くのデータはAmazon S3バケットに保存されています。 このガイドでは、chDBを使用してそのデータをクエリする方法を学びます。
|
|||
|
|
|||
|
## セットアップ
|
|||
|
|
|||
|
まず、仮想環境を作成しましょう:
|
|||
|
|
|||
|
```bash
|
|||
|
python -m venv .venv
|
|||
|
source .venv/bin/activate
|
|||
|
```
|
|||
|
|
|||
|
次に、chDBをインストールします。 バージョン2.0.2以上を確実に使用してください:
|
|||
|
|
|||
|
```bash
|
|||
|
pip install "chdb>=2.0.2"
|
|||
|
```
|
|||
|
|
|||
|
次に、iPythonをインストールします:
|
|||
|
|
|||
|
```bash
|
|||
|
pip install ipython
|
|||
|
```
|
|||
|
|
|||
|
このガイドの残りのコマンドを実行するために`ipython`を使用します。起動するには次のコマンドを実行します:
|
|||
|
|
|||
|
```bash
|
|||
|
ipython
|
|||
|
```
|
|||
|
|
|||
|
また、Pythonスクリプトやお好みのノートブックでもコードを使用できます。
|
|||
|
|
|||
|
## S3バケット内のファイルを一覧表示
|
|||
|
|
|||
|
まずはじめに、[Amazonレビューを含むS3バケット](/docs/ja/getting-started/example-datasets/amazon-reviews)内のすべてのファイルを一覧表示しましょう。 これを行うために、[`s3`テーブル関数](/docs/ja/sql-reference/table-functions/s3)を使用し、ファイルへのパスまたは一連のファイルへのワイルドカードを渡します。
|
|||
|
|
|||
|
:::tip
|
|||
|
バケット名のみを渡すと例外が発生します。
|
|||
|
:::
|
|||
|
|
|||
|
また、ファイルが解析されず、ファイルごとに一行のみが返され、`_file`バーチャルカラムと`_path`バーチャルカラム経由でファイルとパスにアクセスできるようにするために、[`One`](/docs/ja/interfaces/formats#data-format-one)入力フォーマットを使用します。
|
|||
|
|
|||
|
```python
|
|||
|
import chdb
|
|||
|
|
|||
|
chdb.query("""
|
|||
|
SELECT
|
|||
|
_file,
|
|||
|
_path
|
|||
|
FROM s3('s3://datasets-documentation/amazon_reviews/*.parquet', One)
|
|||
|
SETTINGS output_format_pretty_row_numbers=0
|
|||
|
""", 'PrettyCompact')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
┌─_file───────────────────────────────┬─_path─────────────────────────────────────────────────────────────────────┐
|
|||
|
│ amazon_reviews_2010.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_2010.snappy.parquet │
|
|||
|
│ amazon_reviews_1990s.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_1990s.snappy.parquet │
|
|||
|
│ amazon_reviews_2013.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_2013.snappy.parquet │
|
|||
|
│ amazon_reviews_2015.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_2015.snappy.parquet │
|
|||
|
│ amazon_reviews_2014.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_2014.snappy.parquet │
|
|||
|
│ amazon_reviews_2012.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_2012.snappy.parquet │
|
|||
|
│ amazon_reviews_2000s.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_2000s.snappy.parquet │
|
|||
|
│ amazon_reviews_2011.snappy.parquet │ datasets-documentation/amazon_reviews/amazon_reviews_2011.snappy.parquet │
|
|||
|
└─────────────────────────────────────┴───────────────────────────────────────────────────────────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
このバケットにはParquetファイルのみが含まれています。
|
|||
|
|
|||
|
## S3バケット内のファイルのクエリ
|
|||
|
|
|||
|
次に、これらのファイルにクエリを実行する方法を学びましょう。 各ファイルの行数をカウントしたい場合は、次のクエリを実行できます:
|
|||
|
|
|||
|
```python
|
|||
|
chdb.query("""
|
|||
|
SELECT
|
|||
|
_file,
|
|||
|
count() AS count,
|
|||
|
formatReadableQuantity(count) AS readableCount
|
|||
|
FROM s3('s3://datasets-documentation/amazon_reviews/*.parquet')
|
|||
|
GROUP BY ALL
|
|||
|
SETTINGS output_format_pretty_row_numbers=0
|
|||
|
""", 'PrettyCompact')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
┌─_file───────────────────────────────┬────count─┬─readableCount───┐
|
|||
|
│ amazon_reviews_2013.snappy.parquet │ 28034255 │ 28.03 million │
|
|||
|
│ amazon_reviews_1990s.snappy.parquet │ 639532 │ 639.53 thousand │
|
|||
|
│ amazon_reviews_2011.snappy.parquet │ 6112495 │ 6.11 million │
|
|||
|
│ amazon_reviews_2015.snappy.parquet │ 41905631 │ 41.91 million │
|
|||
|
│ amazon_reviews_2012.snappy.parquet │ 11541011 │ 11.54 million │
|
|||
|
│ amazon_reviews_2000s.snappy.parquet │ 14728295 │ 14.73 million │
|
|||
|
│ amazon_reviews_2014.snappy.parquet │ 44127569 │ 44.13 million │
|
|||
|
│ amazon_reviews_2010.snappy.parquet │ 3868472 │ 3.87 million │
|
|||
|
└─────────────────────────────────────┴──────────┴─────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
また、S3バケットのHTTP URIを渡すことでも同じ結果を得ることができます:
|
|||
|
|
|||
|
```python
|
|||
|
chdb.query("""
|
|||
|
SELECT
|
|||
|
_file,
|
|||
|
count() AS count,
|
|||
|
formatReadableQuantity(count) AS readableCount
|
|||
|
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/*.parquet')
|
|||
|
GROUP BY ALL
|
|||
|
SETTINGS output_format_pretty_row_numbers=0
|
|||
|
""", 'PrettyCompact')
|
|||
|
```
|
|||
|
|
|||
|
では、`DESCRIBE`句を使用してこれらのParquetファイルのスキーマを見てみましょう:
|
|||
|
|
|||
|
```python
|
|||
|
chdb.query("""
|
|||
|
DESCRIBE s3('s3://datasets-documentation/amazon_reviews/*.parquet')
|
|||
|
SETTINGS describe_compact_output=1
|
|||
|
""", 'PrettyCompact')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
┌─name──────────────┬─type─────────────┐
|
|||
|
1. │ review_date │ Nullable(UInt16) │
|
|||
|
2. │ marketplace │ Nullable(String) │
|
|||
|
3. │ customer_id │ Nullable(UInt64) │
|
|||
|
4. │ review_id │ Nullable(String) │
|
|||
|
5. │ product_id │ Nullable(String) │
|
|||
|
6. │ product_parent │ Nullable(UInt64) │
|
|||
|
7. │ product_title │ Nullable(String) │
|
|||
|
8. │ product_category │ Nullable(String) │
|
|||
|
9. │ star_rating │ Nullable(UInt8) │
|
|||
|
10. │ helpful_votes │ Nullable(UInt32) │
|
|||
|
11. │ total_votes │ Nullable(UInt32) │
|
|||
|
12. │ vine │ Nullable(Bool) │
|
|||
|
13. │ verified_purchase │ Nullable(Bool) │
|
|||
|
14. │ review_headline │ Nullable(String) │
|
|||
|
15. │ review_body │ Nullable(String) │
|
|||
|
└───────────────────┴──────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
次に、レビューの数に基づいてトップの製品カテゴリーを計算し、平均の星評価も計算してみましょう:
|
|||
|
|
|||
|
```python
|
|||
|
chdb.query("""
|
|||
|
SELECT product_category, count() AS reviews, round(avg(star_rating), 2) as avg
|
|||
|
FROM s3('s3://datasets-documentation/amazon_reviews/*.parquet')
|
|||
|
GROUP BY ALL
|
|||
|
LIMIT 10
|
|||
|
""", 'PrettyCompact')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
┌─product_category─┬──reviews─┬──avg─┐
|
|||
|
1. │ Toys │ 4864056 │ 4.21 │
|
|||
|
2. │ Apparel │ 5906085 │ 4.11 │
|
|||
|
3. │ Luggage │ 348644 │ 4.22 │
|
|||
|
4. │ Kitchen │ 4880297 │ 4.21 │
|
|||
|
5. │ Books │ 19530930 │ 4.34 │
|
|||
|
6. │ Outdoors │ 2302327 │ 4.24 │
|
|||
|
7. │ Video │ 380596 │ 4.19 │
|
|||
|
8. │ Grocery │ 2402365 │ 4.31 │
|
|||
|
9. │ Shoes │ 4366757 │ 4.24 │
|
|||
|
10. │ Jewelry │ 1767667 │ 4.14 │
|
|||
|
└──────────────────┴──────────┴──────┘
|
|||
|
```
|
|||
|
|
|||
|
## プライベートなS3バケット内のファイルにクエリする
|
|||
|
|
|||
|
プライベートなS3バケット内のファイルにクエリを実行する場合には、アクセスキーとシークレットを渡す必要があります。これらの資格情報を`s3`テーブル関数に渡すことができます:
|
|||
|
|
|||
|
```python
|
|||
|
chdb.query("""
|
|||
|
SELECT product_category, count() AS reviews, round(avg(star_rating), 2) as avg
|
|||
|
FROM s3('s3://datasets-documentation/amazon_reviews/*.parquet', 'access-key', 'secret')
|
|||
|
GROUP BY ALL
|
|||
|
LIMIT 10
|
|||
|
""", 'PrettyCompact')
|
|||
|
```
|
|||
|
|
|||
|
:::note
|
|||
|
このクエリはパブリックバケットなので動作しません!
|
|||
|
:::
|
|||
|
|
|||
|
別の方法として、[名前付きコレクション](/docs/ja/operations/named-collections)を使用することもできますが、このアプローチはまだchDBでサポートされていません。
|