Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

DataStore アクセサ

DataStore では、ドメイン固有の操作に対応する 7 つのアクセサ名前空間で、185 以上のメソッドを利用できます。

アクセサ メソッド 説明
.str 56 文字列操作
.dt 42+ DateTime 操作
.arr 37 Array 操作 (ClickHouse 固有)
.json 13 JSON のパース (ClickHouse 固有)
.url 15 URL のパース (ClickHouse 固有)
.ip 9 IP アドレス操作 (ClickHouse 固有)
.geo 14 Geo/距離の操作 (ClickHouse 固有)

String アクセサ (.str)

pandas の .str メソッド全 56 種類に加え、ClickHouse の文字列関数にも対応しています。

大文字・小文字の変換

Method ClickHouse Description
upper() upper() 大文字に変換
lower() lower() 小文字に変換
capitalize() initcap() 先頭文字を大文字化
title() initcap() タイトルケースに変換
swapcase() - 大文字・小文字を反転
casefold() lower() 大文字・小文字を折りたたむ
ds['name_upper'] = ds['name'].str.upper()
ds['name_title'] = ds['name'].str.title()

長さとサイズ

Method ClickHouse Description
len() length() 文字列の長さ (バイト数)
char_length() char_length() 文字数
ds['name_len'] = ds['name'].str.len()

部分文字列とスライス

メソッド ClickHouse 説明
slice(start, stop) substring() 部分文字列を抽出
slice_replace() - スライスを置換
left(n) left() 左端から n 文字
right(n) right() 右端から n 文字
get(i) - 指定した位置の文字
ds['first_3'] = ds['name'].str.slice(0, 3)
ds['last_4'] = ds['name'].str.right(4)

トリミング

メソッド ClickHouse 説明
strip() trim() 空白文字を削除
lstrip() trimLeft() 先頭の空白文字を削除
rstrip() trimRight() 末尾の空白文字を削除
ds['trimmed'] = ds['text'].str.strip()
Method ClickHouse 説明
contains(pat) position() 部分文字列を含む
startswith(pat) startsWith() プレフィックスで始まる
endswith(pat) endsWith() 接尾辞で終わる
find(sub) position() 位置を検索
rfind(sub) - 末尾側から検索
index(sub) position() 検索し、見つからなければエラー
rindex(sub) - 末尾側から検索し、見つからなければエラー
match(pat) match() 正規表現に一致
fullmatch(pat) - 文字列全体が正規表現に一致
count(pat) - 出現回数を数える
# 部分文字列を含むか確認
ds['has_john'] = ds['name'].str.contains('John')

# 正規表現マッチ
ds['valid_email'] = ds['email'].str.match(r'^[\w.-]+@[\w.-]+\.\w+$')

置換

メソッド ClickHouse 説明
replace(pat, repl) replace() 一致箇所を置換
replace(pat, repl, regex=True) replaceRegexpAll() 正規表現で置換
removeprefix(prefix) - プレフィックスを削除
removesuffix(suffix) - 接尾辞を削除
translate(table) - 文字を変換
ds['cleaned'] = ds['text'].str.replace('\n', ' ')
ds['digits_only'] = ds['phone'].str.replace(r'\D', '', regex=True)

分割

Method ClickHouse Description
split(sep) splitByString() Arrayに分割
rsplit(sep) - 右から分割
partition(sep) - 3つに分割
rpartition(sep) - 右から3つに分割
ds['parts'] = ds['path'].str.split('/')

パディング

Method ClickHouse Description
pad(width) leftPad() 左埋め
ljust(width) rightPad() 右寄せ
rjust(width) leftPad() 左寄せ
center(width) - 中央寄せ
zfill(width) leftPad(..., '0') ゼロ埋め
ds['padded_id'] = ds['id'].astype(str).str.zfill(6)

文字種のテスト

メソッド 説明
isalpha() すべて英字
isdigit() すべて数字
isalnum() 英数字
isspace() すべて空白文字
isupper() すべて大文字
islower() すべて小文字
istitle() タイトルケース
isnumeric() 数値文字
isdecimal() 10進数字文字
ds['is_numeric'] = ds['code'].str.isdigit()

