chdb 3.7.1__cp38-abi3-musllinux_1_2_aarch64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of chdb might be problematic. Click here for more details.

@@ -0,0 +1,566 @@
1
+ Metadata-Version: 2.1
2
+ Name: chdb
3
+ Version: 3.7.1
4
+ Summary: chDB is an in-process OLAP SQL Engine powered by ClickHouse
5
+ Home-page: https://github.com/chdb-io/chdb
6
+ Author: auxten
7
+ Author-email: chDB Team <auxten@clickhouse.com>
8
+ License: Apache-2.0
9
+ Project-URL: Homepage, https://clickhouse.com/chdb
10
+ Project-URL: Documentation, https://chdb.readthedocs.io/en/latest/index.html
11
+ Project-URL: Repository, https://github.com/chdb-io/chdb
12
+ Project-URL: Changelog, https://github.com/chdb-io/chdb/releases
13
+ Project-URL: Issues, https://github.com/chdb-io/chdb/issues
14
+ Keywords: chdb,clickhouse,olap,analytics,database,sql
15
+ Platform: Mac
16
+ Platform: Linux
17
+ Classifier: Development Status :: 5 - Production/Stable
18
+ Classifier: Environment :: Plugins
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: License :: OSI Approved :: Apache Software License
21
+ Classifier: Operating System :: MacOS :: MacOS X
22
+ Classifier: Operating System :: POSIX :: Linux
23
+ Classifier: Programming Language :: Python :: 3
24
+ Classifier: Programming Language :: Python :: 3.8
25
+ Classifier: Programming Language :: Python :: 3.9
26
+ Classifier: Programming Language :: Python :: 3.10
27
+ Classifier: Programming Language :: Python :: 3.11
28
+ Classifier: Programming Language :: Python :: 3.12
29
+ Classifier: Programming Language :: Python :: 3.13
30
+ Classifier: Programming Language :: Python :: 3.14
31
+ Classifier: Programming Language :: C++
32
+ Classifier: Topic :: Software Development :: Libraries
33
+ Classifier: Topic :: Database
34
+ Classifier: Topic :: Scientific/Engineering
35
+ Requires-Python: >=3.8
36
+ Description-Content-Type: text/markdown
37
+ License-File: LICENSE.txt
38
+ Provides-Extra: ci
39
+ Requires-Dist: cibuildwheel; extra == "ci"
40
+ Provides-Extra: dataframe
41
+ Requires-Dist: pandas>=2.0.0; extra == "dataframe"
42
+ Requires-Dist: pyarrow>=13.0.0; extra == "dataframe"
43
+ Provides-Extra: dev
44
+ Requires-Dist: pytest; extra == "dev"
45
+ Requires-Dist: pytest-cov; extra == "dev"
46
+ Provides-Extra: publish
47
+ Requires-Dist: twine; extra == "publish"
48
+ Requires-Dist: wheel; extra == "publish"
49
+
50
+ <div align="center">
51
+ <a href="https://clickhouse.com/blog/chdb-joins-clickhouse-family">📢 chDB joins the ClickHouse family 🐍+🚀</a>
52
+ </div>
53
+ <div align="center">
54
+ <picture>
55
+ <source media="(prefers-color-scheme: dark)" srcset="https://github.com/chdb-io/chdb/raw/main/docs/_static/snake-chdb-dark.png" height="130">
56
+ <img src="https://github.com/chdb-io/chdb/raw/main/docs/_static/snake-chdb.png" height="130">
57
+ </picture>
58
+
59
+ [![Build X86](https://github.com/chdb-io/chdb/actions/workflows/build_linux_x86_wheels.yml/badge.svg?event=release)](https://github.com/chdb-io/chdb/actions/workflows/build_linux_x86_wheels.yml)
60
+ [![PyPI](https://img.shields.io/pypi/v/chdb.svg)](https://pypi.org/project/chdb/)
61
+ [![Downloads](https://static.pepy.tech/badge/chdb)](https://pepy.tech/project/chdb)
62
+ [![Discord](https://img.shields.io/discord/1098133460310294528?logo=Discord)](https://discord.gg/D2Daa2fM5K)
63
+ [![Twitter](https://img.shields.io/twitter/url/http/shields.io.svg?style=social&label=Twitter)](https://twitter.com/chdb_io)
64
+ </div>
65
+
66
+ # chDB
67
+
68
+
69
+ > chDB is an in-process SQL OLAP Engine powered by ClickHouse [^1]
70
+ > For more details: [The birth of chDB](https://auxten.com/the-birth-of-chdb/)
71
+
72
+
73
+ ## Features
74
+
75
+ * In-process SQL OLAP Engine, powered by ClickHouse
76
+ * No need to install ClickHouse
77
+ * Minimized data copy from C++ to Python with [python memoryview](https://docs.python.org/3/c-api/memoryview.html)
78
+ * Input&Output support Parquet, CSV, JSON, Arrow, ORC and 60+[more](https://clickhouse.com/docs/en/interfaces/formats) formats, [samples](tests/format_output.py)
79
+ * Support Python DB API 2.0, [example](examples/dbapi.py)
80
+
81
+
82
+
83
+ ## Arch
84
+ <div align="center">
85
+ <img src="https://github.com/chdb-io/chdb/raw/main/docs/_static/arch-chdb3.png" width="450">
86
+ </div>
87
+
88
+ ## Get Started
89
+ Get started with **chdb** using our [Installation and Usage Examples](https://clickhouse.com/docs/en/chdb)
90
+
91
+ <br>
92
+
93
+ ## Installation
94
+ Currently, chDB supports Python 3.8+ on macOS and Linux (x86_64 and ARM64).
95
+ ```bash
96
+ pip install chdb
97
+ ```
98
+
99
+ ## Usage
100
+
101
+ ### Run in command line
102
+ > `python3 -m chdb SQL [OutputFormat]`
103
+ ```bash
104
+ python3 -m chdb "SELECT 1,'abc'" Pretty
105
+ ```
106
+
107
+ <br>
108
+
109
+ ### Data Input
110
+ The following methods are available to access on-disk and in-memory data formats:
111
+
112
+ <details>
113
+ <summary><h4>🗂️ Connection based API (recommended)</h4></summary>
114
+
115
+ ```python
116
+ import chdb
117
+
118
+ # Create a connection (in-memory by default)
119
+ conn = chdb.connect(":memory:")
120
+ # Or use file-based: conn = chdb.connect("test.db")
121
+
122
+ # Create a cursor
123
+ cur = conn.cursor()
124
+
125
+ # Execute queries
126
+ cur.execute("SELECT number, toString(number) as str FROM system.numbers LIMIT 3")
127
+
128
+ # Fetch data in different ways
129
+ print(cur.fetchone()) # Single row: (0, '0')
130
+ print(cur.fetchmany(2)) # Multiple rows: ((1, '1'), (2, '2'))
131
+
132
+ # Get column information
133
+ print(cur.column_names()) # ['number', 'str']
134
+ print(cur.column_types()) # ['UInt64', 'String']
135
+
136
+ # Use the cursor as an iterator
137
+ cur.execute("SELECT number FROM system.numbers LIMIT 3")
138
+ for row in cur:
139
+ print(row)
140
+
141
+ # Always close resources when done
142
+ cur.close()
143
+ conn.close()
144
+ ```
145
+
146
+ For more details, see [examples/connect.py](examples/connect.py).
147
+ </details>
148
+
149
+
150
+ <details>
151
+ <summary><h4>🗂️ Query On File</h4> (Parquet, CSV, JSON, Arrow, ORC and 60+)</summary>
152
+
153
+ You can execute SQL and return desired format data.
154
+
155
+ ```python
156
+ import chdb
157
+ res = chdb.query('select version()', 'Pretty'); print(res)
158
+ ```
159
+
160
+ ### Work with Parquet or CSV
161
+ ```python
162
+ # See more data type format in tests/format_output.py
163
+ res = chdb.query('select * from file("data.parquet", Parquet)', 'JSON'); print(res)
164
+ res = chdb.query('select * from file("data.csv", CSV)', 'CSV'); print(res)
165
+ print(f"SQL read {res.rows_read()} rows, {res.bytes_read()} bytes, storage read {res.storage_rows_read()} rows, {res.storage_bytes_read()} bytes, elapsed {res.elapsed()} seconds")
166
+ ```
167
+
168
+ ### Pandas dataframe output
169
+ ```python
170
+ # See more in https://clickhouse.com/docs/en/interfaces/formats
171
+ chdb.query('select * from file("data.parquet", Parquet)', 'Dataframe')
172
+ ```
173
+ </details>
174
+
175
+ <details>
176
+ <summary><h4>🗂️ Query On Table</h4> (Pandas DataFrame, Parquet file/bytes, Arrow bytes) </summary>
177
+
178
+ ### Query On Pandas DataFrame
179
+ ```python
180
+ import chdb.dataframe as cdf
181
+ import pandas as pd
182
+ # Join 2 DataFrames
183
+ df1 = pd.DataFrame({'a': [1, 2, 3], 'b': ["one", "two", "three"]})
184
+ df2 = pd.DataFrame({'c': [1, 2, 3], 'd': ["①", "②", "③"]})
185
+ ret_tbl = cdf.query(sql="select * from __tbl1__ t1 join __tbl2__ t2 on t1.a = t2.c",
186
+ tbl1=df1, tbl2=df2)
187
+ print(ret_tbl)
188
+ # Query on the DataFrame Table
189
+ print(ret_tbl.query('select b, sum(a) from __table__ group by b'))
190
+ # Pandas DataFrames are automatically registered as temporary tables in ClickHouse
191
+ chdb.query("SELECT * FROM Python(df1) t1 JOIN Python(df2) t2 ON t1.a = t2.c").show()
192
+ ```
193
+ </details>
194
+
195
+ <details>
196
+ <summary><h4>🗂️ Query with Stateful Session</h4></summary>
197
+
198
+ ```python
199
+ from chdb import session as chs
200
+
201
+ ## Create DB, Table, View in temp session, auto cleanup when session is deleted.
202
+ sess = chs.Session()
203
+ sess.query("CREATE DATABASE IF NOT EXISTS db_xxx ENGINE = Atomic")
204
+ sess.query("CREATE TABLE IF NOT EXISTS db_xxx.log_table_xxx (x String, y Int) ENGINE = Log;")
205
+ sess.query("INSERT INTO db_xxx.log_table_xxx VALUES ('a', 1), ('b', 3), ('c', 2), ('d', 5);")
206
+ sess.query(
207
+ "CREATE VIEW db_xxx.view_xxx AS SELECT * FROM db_xxx.log_table_xxx LIMIT 4;"
208
+ )
209
+ print("Select from view:\n")
210
+ print(sess.query("SELECT * FROM db_xxx.view_xxx", "Pretty"))
211
+ ```
212
+
213
+ see also: [test_stateful.py](tests/test_stateful.py).
214
+ </details>
215
+
216
+ <details>
217
+ <summary><h4>🗂️ Query with Python DB-API 2.0</h4></summary>
218
+
219
+ ```python
220
+ import chdb.dbapi as dbapi
221
+ print("chdb driver version: {0}".format(dbapi.get_client_info()))
222
+
223
+ conn1 = dbapi.connect()
224
+ cur1 = conn1.cursor()
225
+ cur1.execute('select version()')
226
+ print("description: ", cur1.description)
227
+ print("data: ", cur1.fetchone())
228
+ cur1.close()
229
+ conn1.close()
230
+ ```
231
+ </details>
232
+
233
+
234
+ <details>
235
+ <summary><h4>🗂️ Query with UDF (User Defined Functions)</h4></summary>
236
+
237
+ ```python
238
+ from chdb.udf import chdb_udf
239
+ from chdb import query
240
+
241
+ @chdb_udf()
242
+ def sum_udf(lhs, rhs):
243
+ return int(lhs) + int(rhs)
244
+
245
+ print(query("select sum_udf(12,22)"))
246
+ ```
247
+
248
+ Some notes on chDB Python UDF(User Defined Function) decorator.
249
+ 1. The function should be stateless. So, only UDFs are supported, not UDAFs(User Defined Aggregation Function).
250
+ 2. Default return type is String. If you want to change the return type, you can pass in the return type as an argument.
251
+ The return type should be one of the following: https://clickhouse.com/docs/en/sql-reference/data-types
252
+ 3. The function should take in arguments of type String. As the input is TabSeparated, all arguments are strings.
253
+ 4. The function will be called for each line of input. Something like this:
254
+ ```
255
+ def sum_udf(lhs, rhs):
256
+ return int(lhs) + int(rhs)
257
+
258
+ for line in sys.stdin:
259
+ args = line.strip().split('\t')
260
+ lhs = args[0]
261
+ rhs = args[1]
262
+ print(sum_udf(lhs, rhs))
263
+ sys.stdout.flush()
264
+ ```
265
+ 5. The function should be pure python function. You SHOULD import all python modules used IN THE FUNCTION.
266
+ ```
267
+ def func_use_json(arg):
268
+ import json
269
+ ...
270
+ ```
271
+ 6. Python interpertor used is the same as the one used to run the script. Get from `sys.executable`
272
+
273
+ see also: [test_udf.py](tests/test_udf.py).
274
+ </details>
275
+
276
+
277
+ <details>
278
+ <summary><h4>🗂️ Streaming Query</h4></summary>
279
+
280
+ Process large datasets with constant memory usage through chunked streaming.
281
+
282
+ ```python
283
+ from chdb import session as chs
284
+
285
+ sess = chs.Session()
286
+
287
+ # Example 1: Basic example of using streaming query
288
+ rows_cnt = 0
289
+ with sess.send_query("SELECT * FROM numbers(200000)", "CSV") as stream_result:
290
+ for chunk in stream_result:
291
+ rows_cnt += chunk.rows_read()
292
+
293
+ print(rows_cnt) # 200000
294
+
295
+ # Example 2: Manual iteration with fetch()
296
+ rows_cnt = 0
297
+ stream_result = sess.send_query("SELECT * FROM numbers(200000)", "CSV")
298
+ while True:
299
+ chunk = stream_result.fetch()
300
+ if chunk is None:
301
+ break
302
+ rows_cnt += chunk.rows_read()
303
+
304
+ print(rows_cnt) # 200000
305
+
306
+ # Example 3: Early cancellation demo
307
+ rows_cnt = 0
308
+ stream_result = sess.send_query("SELECT * FROM numbers(200000)", "CSV")
309
+ while True:
310
+ chunk = stream_result.fetch()
311
+ if chunk is None:
312
+ break
313
+ if rows_cnt > 0:
314
+ stream_result.close()
315
+ break
316
+ rows_cnt += chunk.rows_read()
317
+
318
+ print(rows_cnt) # 65409
319
+
320
+ # Example 4: Using PyArrow RecordBatchReader for batch export and integration with other libraries
321
+ import pyarrow as pa
322
+ from deltalake import write_deltalake
323
+
324
+ # Get streaming result in arrow format
325
+ stream_result = sess.send_query("SELECT * FROM numbers(100000)", "Arrow")
326
+
327
+ # Create RecordBatchReader with custom batch size (default rows_per_batch=1000000)
328
+ batch_reader = stream_result.record_batch(rows_per_batch=10000)
329
+
330
+ # Use RecordBatchReader with external libraries like Delta Lake
331
+ write_deltalake(
332
+ table_or_uri="./my_delta_table",
333
+ data=batch_reader,
334
+ mode="overwrite"
335
+ )
336
+
337
+ stream_result.close()
338
+
339
+ sess.close()
340
+ ```
341
+
342
+ **Important Note**: When using streaming queries, if the `StreamingResult` is not fully consumed (due to errors or early termination), you must explicitly call `stream_result.close()` to release resources, or use the `with` statement for automatic cleanup. Failure to do so may block subsequent queries.
343
+
344
+ For more details, see [test_streaming_query.py](tests/test_streaming_query.py) and [test_arrow_record_reader_deltalake.py](tests/test_arrow_record_reader_deltalake.py).
345
+ </details>
346
+
347
+
348
+ <details>
349
+ <summary><h4>🗂️ Python Table Engine</h4></summary>
350
+
351
+ ### Query on Pandas DataFrame
352
+
353
+ ```python
354
+ import chdb
355
+ import pandas as pd
356
+ df = pd.DataFrame(
357
+ {
358
+ "a": [1, 2, 3, 4, 5, 6],
359
+ "b": ["tom", "jerry", "auxten", "tom", "jerry", "auxten"],
360
+ "dict_col": [
361
+ {'id': 1, 'tags': ['urgent', 'important'], 'metadata': {'created': '2024-01-01'}},
362
+ {'id': 2, 'tags': ['normal'], 'metadata': {'created': '2024-02-01'}},
363
+ {'id': 3, 'name': 'tom'},
364
+ {'id': 4, 'value': '100'},
365
+ {'id': 5, 'value': 101},
366
+ {'id': 6, 'value': 102},
367
+ ],
368
+ }
369
+ )
370
+
371
+ chdb.query("SELECT b, sum(a) FROM Python(df) GROUP BY b ORDER BY b").show()
372
+ chdb.query("SELECT dict_col.id FROM Python(df) WHERE dict_col.value='100'").show()
373
+ ```
374
+
375
+ ### Query on Arrow Table
376
+
377
+ ```python
378
+ import chdb
379
+ import pyarrow as pa
380
+ arrow_table = pa.table(
381
+ {
382
+ "a": [1, 2, 3, 4, 5, 6],
383
+ "b": ["tom", "jerry", "auxten", "tom", "jerry", "auxten"],
384
+ "dict_col": [
385
+ {'id': 1, 'value': 'tom'},
386
+ {'id': 2, 'value': 'jerry'},
387
+ {'id': 3, 'value': 'auxten'},
388
+ {'id': 4, 'value': 'tom'},
389
+ {'id': 5, 'value': 'jerry'},
390
+ {'id': 6, 'value': 'auxten'},
391
+ ],
392
+ }
393
+ )
394
+
395
+ chdb.query("SELECT b, sum(a) FROM Python(arrow_table) GROUP BY b ORDER BY b").show()
396
+ chdb.query("SELECT dict_col.id FROM Python(arrow_table) WHERE dict_col.value='tom'").show()
397
+ ```
398
+
399
+ ### Query on chdb.PyReader class instance
400
+
401
+ 1. You must inherit from chdb.PyReader class and implement the `read` method.
402
+ 2. The `read` method should:
403
+ 1. return a list of lists, the first demension is the column, the second dimension is the row, the columns order should be the same as the first arg `col_names` of `read`.
404
+ 1. return an empty list when there is no more data to read.
405
+ 1. be stateful, the cursor should be updated in the `read` method.
406
+ 3. An optional `get_schema` method can be implemented to return the schema of the table. The prototype is `def get_schema(self) -> List[Tuple[str, str]]:`, the return value is a list of tuples, each tuple contains the column name and the column type. The column type should be one of the following: https://clickhouse.com/docs/en/sql-reference/data-types
407
+
408
+ ```python
409
+ import chdb
410
+
411
+ class myReader(chdb.PyReader):
412
+ def __init__(self, data):
413
+ self.data = data
414
+ self.cursor = 0
415
+ super().__init__(data)
416
+
417
+ def read(self, col_names, count):
418
+ print("Python func read", col_names, count, self.cursor)
419
+ if self.cursor >= len(self.data["a"]):
420
+ self.cursor = 0
421
+ return []
422
+ block = [self.data[col] for col in col_names]
423
+ self.cursor += len(block[0])
424
+ return block
425
+
426
+ def get_schema(self):
427
+ return [
428
+ ("a", "int"),
429
+ ("b", "str"),
430
+ ("dict_col", "json")
431
+ ]
432
+
433
+ reader = myReader(
434
+ {
435
+ "a": [1, 2, 3, 4, 5, 6],
436
+ "b": ["tom", "jerry", "auxten", "tom", "jerry", "auxten"],
437
+ "dict_col": [
438
+ {'id': 1, 'tags': ['urgent', 'important'], 'metadata': {'created': '2024-01-01'}},
439
+ {'id': 2, 'tags': ['normal'], 'metadata': {'created': '2024-02-01'}},
440
+ {'id': 3, 'name': 'tom'},
441
+ {'id': 4, 'value': '100'},
442
+ {'id': 5, 'value': 101},
443
+ {'id': 6, 'value': 102}
444
+ ],
445
+ }
446
+ )
447
+
448
+ chdb.query("SELECT b, sum(a) FROM Python(reader) GROUP BY b ORDER BY b").show()
449
+ chdb.query("SELECT dict_col.id FROM Python(reader) WHERE dict_col.value='100'").show()
450
+ ```
451
+
452
+ see also: [test_query_py.py](tests/test_query_py.py) and [test_query_json.py](tests/test_query_json.py).
453
+
454
+ ### JSON Type Inference
455
+
456
+ chDB automatically converts Python dictionary objects to ClickHouse JSON types from these sources:
457
+
458
+ 1. **Pandas DataFrame**
459
+ - Columns with `object` dtype are sampled (default 10,000 rows) to detect JSON structures.
460
+ - Control sampling via SQL settings:
461
+ ```sql
462
+ SET pandas_analyze_sample = 10000 -- Default sampling
463
+ SET pandas_analyze_sample = 0 -- Force String type
464
+ SET pandas_analyze_sample = -1 -- Force JSON type
465
+ ```
466
+ - Columns are converted to `String` if sampling finds non-dictionary values.
467
+
468
+ 2. **chdb.PyReader**
469
+ - Implement custom schema mapping in `get_schema()`:
470
+ ```python
471
+ def get_schema(self):
472
+ return [
473
+ ("c1", "JSON"), # Explicit JSON mapping
474
+ ("c2", "String")
475
+ ]
476
+ ```
477
+ - Column types declared as "JSON" will bypass auto-detection.
478
+
479
+ When converting Python dictionary objects to JSON columns:
480
+
481
+ 1. **Nested Structures**
482
+ - Recursively process nested dictionaries, lists, tuples and NumPy arrays.
483
+
484
+ 2. **Primitive Types**
485
+ - Automatic type recognition for basic types such as integers, floats, strings, and booleans, and more.
486
+
487
+ 3. **Complex Objects**
488
+ - Non-primitive types will be converted to strings.
489
+
490
+ ### Limitations
491
+
492
+ 1. Column types supported: pandas.Series, pyarrow.array, chdb.PyReader
493
+ 1. Data types supported: Int, UInt, Float, String, Date, DateTime, Decimal
494
+ 1. Python Object type will be converted to String
495
+ 1. Pandas DataFrame performance is all of the best, Arrow Table is better than PyReader
496
+
497
+
498
+ </details>
499
+
500
+ For more examples, see [examples](examples) and [tests](tests).
501
+
502
+ <br>
503
+
504
+ ## Demos and Examples
505
+
506
+ - [Project Documentation](https://clickhouse.com/docs/en/chdb) and [Usage Examples](https://clickhouse.com/docs/en/chdb/install/python)
507
+ - [Colab Notebooks](https://colab.research.google.com/drive/1-zKB6oKfXeptggXi0kUX87iR8ZTSr4P3?usp=sharing) and other [Script Examples](examples)
508
+
509
+ ## Benchmark
510
+
511
+ - [ClickBench of embedded engines](https://benchmark.clickhouse.com/#eyJzeXN0ZW0iOnsiQXRoZW5hIChwYXJ0aXRpb25lZCkiOnRydWUsIkF0aGVuYSAoc2luZ2xlKSI6dHJ1ZSwiQXVyb3JhIGZvciBNeVNRTCI6dHJ1ZSwiQXVyb3JhIGZvciBQb3N0Z3JlU1FMIjp0cnVlLCJCeXRlSG91c2UiOnRydWUsImNoREIiOnRydWUsIkNpdHVzIjp0cnVlLCJjbGlja2hvdXNlLWxvY2FsIChwYXJ0aXRpb25lZCkiOnRydWUsImNsaWNraG91c2UtbG9jYWwgKHNpbmdsZSkiOnRydWUsIkNsaWNrSG91c2UiOnRydWUsIkNsaWNrSG91c2UgKHR1bmVkKSI6dHJ1ZSwiQ2xpY2tIb3VzZSAoenN0ZCkiOnRydWUsIkNsaWNrSG91c2UgQ2xvdWQiOnRydWUsIkNsaWNrSG91c2UgKHdlYikiOnRydWUsIkNyYXRlREIiOnRydWUsIkRhdGFiZW5kIjp0cnVlLCJEYXRhRnVzaW9uIChzaW5nbGUpIjp0cnVlLCJBcGFjaGUgRG9yaXMiOnRydWUsIkRydWlkIjp0cnVlLCJEdWNrREIgKFBhcnF1ZXQpIjp0cnVlLCJEdWNrREIiOnRydWUsIkVsYXN0aWNzZWFyY2giOnRydWUsIkVsYXN0aWNzZWFyY2ggKHR1bmVkKSI6ZmFsc2UsIkdyZWVucGx1bSI6dHJ1ZSwiSGVhdnlBSSI6dHJ1ZSwiSHlkcmEiOnRydWUsIkluZm9icmlnaHQiOnRydWUsIktpbmV0aWNhIjp0cnVlLCJNYXJpYURCIENvbHVtblN0b3JlIjp0cnVlLCJNYXJpYURCIjpmYWxzZSwiTW9uZXREQiI6dHJ1ZSwiTW9uZ29EQiI6dHJ1ZSwiTXlTUUwgKE15SVNBTSkiOnRydWUsIk15U1FMIjp0cnVlLCJQaW5vdCI6dHJ1ZSwiUG9zdGdyZVNRTCI6dHJ1ZSwiUG9zdGdyZVNRTCAodHVuZWQpIjpmYWxzZSwiUXVlc3REQiAocGFydGl0aW9uZWQpIjp0cnVlLCJRdWVzdERCIjp0cnVlLCJSZWRzaGlmdCI6dHJ1ZSwiU2VsZWN0REIiOnRydWUsIlNpbmdsZVN0b3JlIjp0cnVlLCJTbm93Zmxha2UiOnRydWUsIlNRTGl0ZSI6dHJ1ZSwiU3RhclJvY2tzIjp0cnVlLCJUaW1lc2NhbGVEQiAoY29tcHJlc3Npb24pIjp0cnVlLCJUaW1lc2NhbGVEQiI6dHJ1ZX0sInR5cGUiOnsic3RhdGVsZXNzIjpmYWxzZSwibWFuYWdlZCI6ZmFsc2UsIkphdmEiOmZhbHNlLCJjb2x1bW4tb3JpZW50ZWQiOmZhbHNlLCJDKysiOmZhbHNlLCJNeVNRTCBjb21wYXRpYmxlIjpmYWxzZSwicm93LW9yaWVudGVkIjpmYWxzZSwiQyI6ZmFsc2UsIlBvc3RncmVTUUwgY29tcGF0aWJsZSI6ZmFsc2UsIkNsaWNrSG91c2UgZGVyaXZhdGl2ZSI6ZmFsc2UsImVtYmVkZGVkIjp0cnVlLCJzZXJ2ZXJsZXNzIjpmYWxzZSwiUnVzdCI6ZmFsc2UsInNlYXJjaCI6ZmFsc2UsImRvY3VtZW50IjpmYWxzZSwidGltZS1zZXJpZXMiOmZhbHNlfSwibWFjaGluZSI6eyJzZXJ2ZXJsZXNzIjp0cnVlLCIxNmFjdSI6dHJ1ZSwiTCI6dHJ1ZSwiTSI6dHJ1ZSwiUyI6dHJ1ZSwiWFMiOnRydWUsImM2YS5tZXRhbCwgNTAwZ2IgZ3AyIjp0cnVlLCJjNmEuNHhsYXJnZSwgNTAwZ2IgZ3AyIjp0cnVlLCJjNS40eGxhcmdlLCA1MDBnYiBncDIiOnRydWUsIjE2IHRocmVhZHMiOnRydWUsIjIwIHRocmVhZHMiOnRydWUsIjI0IHRocmVhZHMiOnRydWUsIjI4IHRocmVhZHMiOnRydWUsIjMwIHRocmVhZHMiOnRydWUsIjQ4IHRocmVhZHMiOnRydWUsIjYwIHRocmVhZHMiOnRydWUsIm01ZC4yNHhsYXJnZSI6dHJ1ZSwiYzVuLjR4bGFyZ2UsIDIwMGdiIGdwMiI6dHJ1ZSwiYzZhLjR4bGFyZ2UsIDE1MDBnYiBncDIiOnRydWUsImRjMi44eGxhcmdlIjp0cnVlLCJyYTMuMTZ4bGFyZ2UiOnRydWUsInJhMy40eGxhcmdlIjp0cnVlLCJyYTMueGxwbHVzIjp0cnVlLCJTMjQiOnRydWUsIlMyIjp0cnVlLCIyWEwiOnRydWUsIjNYTCI6dHJ1ZSwiNFhMIjp0cnVlLCJYTCI6dHJ1ZX0sImNsdXN0ZXJfc2l6ZSI6eyIxIjp0cnVlLCIyIjp0cnVlLCI0Ijp0cnVlLCI4Ijp0cnVlLCIxNiI6dHJ1ZSwiMzIiOnRydWUsIjY0Ijp0cnVlLCIxMjgiOnRydWUsInNlcnZlcmxlc3MiOnRydWUsInVuZGVmaW5lZCI6dHJ1ZX0sIm1ldHJpYyI6ImhvdCIsInF1ZXJpZXMiOlt0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlXX0=)
512
+
513
+ - [chDB vs Pandas](https://colab.research.google.com/drive/1FogLujJ_-ds7RGurDrUnK-U0IW8a8Qd0)
514
+
515
+ - [Benchmark on DataFrame: chDB Pandas DuckDB Polars](https://benchmark.clickhouse.com/#eyJzeXN0ZW0iOnsiQWxsb3lEQiI6dHJ1ZSwiQWxsb3lEQiAodHVuZWQpIjp0cnVlLCJBdGhlbmEgKHBhcnRpdGlvbmVkKSI6dHJ1ZSwiQXRoZW5hIChzaW5nbGUpIjp0cnVlLCJBdXJvcmEgZm9yIE15U1FMIjp0cnVlLCJBdXJvcmEgZm9yIFBvc3RncmVTUUwiOnRydWUsIkJ5Q29uaXR5Ijp0cnVlLCJCeXRlSG91c2UiOnRydWUsImNoREIgKERhdGFGcmFtZSkiOnRydWUsImNoREIgKFBhcnF1ZXQsIHBhcnRpdGlvbmVkKSI6dHJ1ZSwiY2hEQiI6dHJ1ZSwiQ2l0dXMiOnRydWUsIkNsaWNrSG91c2UgQ2xvdWQgKGF3cykiOnRydWUsIkNsaWNrSG91c2UgQ2xvdWQgKGF6dXJlKSI6dHJ1ZSwiQ2xpY2tIb3VzZSBDbG91ZCAoZ2NwKSI6dHJ1ZSwiQ2xpY2tIb3VzZSAoZGF0YSBsYWtlLCBwYXJ0aXRpb25lZCkiOnRydWUsIkNsaWNrSG91c2UgKGRhdGEgbGFrZSwgc2luZ2xlKSI6dHJ1ZSwiQ2xpY2tIb3VzZSAoUGFycXVldCwgcGFydGl0aW9uZWQpIjp0cnVlLCJDbGlja0hvdXNlIChQYXJxdWV0LCBzaW5nbGUpIjp0cnVlLCJDbGlja0hvdXNlICh3ZWIpIjp0cnVlLCJDbGlja0hvdXNlIjp0cnVlLCJDbGlja0hvdXNlICh0dW5lZCkiOnRydWUsIkNsaWNrSG91c2UgKHR1bmVkLCBtZW1vcnkpIjp0cnVlLCJDbG91ZGJlcnJ5Ijp0cnVlLCJDcmF0ZURCIjp0cnVlLCJDcnVuY2h5IEJyaWRnZSBmb3IgQW5hbHl0aWNzIChQYXJxdWV0KSI6dHJ1ZSwiRGF0YWJlbmQiOnRydWUsIkRhdGFGdXNpb24gKFBhcnF1ZXQsIHBhcnRpdGlvbmVkKSI6dHJ1ZSwiRGF0YUZ1c2lvbiAoUGFycXVldCwgc2luZ2xlKSI6dHJ1ZSwiQXBhY2hlIERvcmlzIjp0cnVlLCJEcnVpZCI6dHJ1ZSwiRHVja0RCIChEYXRhRnJhbWUpIjp0cnVlLCJEdWNrREIgKFBhcnF1ZXQsIHBhcnRpdGlvbmVkKSI6dHJ1ZSwiRHVja0RCIjp0cnVlLCJFbGFzdGljc2VhcmNoIjp0cnVlLCJFbGFzdGljc2VhcmNoICh0dW5lZCkiOmZhbHNlLCJHbGFyZURCIjp0cnVlLCJHcmVlbnBsdW0iOnRydWUsIkhlYXZ5QUkiOnRydWUsIkh5ZHJhIjp0cnVlLCJJbmZvYnJpZ2h0Ijp0cnVlLCJLaW5ldGljYSI6dHJ1ZSwiTWFyaWFEQiBDb2x1bW5TdG9yZSI6dHJ1ZSwiTWFyaWFEQiI6ZmFsc2UsIk1vbmV0REIiOnRydWUsIk1vbmdvREIiOnRydWUsIk1vdGhlcmR1Y2siOnRydWUsIk15U1FMIChNeUlTQU0pIjp0cnVlLCJNeVNRTCI6dHJ1ZSwiT3hsYSI6dHJ1ZSwiUGFuZGFzIChEYXRhRnJhbWUpIjp0cnVlLCJQYXJhZGVEQiAoUGFycXVldCwgcGFydGl0aW9uZWQpIjp0cnVlLCJQYXJhZGVEQiAoUGFycXVldCwgc2luZ2xlKSI6dHJ1ZSwiUGlub3QiOnRydWUsIlBvbGFycyAoRGF0YUZyYW1lKSI6dHJ1ZSwiUG9zdGdyZVNRTCAodHVuZWQpIjpmYWxzZSwiUG9zdGdyZVNRTCI6dHJ1ZSwiUXVlc3REQiAocGFydGl0aW9uZWQpIjp0cnVlLCJRdWVzdERCIjp0cnVlLCJSZWRzaGlmdCI6dHJ1ZSwiU2luZ2xlU3RvcmUiOnRydWUsIlNub3dmbGFrZSI6dHJ1ZSwiU1FMaXRlIjp0cnVlLCJTdGFyUm9ja3MiOnRydWUsIlRhYmxlc3BhY2UiOnRydWUsIlRlbWJvIE9MQVAgKGNvbHVtbmFyKSI6dHJ1ZSwiVGltZXNjYWxlREIgKGNvbXByZXNzaW9uKSI6dHJ1ZSwiVGltZXNjYWxlREIiOnRydWUsIlVtYnJhIjp0cnVlfSwidHlwZSI6eyJDIjpmYWxzZSwiY29sdW1uLW9yaWVudGVkIjpmYWxzZSwiUG9zdGdyZVNRTCBjb21wYXRpYmxlIjpmYWxzZSwibWFuYWdlZCI6ZmFsc2UsImdjcCI6ZmFsc2UsInN0YXRlbGVzcyI6ZmFsc2UsIkphdmEiOmZhbHNlLCJDKysiOmZhbHNlLCJNeVNRTCBjb21wYXRpYmxlIjpmYWxzZSwicm93LW9yaWVudGVkIjpmYWxzZSwiQ2xpY2tIb3VzZSBkZXJpdmF0aXZlIjpmYWxzZSwiZW1iZWRkZWQiOmZhbHNlLCJzZXJ2ZXJsZXNzIjpmYWxzZSwiZGF0YWZyYW1lIjp0cnVlLCJhd3MiOmZhbHNlLCJhenVyZSI6ZmFsc2UsImFuYWx5dGljYWwiOmZhbHNlLCJSdXN0IjpmYWxzZSwic2VhcmNoIjpmYWxzZSwiZG9jdW1lbnQiOmZhbHNlLCJzb21ld2hhdCBQb3N0Z3JlU1FMIGNvbXBhdGlibGUiOmZhbHNlLCJ0aW1lLXNlcmllcyI6ZmFsc2V9LCJtYWNoaW5lIjp7IjE2IHZDUFUgMTI4R0IiOnRydWUsIjggdkNQVSA2NEdCIjp0cnVlLCJzZXJ2ZXJsZXNzIjp0cnVlLCIxNmFjdSI6dHJ1ZSwiYzZhLjR4bGFyZ2UsIDUwMGdiIGdwMiI6dHJ1ZSwiTCI6dHJ1ZSwiTSI6dHJ1ZSwiUyI6dHJ1ZSwiWFMiOnRydWUsImM2YS5tZXRhbCwgNTAwZ2IgZ3AyIjp0cnVlLCIxOTJHQiI6dHJ1ZSwiMjRHQiI6dHJ1ZSwiMzYwR0IiOnRydWUsIjQ4R0IiOnRydWUsIjcyMEdCIjp0cnVlLCI5NkdCIjp0cnVlLCJkZXYiOnRydWUsIjcwOEdCIjp0cnVlLCJjNW4uNHhsYXJnZSwgNTAwZ2IgZ3AyIjp0cnVlLCJBbmFseXRpY3MtMjU2R0IgKDY0IHZDb3JlcywgMjU2IEdCKSI6dHJ1ZSwiYzUuNHhsYXJnZSwgNTAwZ2IgZ3AyIjp0cnVlLCJjNmEuNHhsYXJnZSwgMTUwMGdiIGdwMiI6dHJ1ZSwiY2xvdWQiOnRydWUsImRjMi44eGxhcmdlIjp0cnVlLCJyYTMuMTZ4bGFyZ2UiOnRydWUsInJhMy40eGxhcmdlIjp0cnVlLCJyYTMueGxwbHVzIjp0cnVlLCJTMiI6dHJ1ZSwiUzI0Ijp0cnVlLCIyWEwiOnRydWUsIjNYTCI6dHJ1ZSwiNFhMIjp0cnVlLCJYTCI6dHJ1ZSwiTDEgLSAxNkNQVSAzMkdCIjp0cnVlLCJjNmEuNHhsYXJnZSwgNTAwZ2IgZ3AzIjp0cnVlfSwiY2x1c3Rlcl9zaXplIjp7IjEiOnRydWUsIjIiOnRydWUsIjQiOnRydWUsIjgiOnRydWUsIjE2Ijp0cnVlLCIzMiI6dHJ1ZSwiNjQiOnRydWUsIjEyOCI6dHJ1ZSwic2VydmVybGVzcyI6dHJ1ZX0sIm1ldHJpYyI6ImhvdCIsInF1ZXJpZXMiOlt0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlLHRydWUsdHJ1ZSx0cnVlXX0=)
516
+
517
+
518
+ <div align="center">
519
+ <img src="https://github.com/chdb-io/chdb/raw/main/docs/_static/df_bench.png" width="800">
520
+ </div>
521
+
522
+
523
+ ## Documentation
524
+ - For chdb specific examples and documentation refer to [chDB docs](https://clickhouse.com/docs/en/chdb)
525
+ - For SQL syntax, please refer to [ClickHouse SQL Reference](https://clickhouse.com/docs/en/sql-reference/syntax)
526
+
527
+
528
+ ## Events
529
+
530
+ - Demo chDB at [ClickHouse v23.7 livehouse!](https://t.co/todc13Kn19) and [Slides](https://docs.google.com/presentation/d/1ikqjOlimRa7QAg588TAB_Fna-Tad2WMg7_4AgnbQbFA/edit?usp=sharing)
531
+
532
+ ## Contributing
533
+ Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.
534
+ There are something you can help:
535
+ - [ ] Help test and report bugs
536
+ - [ ] Help improve documentation
537
+ - [ ] Help improve code quality and performance
538
+
539
+ ### Bindings
540
+
541
+ We welcome bindings for other languages, please refer to [bindings](bindings.md) for more details.
542
+
543
+ ## Version Guide
544
+
545
+ Please refer to [VERSION-GUIDE.md](VERSION-GUIDE.md) for more details.
546
+
547
+ ## Paper
548
+
549
+ - [ClickHouse - Lightning Fast Analytics for Everyone](https://www.vldb.org/pvldb/vol17/p3731-schulze.pdf)
550
+
551
+ ## License
552
+ Apache 2.0, see [LICENSE](LICENSE.txt) for more information.
553
+
554
+ ## Acknowledgments
555
+ chDB is mainly based on [ClickHouse](https://github.com/ClickHouse/ClickHouse) [^1]
556
+ for trade mark and other reasons, I named it chDB.
557
+
558
+ ## Contact
559
+ - Discord: [https://discord.gg/D2Daa2fM5K](https://discord.gg/D2Daa2fM5K)
560
+ - Email: auxten@clickhouse.com
561
+ - Twitter: [@chdb](https://twitter.com/chdb_io)
562
+
563
+
564
+ <br>
565
+
566
+ [^1]: ClickHouse® is a trademark of ClickHouse Inc. All trademarks, service marks, and logos mentioned or depicted are the property of their respective owners. The use of any third-party trademarks, brand names, product names, and company names does not imply endorsement, affiliation, or association with the respective owners.
@@ -0,0 +1,35 @@
1
+ chdb/__init__.py,sha256=m1CKapbAQ-NdlkqEheGvnP08FHovvghGY4vym90q_uo,8120
2
+ chdb/__main__.py,sha256=vl-gorTYCT9Uh_h4jbQ8O-a5_pokCJPFbF_yplIgKYc,1336
3
+ chdb/_chdb.abi3.so,sha256=GXjgcaD8YybdGu0k3_epuQ7ztueip0m1Gry7MYtvapY,519191848
4
+ chdb/libpybind11nonlimitedapi_chdb_3.10.so,sha256=5sQZV5-obbPCXYT0JQnc1kXMMp3SrUpDodmUSrT0exM,3959712
5
+ chdb/libpybind11nonlimitedapi_chdb_3.11.so,sha256=R1yywlCXQUS63Bq9Q4PgFPcWaOIh43UXGKlurF-j5yY,3959768
6
+ chdb/libpybind11nonlimitedapi_chdb_3.12.so,sha256=vprLm4CCi66J5IFf7ovNBoPb5uA2mveHaPZOP8Ukk1M,3960672
7
+ chdb/libpybind11nonlimitedapi_chdb_3.13.so,sha256=hUpAj-qj3yI1OdgvIWel_IvRgG20obomnazY0R_phro,3960752
8
+ chdb/libpybind11nonlimitedapi_chdb_3.14.so,sha256=7ldDwlx2iSnIYitHqiCpHkxTWpZGxbs3pB5MlDgfo1s,3960760
9
+ chdb/libpybind11nonlimitedapi_chdb_3.8.so,sha256=xZdS-9e1XFEKn2LibZgGgXGfHFyXMuRfWmq6TDMX4Sg,3959392
10
+ chdb/libpybind11nonlimitedapi_chdb_3.9.so,sha256=FK0RZPGT6HcvjGAnTbHE29DzBDiiz8GZAyd5wPCZOyI,3960032
11
+ chdb/rwabc.py,sha256=tbiwCrXirfrfx46wCJxS64yvFe6pVWIPGdSuvrAL5Ys,2102
12
+ chdb/dataframe/__init__.py,sha256=5UJvqfo8V6nyvATEoyfqkmZZDsELuI1GzW7whityhMQ,833
13
+ chdb/dataframe/query.py,sha256=ZMAVavv5O4p6miYntCHLOiCUwEPsSMpeW8uq0UyhRPs,20490
14
+ chdb/dbapi/__init__.py,sha256=bLViIz4o4n6DUezmhK82k8DkQZPGZ29HN_CsSnBtYM4,4066
15
+ chdb/dbapi/connections.py,sha256=vDmbP1eal7cxzJofGOWUhVWYbHqmDHJ9yjFwCDkd9Zk,7766
16
+ chdb/dbapi/converters.py,sha256=wNNhqQ0M9ETbRjk0NsskN_dvOyA39aO_Jd5gbzzMOrg,16687
17
+ chdb/dbapi/cursors.py,sha256=vOIdPkUw6seBg-HKXPwd8gha-KUKn_zO7DD6HKVhnZA,18955
18
+ chdb/dbapi/err.py,sha256=Xd8rU4BoJIw-kA-Lq1z1Yemke9KZrK0fN5tRD44rXJM,10952
19
+ chdb/dbapi/times.py,sha256=85W_V8RdEGikDAJCry0-zTgptlvQqacCaWk9fcdo-0Q,6387
20
+ chdb/dbapi/constants/FIELD_TYPE.py,sha256=ytFzgAnGmb9hvdsBlnK68qdZv_a6jYFIXT6VSAb60z8,370
21
+ chdb/dbapi/constants/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
+ chdb/session/__init__.py,sha256=fCUROZ5L1-92o2lcASiWJpFu-80-kDoSrNfouLEmLg8,50
23
+ chdb/session/state.py,sha256=23dKfiSFDrbKOu4xD-kp8KdqK5BMEqit3U0DKfdHvco,11299
24
+ chdb/state/__init__.py,sha256=RVUIWDqDi7gte4Os7Mz1wPXFyFpdHT_p1klJC7QtluI,55
25
+ chdb/state/sqlitelike.py,sha256=0Medv2WJvYx-J7MPMOfbGXfTaSs1Vyv4NIZmYcLof2U,40242
26
+ chdb/udf/__init__.py,sha256=u6GnDupve5_0H7h6_cC4NJa4uz_Gk7-YyYXCFPHBrgY,345
27
+ chdb/udf/udf.py,sha256=ysqvWb2Pw3AEWWj80ag4gmjtAgA1ZuD3K9GvJZkqWFo,4408
28
+ chdb/utils/__init__.py,sha256=vqAdb3aXCRsT4EB1TTmjUS79p5TzuZBVAIzMHclDfwk,371
29
+ chdb/utils/trace.py,sha256=PoE_L7Rc2RuGfoOGKk55WB4HxS3ZWGqJRrSSOwQmYgQ,3392
30
+ chdb/utils/types.py,sha256=QY5Hp0uaRwbToCzgBw6BisEJcS6zEhGU3QpFUQ9bORs,7706
31
+ chdb-3.7.1.dist-info/LICENSE.txt,sha256=isYVtNCO5910aj6e9bJJ6kQceivkLqsMlFSNYwzGGKI,11366
32
+ chdb-3.7.1.dist-info/METADATA,sha256=8PT46mUI5B5O0RAjMwwGR7-deHTiZPue05O9cEZLkcQ,26257
33
+ chdb-3.7.1.dist-info/WHEEL,sha256=Y2WW4orVpi9xxD-hYjMrq78IUkfDzbUHb4bj-1JduVE,111
34
+ chdb-3.7.1.dist-info/top_level.txt,sha256=se0Jj0A2-ijfMW51hIjiuNyDJPqy5xJU1G8a_IEdllI,11
35
+ chdb-3.7.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (75.3.2)
3
+ Root-Is-Purelib: false
4
+ Tag: cp38-abi3-musllinux_1_2_aarch64
5
+
@@ -0,0 +1,2 @@
1
+ _chdb
2
+ chdb