ADBC هي واجهة برمجة تطبيقات مستقلة عن المورّد لنقل بيانات Arrow بين تطبيق وقاعدة بيانات. يُوزَّع برنامج تشغيل chDB ADBC عبر ADBC Driver Foundry، ويمكن تحميله باستخدام أي مدير لبرامج تشغيل ADBC.
تتجاوز النتائج الحدود على هيئة دفعات سجلات Arrow، من دون تحويل صفًا بصف. ويمكن للتطبيقات استخدام برنامج التشغيل نفسه من بايثون أو أي لغة أخرى تتوفر فيها إدارة برامج تشغيل ADBC.
التثبيت
ثبّت برنامج التشغيل من مستودع ADBC Driver Foundry باستخدام dbc:
dbc install chdbأول إصدار منشور من حزمة dbc لـ chDB هو 26.7.0. للتحقق من الإصدارات المتاحة، شغّل:
dbc search -v chdbيمكن تحميل برنامج التشغيل المثبّت باسم chdb من خلال مدير برامج تشغيل ADBC.
يتوفر الدعم لنظامَي Linux وmacOS على معماريتَي x86-64 وarm64.
الاتصال من بايثون
ثبّت مدير برامج تشغيل ADBC لبايثون:
pip install adbc-driver-manager pyarrowثم حمّل برنامج تشغيل chDB المثبّت عبر dbc بالاسم:
from adbc_driver_manager import dbapi
with dbapi.connect(
driver="chdb",
db_kwargs={"uri": "chdb://"},
autocommit=True,
) as conn:
with conn.cursor() as cur:
cur.execute("SELECT number FROM numbers(3)")
print(cur.fetch_arrow_table())uri |
قاعدة البيانات |
|---|---|
chdb:// |
في الذاكرة |
chdb:///absolute/path |
على القرص، وتُحفَظ في الدليل المحدد |
دورة حياة الاتصال
يشغّل chDB محركًا مضمنًا واحدًا في كل عملية ما دامت الاتصالات مفتوحة. ضع القواعد التالية في الاعتبار:
- يجب أن تشير جميع اتصالات ADBC المفتوحة في الوقت نفسه ضمن العملية نفسها إلى مسار التخزين نفسه.
- يدعم النظام اتصالات متعددة بهذا المسار، بما في ذلك الاتصالات المستخدمة بالتزامن من سلاسل تنفيذ مختلفة. للاستعلامات المتزامنة، خصص لكل عامل اتصالًا خاصًا به بدلًا من تنفيذ عمليات متزامنة على اتصال واحد.
- يؤدي إغلاق آخر اتصال إلى إيقاف المحرك المضمن. ويمكن لاتصال لاحق تشغيله مجددًا، بما في ذلك باستخدام مسار تخزين مختلف، لكن تكرار الإيقاف والتشغيل يستهلك الوقت والذاكرة. أبقِ اتصالًا واحدًا على الأقل مفتوحًا للأعمال المتكررة.
- لا يمكن إلا لعملية واحدة في نظام التشغيل فتح دليل معيّن على القرص في الوقت نفسه. خصص لكل عملية دليلًا خاصًا بها، أو استخدم قاعدة بيانات داخل الذاكرة.
استخدام ADBC مع حزمة chDB لبايثون
تثبّت حزمة dbc برنامج تشغيل ADBC أصليًا مستقلاً. وهو منفصل عن المكتبة الأصلية التي تحمّلها حزمة chdb لبايثون.
ضمن عملية بايثون واحدة، لا تتوقع أن تشترك وصلة ADBC التي حمّلها dbc ووصلة chdb العادية في الجداول الموجودة في الذاكرة أو حالة المحرك. بالنسبة إلى مسار قاعدة بيانات معيّن، استخدم إما برنامج تشغيل ADBC أو واجهة برمجة تطبيقات chdb لبايثون في الوقت نفسه؛ ولا تُبقِ كليهما مفتوحين على المسار نفسه على القرص. لنقل البيانات بين واجهتي برمجة التطبيقات، أغلق جميع الوصلات من أحد الجانبين قبل فتح الجانب الآخر، أو مرّر البيانات صراحةً عبر Arrow أو الملفات.
الوظائف المُنفَّذة
تشير ليس بعد إلى قدرة في برنامج تشغيل ADBC يمكن إضافتها لاحقًا. وتشير غير منطبق إلى ميزة لا تتوافق مع نموذج التنفيذ الحالي في chDB أو ClickHouse.
قاعدة البيانات
| الدالة | الحالة | ملاحظات |
|---|---|---|
AdbcDatabaseNew / Init / Release |
مدعومة | |
AdbcDatabaseSetOption |
مدعومة | خيارات المحرك uri وpath وchdb.* |
الاتصال
| الدالة | الحالة | ملاحظات |
|---|---|---|
AdbcConnectionNew / Init / Release |
مدعوم | |
AdbcConnectionGetInfo |
مدعوم | |
AdbcConnectionGetObjects |
مدعوم | جميع المستويات |
AdbcConnectionGetTableSchema |
مدعوم | |
AdbcConnectionGetTableTypes |
مدعوم | |
AdbcConnectionGetOption |
مدعوم | يتضمن قيمة db_schema الحالية |
AdbcConnectionSetOption |
جزئي | يجب أن يظل الالتزام التلقائي مفعّلًا؛ ولا يمكن تغيير db_schema |
AdbcConnectionCommit / Rollback |
غير منطبق | تُنفَّذ عبارات ClickHouse بالالتزام التلقائي؛ ولا توجد معاملة تقليدية لتأكيدها أو التراجع عنها |
AdbcConnectionGetStatistics |
ليس بعد | لا يتيح برنامج التشغيل إحصاءات الجداول |
AdbcConnectionReadPartition |
غير منطبق | لا يُنتج برنامج التشغيل أقسام نتائج موزعة |
AdbcConnectionCancel |
ليس بعد | لم يُتح بعد إلغاء استعلامات chDB عبر ADBC |
عبارة SQL
| الدالة | الحالة | ملاحظات |
|---|---|---|
AdbcStatementNew / Release |
مدعوم | |
AdbcStatementSetSqlQuery |
مدعوم | ClickHouse SQL |
AdbcStatementPrepare |
مدعوم | |
AdbcStatementBind / BindStream |
مدعوم | معلمات موضعية ? |
AdbcStatementGetParameterSchema |
مدعوم | |
AdbcStatementExecuteQuery |
مدعوم | يبث دفعات سجلات Arrow |
AdbcStatementSetOption |
مدعوم | استيعاب مجمّع للبيانات، انظر أدناه |
AdbcStatementExecuteSchema |
ليس بعد | مخطط النتيجة متاح حاليًا بعد التنفيذ |
AdbcStatementExecutePartitions |
غير منطبق | تُعاد النتائج كتدفق Arrow داخل العملية |
AdbcStatementSetSubstraitPlan |
غير منطبق | يقبل chDB ClickHouse SQL، وليس خطط Substrait |
AdbcStatementCancel |
ليس بعد | لم تُتح إمكانية إلغاء استعلامات chDB عبر ADBC بعد |
يدعم الاستيعاب المجمّع للبيانات أوضاع create وappend وcreate_append وreplace، في قاعدة البيانات الافتراضية أو قاعدة بيانات مُسمّاة.
ClickHouse SQL وسلوك الأنواع
يستخدم chDB ClickHouse SQL ونظام الأنواع الخاص به. تنطبق أيضًا دلالات ClickHouse التالية عند الوصول إلى chDB عبر ADBC:
- لا تقبل الأعمدة القيمة NULL ما لم يُصرَّح عنها باستخدام
Nullable(...). وتُخزَّن قيمة NULL محددة النوع والمربوطة بعمودStringعادي كسلسلة فارغة، وليس كـ NULL. - استخدم اقتباس المعرّفات في ClickHouse؛ وتستخدم الأمثلة علامات الاقتباس الخلفية.
- تقابل قواعد بيانات ClickHouse
db_schemaفي ADBC. ولا توجد طبقة catalog فوقها، لذا لا تنطبق العمليات ضمن نطاق catalog. - لا يقبل
Decimalمقاييس سالبة، ويغطيDate32الفترة من 1900-01-01 إلى 2299-12-31. - يُفسَّر
DateTime64الذي لا يتضمن منطقة زمنية وفق المنطقة الزمنية للمحرك. - لا يمثّل إخراج Arrow الحالي من ClickHouse النوع
Time، لذا لا يمكن قراءته مجددًا عبر ADBC.
تحافظ بعض أنواع Arrow على قيمها، لكنها تُقرأ مجددًا كنوع Arrow مختلف:
| نوع Arrow | يُخزَّن كـ | يُقرأ مجددًا كـ |
|---|---|---|
binary, large_binary, binary_view |
String |
string |
fixed_size_binary (إدخال مجمّع إلى جدول جديد) |
FixedString(n) |
fixed_size_binary |
large_string, string_view |
String |
string |
float16 |
Float32 |
float |
time32 / time64 / timestamp |
DateTime64(n) |
timestamp |
تُخزَّن البيانات الثنائية كـ String وتُقرأ مجددًا بصيغة UTF-8. لذلك، لا تُدعم الحمولات غير الصالحة بترميز UTF-8 كقيم binary يمكن استرجاعها دون فقدان بيانات.
أمثلة
الاستيعاب المجمّع من Arrow
import pyarrow as pa
from adbc_driver_manager import dbapi
table = pa.table({"id": [1, 2, 3], "name": ["a", "b", "c"]})
with dbapi.connect(
driver="chdb",
db_kwargs={"uri": "chdb://"},
autocommit=True,
) as conn:
with conn.cursor() as cur:
cur.adbc_ingest("events", table, mode="create")
cur.execute("SELECT count() FROM events")
print(cur.fetchone())المَعلمات
from adbc_driver_manager import dbapi
with dbapi.connect(
driver="chdb",
db_kwargs={"uri": "chdb://"},
autocommit=True,
) as conn:
with conn.cursor() as cur:
cur.execute("SELECT number FROM numbers(10) WHERE number > ?", (7,))
print(cur.fetch_arrow_table())C
بعد تنفيذ dbc install chdb، يستطيع مدير برامج التشغيل في C العثور على برنامج التشغيل بالاسم:
#include <arrow-adbc/adbc.h>
#include <arrow-adbc/adbc_driver_manager.h>
struct AdbcDatabase database = {0};
struct AdbcError error = {0};
AdbcDatabaseNew(&database, &error);
AdbcDatabaseSetOption(&database, "driver", "chdb", &error);
AdbcDatabaseSetOption(&database, "uri", "chdb://", &error);
AdbcDatabaseInit(&database, &error);كيفية التحقق من برنامج التشغيل
تشغّل إصدارات chDB ADBC مجموعتين خارجيتين لاختبار برنامج التشغيل الأصلي على Linux x86-64 وarm64، وعلى macOS x86-64 وarm64:
- مجموعة اختبار التوافق Apache Arrow ADBC، التي تتحقق من عقد C
- مجموعة التحقق ADBC Driver Foundry، التي تتحقق من السلوك على مستوى SQL، وتحويلات الأنواع ذهابًا وإيابًا، والبيانات الوصفية، والاستيعاب المجمّع
تستند جداول الدعم في هذه الصفحة إلى نتائج عمليات التشغيل هذه. توجد المجموعتان في مستودع chdb-core.