その他

メソッド 説明
repeat(n) n 回繰り返す
reverse() 文字列を反転する
wrap(width) テキストを折り返す
encode(enc) エンコードする
decode(enc) デコードする
normalize(form) Unicode 正規化を行う
extract(pat) 正規表現のグループを抽出する
extractall(pat) 一致したものをすべて抽出する
cat(sep) すべてを連結する
get_dummies(sep) ダミー変数に変換する

DateTime アクセサ (.dt)

pandas の .dt メソッド (42 種類以上) に加え、ClickHouse の datetime 関数もすべて利用できます。

日付の部分

プロパティ ClickHouse 説明
year toYear()
month toMonth() 月 (1-12)
day toDayOfMonth() 日 (1-31)
hour toHour() 時 (0-23)
minute toMinute() 分 (0-59)
second toSecond() 秒 (0-59)
millisecond toMillisecond() ミリ秒
microsecond toMicrosecond() マイクロ秒
quarter toQuarter() 四半期 (1-4)
dayofweek toDayOfWeek() 曜日 (0=月)
dayofyear toDayOfYear() 年内通算日
week toWeek() 週番号
days_in_month - 月の日数
ds['year'] = ds['date'].dt.year
ds['month'] = ds['date'].dt.month
ds['day_of_week'] = ds['date'].dt.dayofweek

切り捨て

Method ClickHouse 説明
to_start_of_day() toStartOfDay() 日の始まり
to_start_of_week() toStartOfWeek() 週の始まり
to_start_of_month() toStartOfMonth() 月の始まり
to_start_of_quarter() toStartOfQuarter() 四半期の始まり
to_start_of_year() toStartOfYear() 年の始まり
to_start_of_hour() toStartOfHour() 時間の始まり
to_start_of_minute() toStartOfMinute() 分の始まり
ds['month_start'] = ds['date'].dt.to_start_of_month()

算術演算

Method ClickHouse Description
add_years(n) addYears() 年を加算
add_months(n) addMonths() 月を加算
add_weeks(n) addWeeks() 週を加算
add_days(n) addDays() 日を加算
add_hours(n) addHours() 時間を加算
add_minutes(n) addMinutes() 分を加算
add_seconds(n) addSeconds() 秒を加算
subtract_years(n) subtractYears() 年を減算
subtract_months(n) subtractMonths() 月を減算
subtract_days(n) subtractDays() 日を減算
ds['next_month'] = ds['date'].dt.add_months(1)
ds['last_week'] = ds['date'].dt.subtract_weeks(1)

真偽値判定

メソッド 説明
is_month_start() 月の初日
is_month_end() 月の末日
is_quarter_start() 四半期の初日
is_quarter_end() 四半期の末日
is_year_start() 年の初日
is_year_end() 年の末日
is_leap_year() うるう年
ds['is_eom'] = ds['date'].dt.is_month_end()

フォーマット

メソッド ClickHouse 説明
strftime(fmt) formatDateTime() 文字列形式でフォーマット
day_name() - 曜日名
month_name() - 月名
ds['date_str'] = ds['date'].dt.strftime('%Y-%m-%d')
ds['day_name'] = ds['date'].dt.day_name()

タイムゾーン

メソッド ClickHouse 説明
tz_convert(tz) toTimezone() タイムゾーンを変換
tz_localize(tz) - タイムゾーンを付与
ds['utc_time'] = ds['timestamp'].dt.tz_convert('UTC')

Array アクセサ (.arr)

ClickHouse 固有の配列操作 (37 個のメソッド) 。

プロパティ

プロパティ ClickHouse 説明
length length() Arrayの長さ
size length() lengthの別名
empty empty() 空であるか
not_empty notEmpty() 空でないか
ds['tag_count'] = ds['tags'].arr.length
ds['has_tags'] = ds['tags'].arr.not_empty

要素アクセス

