mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-13 09:52:38 +00:00
172 lines
8.5 KiB
Markdown
172 lines
8.5 KiB
Markdown
|
---
|
|||
|
title: Parquetファイルをクエリする方法
|
|||
|
sidebar_label: Parquetファイルのクエリ
|
|||
|
slug: /ja/chdb/guides/querying-parquet
|
|||
|
description: chDBを使用してParquetファイルをクエリする方法を学びます。
|
|||
|
keywords: [chdb, parquet]
|
|||
|
---
|
|||
|
|
|||
|
世界中のデータの多くは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スクリプトやお好みのノートブックでコードを使用することもできます。
|
|||
|
|
|||
|
## Parquetメタデータの探索
|
|||
|
|
|||
|
これから、[Amazonレビュー](/docs/ja/getting-started/example-datasets/amazon-reviews)データセットのParquetファイルを探索します。まず、`chDB`をインストールしましょう:
|
|||
|
|
|||
|
```python
|
|||
|
import chdb
|
|||
|
```
|
|||
|
|
|||
|
Parquetファイルをクエリする際に、[`ParquetMetadata`](/docs/ja/interfaces/formats#parquetmetadata-data-format-parquet-metadata)入力フォーマットを使用して、ファイルの内容ではなくParquetメタデータを返すことができます。このフォーマットを使用する際に返されるフィールドを`DESCRIBE`句を使って確認しましょう:
|
|||
|
|
|||
|
```python
|
|||
|
query = """
|
|||
|
DESCRIBE s3(
|
|||
|
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_2015.snappy.parquet',
|
|||
|
ParquetMetadata
|
|||
|
)
|
|||
|
SETTINGS describe_compact_output=1
|
|||
|
"""
|
|||
|
|
|||
|
chdb.query(query, 'TabSeparated')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
num_columns UInt64
|
|||
|
num_rows UInt64
|
|||
|
num_row_groups UInt64
|
|||
|
format_version String
|
|||
|
metadata_size UInt64
|
|||
|
total_uncompressed_size UInt64
|
|||
|
total_compressed_size UInt64
|
|||
|
columns Array(Tuple(name String, path String, max_definition_level UInt64, max_repetition_level UInt64, physical_type String, logical_type String, compression String, total_uncompressed_size UInt64, total_compressed_size UInt64, space_saved String, encodings Array(String)))
|
|||
|
row_groups Array(Tuple(num_columns UInt64, num_rows UInt64, total_uncompressed_size UInt64, total_compressed_size UInt64, columns Array(Tuple(name String, path String, total_compressed_size UInt64, total_uncompressed_size UInt64, have_statistics Bool, statistics Tuple(num_values Nullable(UInt64), null_count Nullable(UInt64), distinct_count Nullable(UInt64), min Nullable(String), max Nullable(String))))))
|
|||
|
```
|
|||
|
|
|||
|
現在、このファイルのメタデータを見てみましょう。`columns`と`row_groups`は多くのプロパティを含むタプルの配列なので、今回はそれらを除外します。
|
|||
|
|
|||
|
```python
|
|||
|
query = """
|
|||
|
SELECT * EXCEPT(columns, row_groups)
|
|||
|
FROM s3(
|
|||
|
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_2015.snappy.parquet',
|
|||
|
ParquetMetadata
|
|||
|
)
|
|||
|
"""
|
|||
|
|
|||
|
chdb.query(query, 'Vertical')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
Row 1:
|
|||
|
──────
|
|||
|
num_columns: 15
|
|||
|
num_rows: 41905631
|
|||
|
num_row_groups: 42
|
|||
|
format_version: 2.6
|
|||
|
metadata_size: 79730
|
|||
|
total_uncompressed_size: 14615827169
|
|||
|
total_compressed_size: 9272262304
|
|||
|
```
|
|||
|
|
|||
|
この出力から、このParquetファイルには40百万行以上の行があり、42の行グループに分割され、各行に15のカラムが含まれていることがわかります。行グループはデータを論理的に水平に分割したものです。各行グループには関連するメタデータがあり、クエリツールはそのメタデータを使用してファイルを効率的にクエリできます。
|
|||
|
|
|||
|
行グループの1つを見てみましょう:
|
|||
|
|
|||
|
```python
|
|||
|
query = """
|
|||
|
WITH rowGroups AS (
|
|||
|
SELECT rg
|
|||
|
FROM s3(
|
|||
|
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_2015.snappy.parquet',
|
|||
|
ParquetMetadata
|
|||
|
)
|
|||
|
ARRAY JOIN row_groups AS rg
|
|||
|
LIMIT 1
|
|||
|
)
|
|||
|
SELECT tupleElement(c, 'name') AS name, tupleElement(c, 'total_compressed_size') AS total_compressed_size,
|
|||
|
tupleElement(c, 'total_uncompressed_size') AS total_uncompressed_size,
|
|||
|
tupleElement(tupleElement(c, 'statistics'), 'min') AS min,
|
|||
|
tupleElement(tupleElement(c, 'statistics'), 'max') AS max
|
|||
|
FROM rowGroups
|
|||
|
ARRAY JOIN tupleElement(rg, 'columns') AS c
|
|||
|
"""
|
|||
|
|
|||
|
chdb.query(query, 'DataFrame')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
name total_compressed_size total_uncompressed_size min max
|
|||
|
0 review_date 493 646 16455 16472
|
|||
|
1 marketplace 66 64 US US
|
|||
|
2 customer_id 5207967 7997207 10049 53096413
|
|||
|
3 review_id 14748425 17991290 R10004U8OQDOGE RZZZUTBAV1RYI
|
|||
|
4 product_id 8003456 13969668 0000032050 BT00DDVMVQ
|
|||
|
5 product_parent 5758251 7974737 645 999999730
|
|||
|
6 product_title 41068525 63355320 ! Small S 1pc Black 1pc Navy (Blue) Replacemen... 🌴 Vacation On The Beach
|
|||
|
7 product_category 1726 1815 Apparel Pet Products
|
|||
|
8 star_rating 369036 374046 1 5
|
|||
|
9 helpful_votes 538940 1022990 0 3440
|
|||
|
10 total_votes 610902 1080520 0 3619
|
|||
|
11 vine 11426 125999 0 1
|
|||
|
12 verified_purchase 102634 125999 0 1
|
|||
|
13 review_headline 16538189 27634740 🤹🏽♂️🎤Great product. Practice makes perfect. D...
|
|||
|
14 review_body 145886383 232457911 🚅 +🐧=💥 😀
|
|||
|
```
|
|||
|
|
|||
|
## Parquetファイルのクエリ
|
|||
|
|
|||
|
次に、ファイルの内容をクエリします。上記のクエリを調整して、`ParquetMetadata`を削除し、すべてのレビューで最も人気のある`star_rating`を計算してみましょう:
|
|||
|
|
|||
|
```python
|
|||
|
query = """
|
|||
|
SELECT star_rating, count() AS count, formatReadableQuantity(count)
|
|||
|
FROM s3(
|
|||
|
'https://datasets-documentation.s3.eu-west-3.amazonaws.com/amazon_reviews/amazon_reviews_2015.snappy.parquet'
|
|||
|
)
|
|||
|
GROUP BY ALL
|
|||
|
ORDER BY star_rating
|
|||
|
"""
|
|||
|
|
|||
|
chdb.query(query, 'DataFrame')
|
|||
|
```
|
|||
|
|
|||
|
```text
|
|||
|
star_rating count formatReadableQuantity(count())
|
|||
|
0 1 3253070 3.25 million
|
|||
|
1 2 1865322 1.87 million
|
|||
|
2 3 3130345 3.13 million
|
|||
|
3 4 6578230 6.58 million
|
|||
|
4 5 27078664 27.08 million
|
|||
|
```
|
|||
|
|
|||
|
興味深いことに、5つ星レビューは他のすべての評価を合わせたものよりも多いことがわかります。Amazonの商品が好まれているように見えますが、もし気に入らない場合は評価を付けないことが多いようです。
|