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-tw/n/270843.html
微信掃一掃
支付寶掃一掃