Method ClickHouse Description
array_first() arrayElement(..., 1) 最初の要素
array_last() arrayElement(..., -1) 最後の要素
array_element(n) arrayElement() N番目の要素
array_slice(off, len) arraySlice() 配列のスライス
ds['first_tag'] = ds['tags'].arr.array_first()
ds['last_tag'] = ds['tags'].arr.array_last()

集計

メソッド ClickHouse 説明
array_sum() arraySum() 要素の合計
array_avg() arrayAvg() 平均
array_min() arrayMin() 最小値
array_max() arrayMax() 最大値
array_product() arrayProduct() 要素の積
array_uniq() arrayUniq() 一意な値の数
ds['total'] = ds['values'].arr.array_sum()
ds['average'] = ds['values'].arr.array_avg()

変換

Method ClickHouse 説明
array_sort() arraySort() 昇順でソート
array_reverse_sort() arrayReverseSort() 降順でソート
array_reverse() arrayReverse() 順序を逆にする
array_distinct() arrayDistinct() 要素を一意化
array_compact() arrayCompact() 連続する重複を削除
array_flatten() arrayFlatten() ネストを平坦化
ds['sorted_tags'] = ds['tags'].arr.array_sort()
ds['unique_tags'] = ds['tags'].arr.array_distinct()

変更

メソッド ClickHouse 説明
array_push_back(elem) arrayPushBack() 末尾に追加
array_push_front(elem) arrayPushFront() 先頭に追加
array_pop_back() arrayPopBack() 末尾を削除
array_pop_front() arrayPopFront() 先頭を削除
array_concat(other) arrayConcat() 連結
メソッド ClickHouse 説明
has(elem) has() 要素を含む
index_of(elem) indexOf() 位置を取得
count_equal(elem) countEqual() 出現回数を数える
ds['has_python'] = ds['skills'].arr.has('Python')

文字列操作

メソッド ClickHouse 説明
array_string_concat(sep) arrayStringConcat() 文字列として連結
ds['tags_str'] = ds['tags'].arr.array_string_concat(', ')

JSON アクセサ (.json)

ClickHouse 固有の JSON パース (13 個のメソッド) 。

Method ClickHouse Description
get_string(path) JSONExtractString() 文字列を抽出
get_int(path) JSONExtractInt() 整数を抽出
get_float(path) JSONExtractFloat() 浮動小数点数を抽出
get_bool(path) JSONExtractBool() 真偽値を抽出
get_raw(path) JSONExtractRaw() 生の JSON を抽出
get_keys() JSONExtractKeys() キーを取得
get_type(path) JSONType() 型を取得
get_length(path) JSONLength() 長さを取得
has_key(key) JSONHas() キーの存在を確認
is_valid() isValidJSON() JSON が有効か検証
to_json_string() toJSONString() JSON 文字列に変換
# JSONカラムをパースする
ds['user_name'] = ds['json_data'].json.get_string('user.name')
ds['user_age'] = ds['json_data'].json.get_int('user.age')
ds['is_active'] = ds['json_data'].json.get_bool('user.active')
ds['has_email'] = ds['json_data'].json.has_key('user.email')

URL アクセサ (.url)

ClickHouse 固有の URL パース用メソッド (15 個) 。

