clickhousepython應用與實踐

clickhousepython是一種Python客戶端庫,用於與ClickHouse交互。ClickHouse是一個面向列的面向分布式的數據庫管理系統,旨在處理千萬級別的數據,並可以快速分析和查詢。clickhousepython使得Python開發人員可以方便地通過Python語言訪問ClickHouse數據庫。

一、快速開始

要安裝clickhousepython庫,可以使用pip包管理器:

pip install clickhouse-driver

連接ClickHouse數據庫,需要使用clickhouse-driver庫:

from clickhouse_driver import Client

client = Client(host='localhost')

以上代碼中,我們創建了一個名為“client”的實例,該實例將在本地主機上連接到ClickHouse數據庫。

需要查詢表時,可以使用以下代碼:

query = 'SELECT * FROM mytable'
result = client.execute(query)

還可以使用以下代碼將query的結果轉換為Pandas DataFrame:

import pandas as pd

df = pd.DataFrame(result, columns=[i[0] for i in client.execute(query, with_column_types=True)])

使用clickhouse-python庫,即可以在線查詢,還可以離線上傳黑白名單庫用於黑白名單匹配。

二、ClickHouse數據類型支持

clickhouse-python庫支持clickhouse數據類型的複雜性,比如下面的JSON類型。

假設我們有一個名為“mytable”的表,其中包含一個JSON字段:

query = 'CREATE TABLE mytable (id UInt64, event_date Date, data String, json_data JSON) ENGINE = MergeTree() PRIMARY KEY id'
client.execute(query)

query = 'INSERT INTO mytable (id, event_date, data, json_data) VALUES (1, \'2022-01-01\', \'test\', \'{"name" : "John", "age" : 30, "city" : "New York"}\')'
client.execute(query)

要查詢JSON字段,請使用以下代碼:

query = 'SELECT jsonExtract(json_data, \'$.name\') as name from mytable'
result = client.execute(query)

print(result) # 輸出 '[(John,)]'

三、ClickHouse數據導入和導出

clickhouse-python庫提供了多種數據導入和導出方法,以下是一些示例。

從CSV文件中導入數據:

query='''CREATE TABLE test (a UInt32,b UInt32,c UInt32) ENGINE = Memory'''
client.execute(query)
with open('test.csv', 'r') as f:
    client.execute('INSERT INTO test (a,b,c) FORMAT CSV', data=f.read())

result = client.execute('SELECT * FROM test')
print(result)

將數據導出到CSV文件:

query = 'SELECT * FROM mytable FORMAT CSVWithNames'
with open('mytable.csv', 'w') as f:
    f.write(client.execute(query, with_column_names=True))

此外,還可以將數據導入到ClickHouse數據庫中的表中:

query = '''CREATE TABLE mytable_2 (id UInt64, event_date Date, data String, json_data JSON) ENGINE = MergeTree() PRIMARY KEY id'''
client.execute(query)

query = '''INSERT INTO mytable_2 (id, event_date, data, json_data) SELECT id, event_date, data, json_data FROM mytable'''
client.execute(query)

四、批量插入

在某些情況下,需要將大量數據批量插入ClickHouse數據庫。clickhouse-python庫提供了一種稱為批量插入的功能,可在少數幾次插入操作中將大量數據批量插入到數據庫中。

下面是一個示例:

from clickhouse_driver import Client
from clickhouse_driver import ColumnSettings

client = Client('localhost')

settings = {'a': ColumnSettings(types.UInt32), 'b': ColumnSettings(types.UInt32)}

data = [{'a': 1, 'b': 10}, {'a': 2, 'b': 20}, {'a': 3, 'b': 30}]

client.execute('CREATE TABLE mytable_3 (a UInt32, b UInt32) ENGINE = Memory')

client.execute('INSERT INTO mytable_3 (a, b) VALUES',
               [{'a': 1, 'b': 10}, {'a': 2, 'b': 20}, {'a': 3, 'b': 30}],
               types_check=True)

在以上示例中,我們創建了一個名為“mytable_3”的內存表,並將包含三個字典的列表傳遞給execute()方法。使用types_check=True參數,我們可以確保字典中的值的類型與表中的列的類型匹配。

五、處理數據

clickhouse-python庫提供了許多函數和方法,可以幫助處理和轉換數據。下面是一些示例。

* Array ClickHouse類型轉Python列表:

array = '[1,2,3]'

list = client.execute('SELECT arrayJoin(arraySplit(%s, \',\'))' % array)[0]
print(list) # 輸出 '[1, 2, 3]'

* 遍歷查詢結果:

query = 'SELECT * from mytable'

for row in client.execute_iter(query):
    print(row)

六、總結

clickhouse-python庫使得Python開發人員可以很方便地使用Python語言與ClickHouse數據庫進行交互。本文介紹了clickhouse-python庫的一些主要功能,包括快速開始、ClickHouse數據類型支持、ClickHouse數據導入和導出、批量插入和集成數據處理。clickhouse-python庫極大地簡化了Python開發人員與ClickHouse數據庫之間的交互,提供了許多方便的函數和方法來處理數據,使得大數據分析和查詢變得更加容易和靈活。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270843.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:38
下一篇 2024-12-16 13:38

發表回復

登錄後才能評論