メソッド ClickHouse 説明
domain() domain() ドメインを抽出
domain_without_www() domainWithoutWWW() www を除いたドメイン
top_level_domain() topLevelDomain() TLD
protocol() protocol() プロトコル (http/https)
path() path() URL パス
path_full() pathFull() クエリ文字列を含むパス
query_string() queryString() クエリ文字列
fragment() fragment() フラグメント (#…)
port() port() ポート番号
extract_url_parameter(name) extractURLParameter() クエリパラメータを取得
extract_url_parameters() extractURLParameters() すべてのパラメータ
cut_url_parameter(name) cutURLParameter() パラメータを削除
decode_url_component() decodeURLComponent() URL デコード
encode_url_component() encodeURLComponent() URL エンコード
# URLを解析
ds['domain'] = ds['url'].url.domain()
ds['path'] = ds['url'].url.path()
ds['utm_source'] = ds['url'].url.extract_url_parameter('utm_source')

IP アクセサ (.ip)

ClickHouse固有の IP アドレス操作 (9 個のメソッド) 。

Method ClickHouse Description
to_ipv4() toIPv4() IPv4 に変換
to_ipv6() toIPv6() IPv6 に変換
ipv4_num_to_string() IPv4NumToString() 数値を文字列に変換
ipv4_string_to_num() IPv4StringToNum() 文字列を数値に変換
ipv6_num_to_string() IPv6NumToString() IPv6 の数値を文字列に変換
ipv4_to_ipv6() IPv4ToIPv6() IPv6 に変換
is_ipv4_string() isIPv4String() IPv4 形式か検証
is_ipv6_string() isIPv6String() IPv6 形式か検証
ipv4_cidr_to_range(cidr) IPv4CIDRToRange() CIDR を範囲に変換
# IP関連の操作
ds['is_valid_ip'] = ds['ip'].ip.is_ipv4_string()
ds['ip_num'] = ds['ip'].ip.ipv4_string_to_num()

Geo アクセサ (.geo)

ClickHouse固有のGeo/距離関連の操作 (14メソッド) 。

距離関数

メソッド ClickHouse 説明
great_circle_distance(...) greatCircleDistance() 大円距離
geo_distance(...) geoDistance() WGS-84での距離
l1_distance(v1, v2) L1Distance() マンハッタン距離
l2_distance(v1, v2) L2Distance() ユークリッド距離
l2_squared_distance(v1, v2) L2SquaredDistance() ユークリッド距離の二乗
linf_distance(v1, v2) LinfDistance() チェビシェフ距離
cosine_distance(v1, v2) cosineDistance() コサイン距離

ベクトル演算

メソッド ClickHouse 説明
dot_product(v1, v2) dotProduct() 内積
l2_norm(vec) L2Norm() ベクトルのノルム
l2_normalize(vec) L2Normalize() 正規化

H3 関数

メソッド ClickHouse 説明
geo_to_h3(lon, lat, res) geoToH3() Geo を H3 index に変換
h3_to_geo(h3) h3ToGeo() H3 を Geo 座標に変換

Point 演算

Method ClickHouse 説明
point_in_polygon(pt, poly) pointInPolygon() Polygon 内の点
point_in_ellipses(...) pointInEllipses() 楕円内の点
from chdb.datastore import F

# 距離を計算する
ds['distance'] = F.great_circle_distance(
    ds['lon1'], ds['lat1'],
    ds['lon2'], ds['lat2']
)

# ベクトル類似度
ds['similarity'] = F.cosine_distance(ds['embedding1'], ds['embedding2'])

アクセサの使用

遅延評価

ほとんどのアクセサメソッドは遅延評価されるため、後で評価される式を返します:

# これらはすべて遅延評価される
ds['name_upper'] = ds['name'].str.upper()  # まだ実行されない
ds['year'] = ds['date'].dt.year            # まだ実行されない
ds['domain'] = ds['url'].url.domain()      # まだ実行されない

# 結果にアクセスした時点で実行される
df = ds.to_df()  # ここですべてが実行される

直ちに実行されるメソッド

構造が変わるため、すぐに実行される .str メソッドがあります:

メソッド 戻り値 理由
partition(sep) DataStore (3 カラム) 複数のカラムを作成するため
rpartition(sep) DataStore (3 カラム) 複数のカラムを作成するため
get_dummies(sep) DataStore (N カラム) カラム数が動的に決まるため
extractall(pat) DataStore MultiIndex の結果になるため
cat(sep) str 集約 (N 行 → 1)

アクセサのチェーン

アクセサメソッドはチェーンできます。

ds['clean_name'] = (ds['name']
    .str.strip()
    .str.lower()
    .str.replace(' ', '_')
)

ds['next_month_start'] = (ds['date']
    .dt.add_months(1)
    .dt.to_start_of_month()
)
Navigation